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 += '
state ' + escapeHtml(user_info.status) + '
'; usersHtml += '