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

173 lines
4.3 KiB
JavaScript
Raw Normal View History

2021-09-05 02:21:11 +03:00
function clear() {
document.getElementById('command_output').innerHTML = '';
document.getElementById('cmd_hist').innerHTML = '';
document.getElementById('content').innerHTML = '';
return '';
}
function reboot() {
window.location.reload();
return 'Rebooting...';
}
function help(cmd) {
let help_page = '';
let help_cmd = cmd[0];
if (help_cmd && !commands[help_cmd]) {
return `Help page for '${help_cmd}' does not exist`
}
if (help_cmd) {
let cmd_help = commands[help_cmd]['help']
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/>`;
help_page += `<b>EXAMPLES</b>:<br/>`;
for (const example in cmd_help['examples']) {
help_page += `<b>$</b> ${cmd_help['examples'][example]}<br/>`
}
} else {
for (const h in commands) {
let cmd_help = commands[h]['help']
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/>`
}
}
return help_page;
}
function show(dest) {
let dst = dest[0];
let iframe = document.createElement('iframe');
iframe.setAttribute('class', 'iframe');
if (!dst) {
return help(['show']);
} else {
for (const l in locations) {
if (locations[l]['aliases'].includes(dst)) {
iframe.setAttribute('src', locations[l]['url']);
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'
} else {
for (const l in locations) {
if (locations[l]['aliases'].includes(dst)) {
window.location = locations[l]['url'];
return `Going to ${locations[l]['url']}`
}
}
}
return `Page ${dst} does not exist`
}
function list() {
let locs = '';
for (const l in locations) {
let loc = locations[l];
locs += `<b>URL</b>: ${loc['url']}<br/>`
locs += `<b>DESCRIPTION</b>: ${loc['desc']}<br/>`
2021-09-27 02:38:04 +03:00
locs += `<b>ALIASES</b>: ${loc['aliases'].join(", ")}<br/>`
2021-09-05 02:21:11 +03:00
locs += `<br/>`
}
return locs;
}
function su(cmd) {
let password_hash;
if (!root) {
password_hash = hash(prompt('Enter your password'));
}
2021-09-05 02:30:22 +03:00
if (!password_hash && !root) {
2021-09-05 02:21:11 +03:00
return 'Not authenticated. (empty password)'
}
if (password_hash != localStorage.getItem('password') && !root) {
return 'Wrong password.';
}
if (cmd[0]) {
if (cmd[0] == '.') {
root = !root
2021-10-09 04:12:07 +03:00
return `Switched to the <b>${root ? 'root' : localStorage.getItem('username')}</b> user.`
2021-09-05 02:21:11 +03:00
} else {
2021-10-09 03:44:22 +03:00
root = true;
2021-10-09 03:47:17 +03:00
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']);
}
}
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')) {
if (password1 === password2) {
2021-10-09 04:52:54 +03:00
localStorage.setItem("password", hash(password1))
alert(`password set`);
2021-09-05 02:21:11 +03:00
} else {
return "Passwords don't match"
}
} else {
return 'Wrong password'
}
}
2021-10-09 03:22:48 +03:00
function whoami() {
return root ? "root" : window.localStorage.getItem("username");
}
2021-10-09 04:41:12 +03:00
function echo(argv) {
return argv.join(" ");
}