mirror of
https://github.com/45Drives/cockpit-navigator.git
synced 2025-07-30 00:55:30 +02:00
use proper Promise syntax instead of hacky awaits
This commit is contained in:
parent
42711e0166
commit
d5ec087874
@ -284,60 +284,77 @@ class NavEntry {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {number} new_perms
|
* @param {number} new_perms
|
||||||
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async chmod(new_perms) {
|
chmod(new_perms) {
|
||||||
var proc = cockpit.spawn(
|
return new Promise((resolve, reject) => {
|
||||||
["chmod", (new_perms & 0o777).toString(8), this.path_str()],
|
var proc = cockpit.spawn(
|
||||||
{superuser: "try", err: "out"}
|
["chmod", (new_perms & 0o777).toString(8), this.path_str()],
|
||||||
);
|
{superuser: "try", err: "out"}
|
||||||
proc.fail((e, data) => {
|
);
|
||||||
window.alert(data);
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} new_owner
|
* @param {string} new_owner
|
||||||
* @param {string} new_group
|
* @param {string} new_group
|
||||||
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async chown(new_owner, new_group) {
|
chown(new_owner, new_group) {
|
||||||
if (!new_owner && !new_group)
|
return new Promise((resolve, reject) => {
|
||||||
return;
|
if (!new_owner && !new_group) {
|
||||||
var cmd = "";
|
resolve();
|
||||||
var arg = "";
|
return;
|
||||||
if (new_group && !new_owner) {
|
}
|
||||||
cmd = "chgrp";
|
var cmd = "";
|
||||||
arg = new_group;
|
var arg = "";
|
||||||
} else {
|
if (new_group && !new_owner) {
|
||||||
cmd = "chown";
|
cmd = "chgrp";
|
||||||
arg = new_owner;
|
arg = new_group;
|
||||||
if (new_group)
|
} else {
|
||||||
arg += ":" + new_group;
|
cmd = "chown";
|
||||||
}
|
arg = new_owner;
|
||||||
var proc = cockpit.spawn(
|
if (new_group)
|
||||||
[cmd, arg, this.path_str()],
|
arg += ":" + new_group;
|
||||||
{superuser: "try", err: "out"}
|
}
|
||||||
);
|
var proc = cockpit.spawn(
|
||||||
proc.fail((e, data) => {
|
[cmd, arg, this.path_str()],
|
||||||
window.alert(data);
|
{superuser: "try", err: "out"}
|
||||||
|
);
|
||||||
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} new_path
|
* @param {string} new_path
|
||||||
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async mv(new_path) {
|
mv(new_path) {
|
||||||
var proc = cockpit.spawn(
|
return new Promise((resolve, reject) => {
|
||||||
["mv", "-n", this.path_str(), [this.nav_window_ref.pwd().path_str(), new_path].join("/")],
|
var proc = cockpit.spawn(
|
||||||
{superuser: "try", err: "out"}
|
["mv", "-n", this.path_str(), [this.nav_window_ref.pwd().path_str(), new_path].join("/")],
|
||||||
);
|
{superuser: "try", err: "out"}
|
||||||
proc.fail((e, data) => {
|
);
|
||||||
window.alert(data);
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -422,25 +439,34 @@ class NavFile extends NavEntry {
|
|||||||
super.handleEvent(e);
|
super.handleEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
async rm() {
|
/**
|
||||||
var proc = cockpit.spawn(
|
*
|
||||||
["rm", "-f", this.path_str()],
|
* @returns {Promise<void>}
|
||||||
{superuser: "try", err: "out"}
|
*/
|
||||||
);
|
rm() {
|
||||||
proc.fail((e, data) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.alert(data);
|
var proc = cockpit.spawn(
|
||||||
|
["rm", "-f", this.path_str()],
|
||||||
|
{superuser: "try", err: "out"}
|
||||||
|
);
|
||||||
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async open() {
|
async open() {
|
||||||
var proc_output = await cockpit.spawn(["file", "--mime-type", this.path_str()], {superuser: "try"});
|
var proc_output = await cockpit.spawn(["file", "--mime-type", this.path_str()], {superuser: "try"});
|
||||||
var fields = proc_output.split(':');
|
var fields = proc_output.split(/:(?=[^:]+$)/); // ensure it's the last : with lookahead
|
||||||
var type = fields[1].trim();
|
var type = fields[1].trim();
|
||||||
|
|
||||||
if ((/^text/.test(type) || /^inode\/x-empty$/.test(type) || this.stat["size"] === 0)) {
|
if ((/^text/.test(type) || /^inode\/x-empty$/.test(type) || this.stat["size"] === 0)) {
|
||||||
this.show_edit_file_contents();
|
this.show_edit_file_contents();
|
||||||
} else {
|
} else {
|
||||||
|
console.log("Unknown mimetype: " + type);
|
||||||
if (window.confirm("Can't open " + this.filename() + " for editing. Download?")) {
|
if (window.confirm("Can't open " + this.filename() + " for editing. Download?")) {
|
||||||
var download = new NavDownloader(this);
|
var download = new NavDownloader(this);
|
||||||
download.download();
|
download.download();
|
||||||
@ -609,10 +635,9 @@ class NavDir extends NavEntry {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {NavWindow} nav_window_ref
|
* @param {NavWindow} nav_window_ref
|
||||||
* @param {boolean} no_alert
|
|
||||||
* @returns {Promise<NavEntry[]>}
|
* @returns {Promise<NavEntry[]>}
|
||||||
*/
|
*/
|
||||||
get_children(nav_window_ref, no_alert = false) {
|
get_children(nav_window_ref) {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
var children = [];
|
var children = [];
|
||||||
var proc = cockpit.spawn(
|
var proc = cockpit.spawn(
|
||||||
@ -620,11 +645,15 @@ class NavDir extends NavEntry {
|
|||||||
{err:"out", superuser: "try"}
|
{err:"out", superuser: "try"}
|
||||||
);
|
);
|
||||||
proc.fail((e, data) => {
|
proc.fail((e, data) => {
|
||||||
if(!no_alert)
|
reject(data);
|
||||||
window.alert(data);
|
|
||||||
reject(e);
|
|
||||||
});
|
});
|
||||||
var data = await proc;
|
var data;
|
||||||
|
try {
|
||||||
|
data = await proc;
|
||||||
|
} catch(e) {
|
||||||
|
reject(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
var response = JSON.parse(data);
|
var response = JSON.parse(data);
|
||||||
this.stat = response["."]["stat"];
|
this.stat = response["."]["stat"];
|
||||||
var entries = response["children"];
|
var entries = response["children"];
|
||||||
@ -651,30 +680,46 @@ class NavDir extends NavEntry {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async rm() {
|
/**
|
||||||
var proc = cockpit.spawn(
|
*
|
||||||
["rmdir", this.path_str()],
|
* @returns {Promise<void>}
|
||||||
{superuser: "try", err: "out"}
|
*/
|
||||||
);
|
rm() {
|
||||||
proc.fail((e, data) => {cannot
|
return new Promise(async (resolve, reject) => {
|
||||||
console.log(data);
|
var proc = cockpit.spawn(
|
||||||
if (/^rmdir: failed to remove .*: Directory not empty\n?$/.test(data)) {
|
["rmdir", this.path_str()],
|
||||||
if (window.confirm("WARNING: '" + this.path_str() + "' is not empty. Delete recursively? This can NOT be undone.")) {
|
{superuser: "try", err: "out"}
|
||||||
this.rm_recursive();
|
);
|
||||||
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
if (/^rmdir: failed to remove .*: Directory not empty\n?$/.test(data)) {
|
||||||
|
if (window.confirm("WARNING: '" + this.path_str() + "' is not empty. Delete recursively? This can NOT be undone.")) {
|
||||||
|
this.rm_recursive(resolve, reject);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reject(data);
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
window.alert(data);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async rm_recursive() {
|
/**
|
||||||
|
*
|
||||||
|
* @param {Function} resolve
|
||||||
|
* @param {Function} reject
|
||||||
|
*/
|
||||||
|
rm_recursive(resolve, reject) {
|
||||||
var proc = cockpit.spawn(
|
var proc = cockpit.spawn(
|
||||||
["rm", "-rf", this.path_str()],
|
["rm", "-rf", this.path_str()],
|
||||||
{superuser: "try", err: "out"}
|
{superuser: "try", err: "out"}
|
||||||
);
|
);
|
||||||
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
proc.fail((e, data) => {
|
proc.fail((e, data) => {
|
||||||
window.alert(data);
|
reject(data);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -760,15 +805,23 @@ class NavDirLink extends NavDir{
|
|||||||
this.dom_element.nav_item_title.style.fontStyle = "italic";
|
this.dom_element.nav_item_title.style.fontStyle = "italic";
|
||||||
}
|
}
|
||||||
|
|
||||||
async rm() {
|
/**
|
||||||
var proc = cockpit.spawn(
|
*
|
||||||
["rm", "-f", this.path_str()],
|
* @returns {Promise<void>}
|
||||||
{superuser: "try", err: "out"}
|
*/
|
||||||
);
|
rm() {
|
||||||
proc.fail((e, data) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.alert(data);
|
var proc = cockpit.spawn(
|
||||||
|
["rm", "-f", this.path_str()],
|
||||||
|
{superuser: "try", err: "out"}
|
||||||
|
);
|
||||||
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
})
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
show_properties() {
|
show_properties() {
|
||||||
@ -844,7 +897,7 @@ class NavContextMenu {
|
|||||||
this.nav_window_ref.paste();
|
this.nav_window_ref.paste();
|
||||||
}
|
}
|
||||||
|
|
||||||
rename() {
|
async rename() {
|
||||||
this.hide();
|
this.hide();
|
||||||
var new_name = window.prompt("New Name: ", this.target.filename());
|
var new_name = window.prompt("New Name: ", this.target.filename());
|
||||||
if (new_name === null)
|
if (new_name === null)
|
||||||
@ -853,7 +906,12 @@ class NavContextMenu {
|
|||||||
window.alert("File name can't contain `/`.");
|
window.alert("File name can't contain `/`.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.target.mv(new_name);
|
try {
|
||||||
|
await this.target.mv(new_name);
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.nav_window_ref.refresh();
|
this.nav_window_ref.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -886,7 +944,9 @@ class NavContextMenu {
|
|||||||
try {
|
try {
|
||||||
result = await this.zip_for_download();
|
result = await this.zip_for_download();
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
this.nav_window_ref.stop_load();
|
||||||
window.alert(e.message);
|
window.alert(e.message);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
this.nav_window_ref.stop_load();
|
this.nav_window_ref.stop_load();
|
||||||
download_target = new NavFile(result["archive-path"], result["stat"], this.nav_window_ref);
|
download_target = new NavFile(result["archive-path"], result["stat"], this.nav_window_ref);
|
||||||
@ -1202,6 +1262,8 @@ class NavWindow {
|
|||||||
var files = await this.pwd().get_children(this);
|
var files = await this.pwd().get_children(this);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
this.up();
|
this.up();
|
||||||
|
window.alert(e);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
while (this.entries.length) {
|
while (this.entries.length) {
|
||||||
var entry = this.entries.pop();
|
var entry = this.entries.pop();
|
||||||
@ -1460,10 +1522,18 @@ class NavWindow {
|
|||||||
new_owner !== entry.stat["owner"] ||
|
new_owner !== entry.stat["owner"] ||
|
||||||
new_group !== entry.stat["group"]
|
new_group !== entry.stat["group"]
|
||||||
) {
|
) {
|
||||||
await entry.chown(new_owner, new_group).catch(/*ignore, caught in chown*/);
|
try {
|
||||||
|
await entry.chown(new_owner, new_group);
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (this.changed_mode && (new_perms & 0o777) !== (entry.stat["mode"] & 0o777)) {
|
if (this.changed_mode && (new_perms & 0o777) !== (entry.stat["mode"] & 0o777)) {
|
||||||
await entry.chmod(new_perms).catch(/*ignore, caught in chmod*/);
|
try {
|
||||||
|
await entry.chmod(new_perms);
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.refresh();
|
this.refresh();
|
||||||
@ -1481,7 +1551,11 @@ class NavWindow {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (let target of this.selected_entries) {
|
for (let target of this.selected_entries) {
|
||||||
await target.rm().catch(/*ignore, caught in rm*/);
|
try {
|
||||||
|
await target.rm();
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
@ -1494,14 +1568,23 @@ class NavWindow {
|
|||||||
window.alert("Directory name can't contain `/`.");
|
window.alert("Directory name can't contain `/`.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var proc = cockpit.spawn(
|
var promise = new Promise((resolve, reject) => {
|
||||||
["mkdir", this.pwd().path_str() + "/" + new_dir_name],
|
var proc = cockpit.spawn(
|
||||||
{superuser: "try", err: "out"}
|
["mkdir", this.pwd().path_str() + "/" + new_dir_name],
|
||||||
);
|
{superuser: "try", err: "out"}
|
||||||
proc.fail((e, data) => {
|
);
|
||||||
window.alert(data);
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
try {
|
||||||
|
await promise;
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1513,14 +1596,23 @@ class NavWindow {
|
|||||||
window.alert("File name can't contain `/`.");
|
window.alert("File name can't contain `/`.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var proc = cockpit.spawn(
|
var promise = new Promise((resolve, reject) => {
|
||||||
["/usr/share/cockpit/navigator/scripts/touch.py", this.pwd().path_str() + "/" + new_file_name],
|
var proc = cockpit.spawn(
|
||||||
{superuser: "try", err: "out"}
|
["/usr/share/cockpit/navigator/scripts/touch.py", this.pwd().path_str() + "/" + new_file_name],
|
||||||
);
|
{superuser: "try", err: "out"}
|
||||||
proc.fail((e, data) => {
|
);
|
||||||
window.alert(data);
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
try {
|
||||||
|
await promise;
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1536,14 +1628,23 @@ class NavWindow {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var link_path = this.pwd().path_str() + "/" + link_name;
|
var link_path = this.pwd().path_str() + "/" + link_name;
|
||||||
var proc = cockpit.spawn(
|
var promise = new Promise((resolve, reject) => {
|
||||||
["ln", "-sn", link_target, link_path],
|
var proc = cockpit.spawn(
|
||||||
{superuser: "try", err: "out"}
|
["ln", "-sn", link_target, link_path],
|
||||||
);
|
{superuser: "try", err: "out"}
|
||||||
proc.fail((e, data) => {
|
);
|
||||||
window.alert(data);
|
proc.done((data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
proc.fail((e, data) => {
|
||||||
|
reject(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await proc;
|
try {
|
||||||
|
await promise;
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1579,26 +1680,34 @@ class NavWindow {
|
|||||||
cmd.push(item.path_str());
|
cmd.push(item.path_str());
|
||||||
}
|
}
|
||||||
cmd.push(dest);
|
cmd.push(dest);
|
||||||
var proc = cockpit.spawn(
|
var promise = new Promise((resolve, reject) => {
|
||||||
cmd,
|
var proc = cockpit.spawn(
|
||||||
{superuser: "try", err: "ignore"}
|
cmd,
|
||||||
);
|
{superuser: "try", err: "ignore"}
|
||||||
proc.stream((data) => {
|
);
|
||||||
var payload = JSON.parse(data);
|
proc.stream((data) => {
|
||||||
if (payload["wants-response"]) {
|
var payload = JSON.parse(data);
|
||||||
var user_response = window.confirm(payload["message"]);
|
if (payload["wants-response"]) {
|
||||||
proc.input(JSON.stringify(user_response) + "\n", true);
|
var user_response = window.confirm(payload["message"]);
|
||||||
} else {
|
proc.input(JSON.stringify(user_response) + "\n", true);
|
||||||
window.alert(payload["message"]);
|
} else {
|
||||||
}
|
window.alert(payload["message"]);
|
||||||
});
|
}
|
||||||
proc.fail((e, data) => {
|
});
|
||||||
window.alert("Paste failed.");
|
proc.done((data) => {
|
||||||
});
|
resolve();
|
||||||
proc.always(() => {
|
});
|
||||||
this.stop_load();
|
proc.fail((e, data) => {
|
||||||
this.refresh();
|
reject("Paste failed.");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
try {
|
||||||
|
await promise;
|
||||||
|
} catch(e) {
|
||||||
|
window.alert(e);
|
||||||
|
}
|
||||||
|
this.stop_load();
|
||||||
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1633,10 +1742,12 @@ class NavWindow {
|
|||||||
return;
|
return;
|
||||||
this.nav_bar_last_parent_path_str = parent_path_str;
|
this.nav_bar_last_parent_path_str = parent_path_str;
|
||||||
var parent_dir = new NavDir(parent_path_str);
|
var parent_dir = new NavDir(parent_path_str);
|
||||||
var error = false;
|
var objs;
|
||||||
var objs = await parent_dir.get_children(this, true).catch(() => {error = true});
|
try {
|
||||||
if(error)
|
objs = await parent_dir.get_children(this);
|
||||||
|
} catch(e) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
objs = objs.filter((child) => {return child.nav_type === "dir"});
|
objs = objs.filter((child) => {return child.nav_type === "dir"});
|
||||||
while(list.firstChild)
|
while(list.firstChild)
|
||||||
list.removeChild(list.firstChild);
|
list.removeChild(list.firstChild);
|
||||||
@ -1681,38 +1792,70 @@ class NavWindow {
|
|||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
async get_system_users() {
|
/**
|
||||||
var proc = cockpit.spawn(["getent", "passwd"], {err: "ignore", superuser: "try"});
|
*
|
||||||
var list = document.getElementById("possible-owners");
|
* @returns {Promise<void>}
|
||||||
while(list.firstChild) {
|
*/
|
||||||
list.removeChild(list.firstChild);
|
get_system_users() {
|
||||||
}
|
return new Promise(async (resolve, reject) => {
|
||||||
var passwd = await proc;
|
var proc = cockpit.spawn(["getent", "passwd"], {err: "ignore", superuser: "try"});
|
||||||
var passwd_entries = passwd.split("\n");
|
proc.fail((e, data) => {
|
||||||
for (let entry of passwd_entries) {
|
reject(data);
|
||||||
var cols = entry.split(":");
|
});
|
||||||
var username = cols[0];
|
var list = document.getElementById("possible-owners");
|
||||||
var option = document.createElement("option");
|
while(list.firstChild) {
|
||||||
option.value = username;
|
list.removeChild(list.firstChild);
|
||||||
list.appendChild(option);
|
}
|
||||||
}
|
var passwd;
|
||||||
|
try {
|
||||||
|
passwd = await proc;
|
||||||
|
} catch(e) {
|
||||||
|
reject(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var passwd_entries = passwd.split("\n");
|
||||||
|
for (let entry of passwd_entries) {
|
||||||
|
var cols = entry.split(":");
|
||||||
|
var username = cols[0];
|
||||||
|
var option = document.createElement("option");
|
||||||
|
option.value = username;
|
||||||
|
list.appendChild(option);
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async get_system_groups() {
|
/**
|
||||||
var proc = cockpit.spawn(["getent", "group"], {err: "ignore", superuser: "try"});
|
*
|
||||||
var list = document.getElementById("possible-groups");
|
* @returns {Promise<void>}
|
||||||
while(list.firstChild) {
|
*/
|
||||||
list.removeChild(list.firstChild);
|
get_system_groups() {
|
||||||
}
|
return new Promise(async (resolve, reject) => {
|
||||||
var group = await proc;
|
var proc = cockpit.spawn(["getent", "group"], {err: "ignore", superuser: "try"});
|
||||||
var group_entries = group.split("\n");
|
proc.fail((e, data) => {
|
||||||
for (let entry of group_entries) {
|
reject(data);
|
||||||
var cols = entry.split(":");
|
});
|
||||||
var groupname = cols[0];
|
var list = document.getElementById("possible-groups");
|
||||||
var option = document.createElement("option");
|
while(list.firstChild) {
|
||||||
option.value = groupname;
|
list.removeChild(list.firstChild);
|
||||||
list.appendChild(option);
|
}
|
||||||
}
|
var group
|
||||||
|
try {
|
||||||
|
group = await proc;
|
||||||
|
} catch(e) {
|
||||||
|
reject(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var group_entries = group.split("\n");
|
||||||
|
for (let entry of group_entries) {
|
||||||
|
var cols = entry.split(":");
|
||||||
|
var groupname = cols[0];
|
||||||
|
var option = document.createElement("option");
|
||||||
|
option.value = groupname;
|
||||||
|
list.appendChild(option);
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
disable_buttons_for_editing() {
|
disable_buttons_for_editing() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user