120 lines
3.6 KiB
JavaScript
120 lines
3.6 KiB
JavaScript
const $ = CTFd.lib.$;
|
|
|
|
function htmlentities(str) {
|
|
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
}
|
|
|
|
function copyToClipboard(event, str) {
|
|
// Select element
|
|
const el = document.createElement('textarea');
|
|
el.value = str;
|
|
el.setAttribute('readonly', '');
|
|
el.style.position = 'absolute';
|
|
el.style.left = '-9999px';
|
|
document.body.appendChild(el);
|
|
el.select();
|
|
document.execCommand('copy');
|
|
document.body.removeChild(el);
|
|
|
|
$(event.target).tooltip({
|
|
title: "Copied!",
|
|
trigger: "manual"
|
|
});
|
|
$(event.target).tooltip("show");
|
|
|
|
setTimeout(function () {
|
|
$(event.target).tooltip("hide");
|
|
}, 1500);
|
|
}
|
|
|
|
$(".click-copy").click(function (e) {
|
|
copyToClipboard(e, $(this).data("copy"));
|
|
})
|
|
|
|
async function delete_container(user_id) {
|
|
let response = await CTFd.fetch("/api/v1/plugins/ctfd-whale/admin/container?user_id=" + user_id, {
|
|
method: "DELETE",
|
|
credentials: "same-origin",
|
|
headers: {
|
|
Accept: "application/json",
|
|
"Content-Type": "application/json"
|
|
}
|
|
});
|
|
response = await response.json();
|
|
return response.success;
|
|
}
|
|
async function renew_container(user_id) {
|
|
let response = await CTFd.fetch(
|
|
"/api/v1/plugins/ctfd-whale/admin/container?user_id=" + user_id, {
|
|
method: "PATCH",
|
|
credentials: "same-origin",
|
|
headers: {
|
|
Accept: "application/json",
|
|
"Content-Type": "application/json"
|
|
}
|
|
});
|
|
response = await response.json();
|
|
return response.success;
|
|
}
|
|
|
|
$('#containers-renew-button').click(function (e) {
|
|
let users = $("input[data-user-id]:checked").map(function () {
|
|
return $(this).data("user-id");
|
|
});
|
|
CTFd.ui.ezq.ezQuery({
|
|
title: "Renew Containers",
|
|
body: `Are you sure you want to renew the selected ${users.length} container(s)?`,
|
|
success: async function () {
|
|
await Promise.all(users.toArray().map((user) => renew_container(user)));
|
|
location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#containers-delete-button').click(function (e) {
|
|
let users = $("input[data-user-id]:checked").map(function () {
|
|
return $(this).data("user-id");
|
|
});
|
|
CTFd.ui.ezq.ezQuery({
|
|
title: "Delete Containers",
|
|
body: `Are you sure you want to delete the selected ${users.length} container(s)?`,
|
|
success: async function () {
|
|
await Promise.all(users.toArray().map((user) => delete_container(user)));
|
|
location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
$(".delete-container").click(function (e) {
|
|
e.preventDefault();
|
|
let container_id = $(this).attr("container-id");
|
|
let user_id = $(this).attr("user-id");
|
|
|
|
CTFd.ui.ezq.ezQuery({
|
|
title: "Destroy Container",
|
|
body: "<span>Are you sure you want to delete <strong>Container #{0}</strong>?</span>".format(
|
|
htmlentities(container_id)
|
|
),
|
|
success: async function () {
|
|
await delete_container(user_id);
|
|
location.reload();
|
|
}
|
|
});
|
|
});
|
|
|
|
$(".renew-container").click(function (e) {
|
|
e.preventDefault();
|
|
let container_id = $(this).attr("container-id");
|
|
let user_id = $(this).attr("user-id");
|
|
|
|
CTFd.ui.ezq.ezQuery({
|
|
title: "Renew Container",
|
|
body: "<span>Are you sure you want to renew <strong>Container #{0}</strong>?</span>".format(
|
|
htmlentities(container_id)
|
|
),
|
|
success: async function () {
|
|
await renew_container(user_id);
|
|
location.reload();
|
|
},
|
|
});
|
|
}); |