diff --git a/html/assets/css/bootstrap-grid.min.css b/html/assets/css/vendor/bootstrap-grid.min.css similarity index 100% rename from html/assets/css/bootstrap-grid.min.css rename to html/assets/css/vendor/bootstrap-grid.min.css diff --git a/html/assets/css/bootstrap-grid.min.css.map b/html/assets/css/vendor/bootstrap-grid.min.css.map similarity index 100% rename from html/assets/css/bootstrap-grid.min.css.map rename to html/assets/css/vendor/bootstrap-grid.min.css.map diff --git a/html/assets/css/bootstrap-reboot.min.css b/html/assets/css/vendor/bootstrap-reboot.min.css similarity index 100% rename from html/assets/css/bootstrap-reboot.min.css rename to html/assets/css/vendor/bootstrap-reboot.min.css diff --git a/html/assets/css/bootstrap-reboot.min.css.map b/html/assets/css/vendor/bootstrap-reboot.min.css.map similarity index 100% rename from html/assets/css/bootstrap-reboot.min.css.map rename to html/assets/css/vendor/bootstrap-reboot.min.css.map diff --git a/html/assets/css/bootstrap.min.css b/html/assets/css/vendor/bootstrap.min.css similarity index 100% rename from html/assets/css/bootstrap.min.css rename to html/assets/css/vendor/bootstrap.min.css diff --git a/html/assets/css/bootstrap.min.css.map b/html/assets/css/vendor/bootstrap.min.css.map similarity index 100% rename from html/assets/css/bootstrap.min.css.map rename to html/assets/css/vendor/bootstrap.min.css.map diff --git a/html/assets/js/api.js b/html/assets/js/api.js index a7a5505..d872885 100644 --- a/html/assets/js/api.js +++ b/html/assets/js/api.js @@ -90,6 +90,13 @@ window.ctf01d_tp_api.service_info = function(service_id) { }); } +window.ctf01d_tp_api.teams_list = function () { + return $.ajax({ + url: '/api/v1/teams', + method: 'GET', + }); +} + window.ctf01d_tp_api.users_list = function (user_data) { return $.ajax({ url: '/api/v1/users', diff --git a/html/assets/js/index.js b/html/assets/js/index.js index b323f9e..3747328 100644 --- a/html/assets/js/index.js +++ b/html/assets/js/index.js @@ -121,27 +121,27 @@ function gameCreate() { function showLoginForm() { $('#sign_error_info').html('') $('#sign_error_info').css({"display": "none"}); - $('#signin_username').focus(); - $('#signin_username').unbind(); - $('#signin_username').keypress(function (e) { + $('#sign_in_username').focus(); + $('#sign_in_username').unbind(); + $('#sign_in_username').keypress(function (e) { if (e.which == 13) { - $('#signin_password').focus(); + $('#sign_in_password').focus(); return false; // <---- Add this line } }); - $('#signin_password').unbind(); - $('#signin_password').keypress(function (e) { + $('#sign_in_password').unbind(); + $('#sign_in_password').keypress(function (e) { if (e.which == 13) { doSignIn(); return false; // <---- Add this line } }); - $('#modal_signin').modal('show'); + $('#modal_sign_in').modal('show'); } function doSignIn() { - var username = $('#signin_username').val(); - var password = $('#signin_password').val(); + var username = $('#sign_in_username').val(); + var password = $('#sign_in_password').val(); $('#sign_error_info').html('') $('#sign_error_info').css({"display": "none"}); window.ctf01d_tp_api.auth_signin({ @@ -154,7 +154,7 @@ function doSignIn() { }).done(function(res) { console.log(res); showSuccessNotification('Login successful!'); - $('#modal_signin').modal('hide'); + $('#modal_sign_in').modal('hide'); setTimeout(function () { window.location.reload(); }, 1000); @@ -359,25 +359,102 @@ function renderServicesPage() { }) } +function showCreateUser() { + $('#users_page_error').css({ "display": "none" }); + $('#users_page_error').html(""); + + $('#user_update_user_id').val(0); + $('#user_create_name').val(""); + $('#user_create_display_name').val(""); + $('#user_create_avatar_url').val(""); + $('#user_create_password').val(""); + $('#user_create_status').val(""); + $('#user_create_role').val("guest"); + $('#user_create_team').empty(); // Clear teams + + loadTeams(); // Load teams into the select element + + $('#btn_user_create_or_update').html("Create"); + $('#title_user_create_or_update').html("New User"); + $('#modal_edit_or_create_user').modal('show'); +} + +function loadTeams() { + window.ctf01d_tp_api.teams_list().done(function (teams) { + var teamSelect = $('#user_create_team'); + teams.forEach(function (team) { + teamSelect.append(``); + }); + }).fail(function () { + alert('Error loading teams'); + }); +} + +function userCreateOrUpdate() { + $('#users_page_error').css({ "display": "none" }); + $('#users_page_error').html(""); + + var user_id = $('#user_update_user_id').val(); + + var userName = $('#user_create_name').val(); + var userDisplayName = $('#user_create_display_name').val(); + var userAvatarUrl = $('#user_create_avatar_url').val(); + var userPassword = $('#user_create_password').val(); + var userStatus = $('#user_create_status').val(); + var userRole = $('#user_create_role').val(); + var userTeams = $('#user_create_team').val().map(function (id) { + return id; + }); + + var userData = { + user_name: userName, + display_name: userDisplayName, + avatar_url: userAvatarUrl, + password: userPassword, + status: userStatus, + role: userRole, + team_ids: userTeams + }; + + if (user_id == 0) { + window.ctf01d_tp_api.user_create(userData).fail(function (res) { + $('#users_page_error').css({ "display": "block" }); + $('#users_page_error').html("Error creating user"); + console.error(res); + }).done(function (res) { + $('#modal_edit_or_create_user').modal('hide'); + showSuccessNotification('User created successfully!'); + renderUsersPage(); + }); + } else { + window.ctf01d_tp_api.user_update(user_id, userData).fail(function (res) { + $('#users_page_error').css({ "display": "block" }); + $('#users_page_error').html("Error updating user"); + console.error(res); + }).done(function (res) { + $('#modal_edit_or_create_user').modal('hide'); + showSuccessNotification('User updated successfully!'); + renderUsersPage(); + }); + } +} + function renderUsersPage() { - $('.spa-web-page').css({ "display": "" }) - $('#users_page').css({ "display": "block" }) + $('.spa-web-page').css({ "display": "" }); + $('#users_page').css({ "display": "block" }); $('#users_page_error').css({ "display": "none" }); $('#users_page_error').html(""); if (window.location.pathname != "/users/") { window.location.href = "/users/"; } window.ctf01d_tp_api.users_list().fail(function (res) { - $('#users_page_error').css({ - "display": "block" - }); + $('#users_page_error').css({ "display": "block" }); $('#users_page_error').html("Error loading users"); console.error("users_list", res); }).done(function (res) { var usersHtml = "" for (var i in res) { var user_info = res[i]; - console.log("user_info", user_info); usersHtml += '
'; usersHtml += ' Image of user'; usersHtml += '
'; @@ -387,14 +464,14 @@ function renderUsersPage() { usersHtml += '

state ' + escapeHtml(user_info.status) + '

'; usersHtml += '
'; usersHtml += '
'; - usersHtml += ' '; + usersHtml += ' '; usersHtml += ' '; usersHtml += ' '; usersHtml += '
'; usersHtml += '
'; } $('#users_page_list').html(usersHtml); - }) + }); } function renderPage(pathname) { @@ -423,6 +500,28 @@ function renderPage(pathname) { } } +function showMyTeams(userId) { + window.ctf01d_tp_api.user_profile(userId).fail(function (res) { + $('#my_teams_content').html('
Fail to fetch profile
'); + $('#modal_my_teams').modal('show'); + console.error("profile", res); + }).done(function (data) { + var teamHistoryHtml = '
'; + for (var i in data.team_history) { + var team = data.team_history[i]; + teamHistoryHtml += '
'; + teamHistoryHtml += '
' + team.name + '
'; + teamHistoryHtml += '
Joined at: ' + new Date(team.join).toLocaleString() + + (team.left ? ', Left at: ' + new Date(team.left).toLocaleString() : ', ... ') + '
'; + teamHistoryHtml += '
'; + } + teamHistoryHtml += '
'; + var currentTeamHtml = '
Current Team: ' + data.team_name + '
'; + $('#my_teams_content').html(currentTeamHtml + teamHistoryHtml); + $('#modal_my_teams').modal('show'); + }); +} + $(document).ready(function () { console.log("Ready") diff --git a/html/assets/js/bootstrap-notify.min.js b/html/assets/js/vendor/bootstrap-notify.min.js similarity index 100% rename from html/assets/js/bootstrap-notify.min.js rename to html/assets/js/vendor/bootstrap-notify.min.js diff --git a/html/assets/js/bootstrap.min.js b/html/assets/js/vendor/bootstrap.min.js similarity index 100% rename from html/assets/js/bootstrap.min.js rename to html/assets/js/vendor/bootstrap.min.js diff --git a/html/assets/js/bootstrap.min.js.map b/html/assets/js/vendor/bootstrap.min.js.map similarity index 100% rename from html/assets/js/bootstrap.min.js.map rename to html/assets/js/vendor/bootstrap.min.js.map diff --git a/html/assets/js/jquery-3.7.1.min.js b/html/assets/js/vendor/jquery-3.7.1.min.js similarity index 100% rename from html/assets/js/jquery-3.7.1.min.js rename to html/assets/js/vendor/jquery-3.7.1.min.js diff --git a/html/assets/js/jquery-3.7.1.min.map b/html/assets/js/vendor/jquery-3.7.1.min.map similarity index 100% rename from html/assets/js/jquery-3.7.1.min.map rename to html/assets/js/vendor/jquery-3.7.1.min.map diff --git a/html/assets/js/popper.min.js b/html/assets/js/vendor/popper.min.js similarity index 100% rename from html/assets/js/popper.min.js rename to html/assets/js/vendor/popper.min.js diff --git a/html/assets/js/tooltip.min.js b/html/assets/js/vendor/tooltip.min.js similarity index 100% rename from html/assets/js/tooltip.min.js rename to html/assets/js/vendor/tooltip.min.js diff --git a/html/index.html b/html/index.html index 56c4012..82b49b1 100644 --- a/html/index.html +++ b/html/index.html @@ -1,3 +1,4 @@ + ctf01d training platform @@ -6,17 +7,17 @@ - + - - - - - + + + + + - + -
+
diff --git a/html/templates/services/index.html b/html/templates/services/index.html deleted file mode 100644 index d6494ec..0000000 --- a/html/templates/services/index.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - Main Page - - - - - -
- -
- -

Add New Service

-
- - - - - - Is Public
- -
-
-
- - - - - diff --git a/html/templates/teams/index.html b/html/templates/teams/index.html deleted file mode 100644 index aa47a84..0000000 --- a/html/templates/teams/index.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - Main Page - - - - - - - -
- -
- -

Add New Team

-
- - - - - - - - - -
-
-
- - - - - diff --git a/html/templates/users/index.html b/html/templates/users/index.html deleted file mode 100644 index b1c0375..0000000 --- a/html/templates/users/index.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - Main Page - - - - - -
- -
- -

Add New User

-
- - - - - - - - -
-
-
- - - - -