ari.lt/content/js/shell/func.js

189 lines
5 KiB
JavaScript
Raw Normal View History

"use strict";
2021-09-05 02:21:11 +03:00
function clear() {
document.getElementById("command_output").innerHTML = "";
document.getElementById("cmd_hist").innerHTML = "";
document.getElementById("content").innerHTML = "";
2021-09-05 02:21:11 +03:00
return "";
2021-09-05 02:21:11 +03:00
}
function reboot() {
window.location.reload();
return "Rebooting...";
2021-09-05 02:21:11 +03:00
}
function help(cmd) {
let help_page = "";
2021-09-05 02:21:11 +03:00
let help_cmd = cmd[0];
if (help_cmd && !commands[help_cmd]) {
return `Help page for '${help_cmd}' does not exist`;
2021-09-05 02:21:11 +03:00
}
if (help_cmd) {
let cmd_help = commands[help_cmd]["help"];
2021-09-05 02:21:11 +03:00
help_page += `<b>NAME</b>: ${help_cmd}<br/>`;
help_page += `<b>SUID</b>: ${commands[help_cmd]["root_only"]}<br/>`;
help_page += `<b>DESCRIPTION</b>: ${cmd_help["desc"]}<br/>`;
2021-09-05 02:21:11 +03:00
help_page += `<b>EXAMPLES</b>:<br/>`;
for (const example in cmd_help["examples"]) {
help_page += `<b>$</b> ${cmd_help["examples"][example]}<br/>`;
2021-09-05 02:21:11 +03:00
}
} else {
for (const h in commands) {
let cmd_help = commands[h]["help"];
2021-09-05 02:21:11 +03:00
help_page += `<b>NAME</b>: ${h}<br/>`;
help_page += `<b>SUID</b>: ${commands[h]["root_only"]}<br/>`;
help_page += `<b>DESCRIPTION</b>: ${cmd_help["short_desc"]}<br/>`;
help_page += `<b>EXAMPLE</b>: ${cmd_help["examples"][0]}<br/>`;
help_page += `<br/>`;
2021-09-05 02:21:11 +03:00
}
}
return help_page;
}
function show(dest) {
let dst = dest[0];
let iframe = document.createElement("iframe");
iframe.setAttribute("class", "iframe");
2021-09-05 02:21:11 +03:00
if (!dst) {
return help(["show"]);
2021-09-05 02:21:11 +03:00
} else {
for (const l in locations) {
if (locations[l]["aliases"].includes(dst)) {
iframe.setAttribute("src", locations[l]["url"]);
2021-09-05 02:21:11 +03:00
break;
}
}
}
if (iframe.src) {
return iframe.outerHTML;
} else {
return `Page '${dst}' not found`;
}
}
2021-09-27 21:08:53 +03:00
function cd(dest) {
2021-09-05 02:21:11 +03:00
let dst = dest[0];
if (!dst) {
window.location = "/";
return "Returning to the home page";
2021-09-05 02:21:11 +03:00
} else {
for (const l in locations) {
if (locations[l]["aliases"].includes(dst)) {
window.location = locations[l]["url"];
return `Going to ${locations[l]["url"]}`;
2021-09-05 02:21:11 +03:00
}
}
}
return `Page ${dst} does not exist`;
2021-09-05 02:21:11 +03:00
}
function list() {
let locs = "";
2021-09-05 02:21:11 +03:00
for (const l in locations) {
let loc = locations[l];
locs += `<b>URL</b>: ${loc["url"]}<br/>`;
locs += `<b>DESCRIPTION</b>: ${loc["desc"]}<br/>`;
locs += `<b>ALIASES</b>: ${loc["aliases"].join(", ")}<br/>`;
locs += `<br/>`;
2021-09-05 02:21:11 +03:00
}
return locs;
}
function su(cmd) {
let password_hash;
if (!root) {
password_hash = hash(prompt("Enter your password"));
2021-09-05 02:21:11 +03:00
}
2021-09-05 02:30:22 +03:00
if (!password_hash && !root) {
return "Not authenticated. (empty password)";
2021-09-05 02:21:11 +03:00
}
if (password_hash != localStorage.getItem("password") && !root) {
return "Wrong password.";
2021-09-05 02:21:11 +03:00
}
if (cmd[0]) {
if (cmd[0] == ".") {
root = !root;
return `Switched to the <b>${
root ? "root" : escape_HTML(localStorage.getItem("username"))
}</b> user.`;
2021-09-05 02:21:11 +03:00
} else {
2021-10-09 03:44:22 +03:00
root = true;
let ret = "Command not found";
2021-10-09 04:08:13 +03:00
let err = false;
2021-10-09 03:46:30 +03:00
try {
ret = commands[cmd[0]]["func"](cmd.slice(1));
2021-10-09 04:08:13 +03:00
} catch (e) {
if (e.constructor !== TypeError) err = e;
}
2021-10-09 03:46:30 +03:00
2021-10-09 03:44:22 +03:00
root = false;
2021-10-09 04:08:13 +03:00
if (err) {
alert(`ERROR (report it to 'cd src'): ${err}`);
throw err;
}
2021-10-09 03:44:22 +03:00
return ret;
2021-09-05 02:21:11 +03:00
}
} else {
return help(["su"]);
2021-09-05 02:21:11 +03:00
}
}
function passwd() {
let current_password = hash(prompt("Current password"));
let password1 = prompt("New password");
let password2 = prompt("Confirm new password");
if (current_password == localStorage.getItem("password")) {
2021-09-05 02:21:11 +03:00
if (password1 === password2) {
localStorage.setItem("password", hash(password1));
2021-10-09 04:52:54 +03:00
alert(`password set`);
2021-09-05 02:21:11 +03:00
} else {
return "Passwords don't match";
2021-09-05 02:21:11 +03:00
}
} else {
return "Wrong password";
2021-09-05 02:21:11 +03:00
}
}
2021-10-09 03:22:48 +03:00
function whoami() {
2021-10-10 04:29:16 +03:00
return root ? "root" : escape_HTML(window.localStorage.getItem("username"));
2021-10-09 03:22:48 +03:00
}
2021-10-09 04:41:12 +03:00
function echo(argv) {
2021-10-09 04:59:39 +03:00
return escape_HTML(argv.join(" "));
2021-10-09 04:41:12 +03:00
}
function webfetch() {
let head_str = `${whoami()}@${site_name}`;
return `\`8.\`888b ,8' ${head_str}
\`8.\`888b ,8' ${"-".repeat(head_str.length)}
\`8.\`888b ,8' OS: WebOS
\`8.\`888b .b ,8' Kernel: Wkernel ${kernel_version}
\`8.\`888b 88b ,8' Shell: Wsh
\`8.\`888b .\`888b,8' Terminal: HTML
\`8.\`888b8.\`8888' CPU: ${site_name} web cpu (1) @ 1GHz
\`8.\`888\`8.\`88' Memory: 2B / 8B
\`8.\`8' \`8,\`' Init: WebRC
\`8.\` \`8'`;
}