mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-09 02:54:09 +00:00

optionally allow admin users to login to user servers by visiting a special admin-only URL that sets the relevant cookie - disabled by default - an 'access server' button is added to the admin panel, which sets the necessary cookie to log in to the user server
133 lines
4.0 KiB
JavaScript
133 lines
4.0 KiB
JavaScript
// Copyright (c) Jupyter Development Team.
|
|
// Distributed under the terms of the Modified BSD License.
|
|
|
|
require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, moment, JHAPI, utils) {
|
|
"use strict";
|
|
|
|
var base_url = window.jhdata.base_url;
|
|
var prefix = window.jhdata.prefix;
|
|
|
|
var api = new JHAPI(base_url);
|
|
|
|
var get_row = function (element) {
|
|
while (!element.hasClass("user-row")) {
|
|
element = element.parent();
|
|
}
|
|
return element;
|
|
};
|
|
|
|
$(".time-col").map(function (i, el) {
|
|
// convert ISO datestamps to nice momentjs ones
|
|
el = $(el);
|
|
el.text(moment(new Date(el.text())).fromNow());
|
|
});
|
|
|
|
$(".stop-server").click(function () {
|
|
var el = $(this);
|
|
var row = get_row(el);
|
|
var user = row.data('user');
|
|
el.text("stopping...");
|
|
api.stop_server(user, {
|
|
success: function () {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
$(".access-server").click(function () {
|
|
var el = $(this);
|
|
var row = get_row(el);
|
|
var user = row.data('user');
|
|
var w = window.open();
|
|
api.admin_access(user, {
|
|
async: false,
|
|
success: function () {
|
|
w.location = utils.url_path_join(prefix, 'user', user);
|
|
},
|
|
error: function (xhr, err) {
|
|
w.close();
|
|
console.error("Failed to gain access to server", err);
|
|
}
|
|
});
|
|
});
|
|
|
|
$(".start-server").click(function () {
|
|
var el = $(this);
|
|
var row = get_row(el);
|
|
var user = row.data('user');
|
|
el.text("starting...");
|
|
api.start_server(user, {
|
|
success: function () {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
$(".edit-user").click(function () {
|
|
var el = $(this);
|
|
var row = get_row(el);
|
|
var user = row.data('user');
|
|
var admin = row.data('admin');
|
|
var dialog = $("#edit-user-dialog");
|
|
dialog.data('user', user);
|
|
dialog.find(".username-input").val(user);
|
|
dialog.find(".admin-checkbox").attr("checked", admin==='True');
|
|
dialog.modal();
|
|
});
|
|
|
|
$("#edit-user-dialog").find(".save-button").click(function () {
|
|
var dialog = $("#edit-user-dialog");
|
|
var user = dialog.data('user');
|
|
var name = dialog.find(".username-input").val();
|
|
var admin = dialog.find(".admin-checkbox").prop("checked");
|
|
api.edit_user(user, {
|
|
admin: admin,
|
|
name: name
|
|
}, {
|
|
success: function () {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
$(".delete-user").click(function () {
|
|
var el = $(this);
|
|
var row = get_row(el);
|
|
var user = row.data('user');
|
|
var dialog = $("#delete-user-dialog");
|
|
dialog.find(".delete-username").text(user);
|
|
dialog.modal();
|
|
});
|
|
|
|
$("#delete-user-dialog").find(".delete-button").click(function () {
|
|
var dialog = $("#delete-user-dialog");
|
|
var username = dialog.find(".delete-username").text();
|
|
console.log("deleting", username);
|
|
api.delete_user(username, {
|
|
success: function () {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
$("#add-user").click(function () {
|
|
var dialog = $("#add-user-dialog");
|
|
dialog.find(".username-input").val('');
|
|
dialog.find(".admin-checkbox").prop("checked", false);
|
|
dialog.modal();
|
|
});
|
|
|
|
$("#add-user-dialog").find(".save-button").click(function () {
|
|
var dialog = $("#add-user-dialog");
|
|
var username = dialog.find(".username-input").val();
|
|
var admin = dialog.find(".admin-checkbox").prop("checked");
|
|
api.add_user(username, {admin: admin}, {
|
|
success: function () {
|
|
window.location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
});
|