Fork project
This commit is contained in:
239
assets/view.js
Normal file
239
assets/view.js
Normal file
@ -0,0 +1,239 @@
|
||||
CTFd._internal.challenge.data = undefined
|
||||
|
||||
CTFd._internal.challenge.renderer = null;
|
||||
|
||||
CTFd._internal.challenge.preRender = function () {
|
||||
}
|
||||
|
||||
CTFd._internal.challenge.render = null;
|
||||
|
||||
CTFd._internal.challenge.postRender = function () {
|
||||
loadInfo();
|
||||
}
|
||||
|
||||
if (window.$ === undefined) window.$ = CTFd.lib.$;
|
||||
|
||||
function loadInfo() {
|
||||
var challenge_id = CTFd._internal.challenge.data.id;
|
||||
var url = "/api/v1/plugins/ctfd-whale/container?challenge_id=" + challenge_id;
|
||||
|
||||
CTFd.fetch(url, {
|
||||
method: 'GET',
|
||||
credentials: 'same-origin',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}).then(function (response) {
|
||||
if (response.status === 429) {
|
||||
// User was ratelimited but process response
|
||||
return response.json();
|
||||
}
|
||||
if (response.status === 403) {
|
||||
// User is not logged in or CTF is paused.
|
||||
return response.json();
|
||||
}
|
||||
return response.json();
|
||||
}).then(function (response) {
|
||||
if (window.t !== undefined) {
|
||||
clearInterval(window.t);
|
||||
window.t = undefined;
|
||||
}
|
||||
if (response.success) response = response.data;
|
||||
else CTFd._functions.events.eventAlert({
|
||||
title: "Fail",
|
||||
html: response.message,
|
||||
button: "OK"
|
||||
});
|
||||
if (response.remaining_time != undefined) {
|
||||
$('#whale-challenge-user-access').html(response.user_access);
|
||||
$('#whale-challenge-lan-domain').html(response.lan_domain);
|
||||
$('#whale-challenge-count-down').text(response.remaining_time);
|
||||
$('#whale-panel-stopped').hide();
|
||||
$('#whale-panel-started').show();
|
||||
|
||||
window.t = setInterval(() => {
|
||||
const c = $('#whale-challenge-count-down').text();
|
||||
if (!c) return;
|
||||
let second = parseInt(c) - 1;
|
||||
if (second <= 0) {
|
||||
loadInfo();
|
||||
}
|
||||
$('#whale-challenge-count-down').text(second);
|
||||
}, 1000);
|
||||
} else {
|
||||
$('#whale-panel-started').hide();
|
||||
$('#whale-panel-stopped').show();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
CTFd._internal.challenge.destroy = function () {
|
||||
var challenge_id = CTFd._internal.challenge.data.id;
|
||||
var url = "/api/v1/plugins/ctfd-whale/container?challenge_id=" + challenge_id;
|
||||
|
||||
$('#whale-button-destroy').text("Waiting...");
|
||||
$('#whale-button-destroy').prop('disabled', true);
|
||||
|
||||
var params = {};
|
||||
|
||||
CTFd.fetch(url, {
|
||||
method: 'DELETE',
|
||||
credentials: 'same-origin',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(function (response) {
|
||||
if (response.status === 429) {
|
||||
// User was ratelimited but process response
|
||||
return response.json();
|
||||
}
|
||||
if (response.status === 403) {
|
||||
// User is not logged in or CTF is paused.
|
||||
return response.json();
|
||||
}
|
||||
return response.json();
|
||||
}).then(function (response) {
|
||||
if (response.success) {
|
||||
loadInfo();
|
||||
CTFd._functions.events.eventAlert({
|
||||
title: "Success",
|
||||
html: "Your instance has been destroyed!",
|
||||
button: "OK"
|
||||
});
|
||||
} else {
|
||||
CTFd._functions.events.eventAlert({
|
||||
title: "Fail",
|
||||
html: response.message,
|
||||
button: "OK"
|
||||
});
|
||||
}
|
||||
}).finally(() => {
|
||||
$('#whale-button-destroy').text("Destroy this instance");
|
||||
$('#whale-button-destroy').prop('disabled', false);
|
||||
});
|
||||
};
|
||||
|
||||
CTFd._internal.challenge.renew = function () {
|
||||
var challenge_id = CTFd._internal.challenge.data.id;
|
||||
var url = "/api/v1/plugins/ctfd-whale/container?challenge_id=" + challenge_id;
|
||||
|
||||
$('#whale-button-renew').text("Waiting...");
|
||||
$('#whale-button-renew').prop('disabled', true);
|
||||
|
||||
var params = {};
|
||||
|
||||
CTFd.fetch(url, {
|
||||
method: 'PATCH',
|
||||
credentials: 'same-origin',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(function (response) {
|
||||
if (response.status === 429) {
|
||||
// User was ratelimited but process response
|
||||
return response.json();
|
||||
}
|
||||
if (response.status === 403) {
|
||||
// User is not logged in or CTF is paused.
|
||||
return response.json();
|
||||
}
|
||||
return response.json();
|
||||
}).then(function (response) {
|
||||
if (response.success) {
|
||||
loadInfo();
|
||||
CTFd._functions.events.eventAlert({
|
||||
title: "Success",
|
||||
html: "Your instance has been renewed!",
|
||||
button: "OK"
|
||||
});
|
||||
} else {
|
||||
CTFd._functions.events.eventAlert({
|
||||
title: "Fail",
|
||||
html: response.message,
|
||||
button: "OK"
|
||||
});
|
||||
}
|
||||
}).finally(() => {
|
||||
$('#whale-button-renew').text("Renew this instance");
|
||||
$('#whale-button-renew').prop('disabled', false);
|
||||
});
|
||||
};
|
||||
|
||||
CTFd._internal.challenge.boot = function () {
|
||||
var challenge_id = CTFd._internal.challenge.data.id;
|
||||
var url = "/api/v1/plugins/ctfd-whale/container?challenge_id=" + challenge_id;
|
||||
|
||||
$('#whale-button-boot').text("Waiting...");
|
||||
$('#whale-button-boot').prop('disabled', true);
|
||||
|
||||
var params = {};
|
||||
|
||||
CTFd.fetch(url, {
|
||||
method: 'POST',
|
||||
credentials: 'same-origin',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(function (response) {
|
||||
if (response.status === 429) {
|
||||
// User was ratelimited but process response
|
||||
return response.json();
|
||||
}
|
||||
if (response.status === 403) {
|
||||
// User is not logged in or CTF is paused.
|
||||
return response.json();
|
||||
}
|
||||
return response.json();
|
||||
}).then(function (response) {
|
||||
if (response.success) {
|
||||
loadInfo();
|
||||
CTFd._functions.events.eventAlert({
|
||||
title: "Success",
|
||||
html: "Your instance has been deployed!",
|
||||
button: "OK"
|
||||
});
|
||||
} else {
|
||||
CTFd._functions.events.eventAlert({
|
||||
title: "Fail",
|
||||
html: response.message,
|
||||
button: "OK"
|
||||
});
|
||||
}
|
||||
}).finally(() => {
|
||||
$('#whale-button-boot').text("Launch an instance");
|
||||
$('#whale-button-boot').prop('disabled', false);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
CTFd._internal.challenge.submit = function (preview) {
|
||||
var challenge_id = CTFd._internal.challenge.data.id;
|
||||
var submission = $('#challenge-input').val()
|
||||
|
||||
var body = {
|
||||
'challenge_id': challenge_id,
|
||||
'submission': submission,
|
||||
}
|
||||
var params = {}
|
||||
if (preview)
|
||||
params['preview'] = true
|
||||
|
||||
return CTFd.api.post_challenge_attempt(params, body).then(function (response) {
|
||||
if (response.status === 429) {
|
||||
// User was ratelimited but process response
|
||||
return response
|
||||
}
|
||||
if (response.status === 403) {
|
||||
// User is not logged in or CTF is paused.
|
||||
return response
|
||||
}
|
||||
return response
|
||||
})
|
||||
};
|
||||
Reference in New Issue
Block a user