Dark mode improvements, add user delete confirmation

This commit is contained in:
Laura Hausmann 2022-02-04 09:29:29 +01:00
parent c88a0d0b11
commit 30228bb4a4
Signed by: zotan
GPG key ID: D044E84C5BE01605
4 changed files with 96 additions and 50 deletions

View file

@ -75,7 +75,7 @@
} }
else { else {
<button class="btn btn-dark" onclick="prepareSetPasswordModal('@user.Username')">Set Password</button> <button class="btn btn-dark" onclick="prepareSetPasswordModal('@user.Username')">Set Password</button>
<button onclick="ajax_and_reload('user_delete', '@user.Username')" class="btn btn-danger">Delete</button> <button onclick="prepareDeleteUserModal('@user.Username')" class="btn btn-danger">Delete</button>
} }
</td> </td>
</tr> </tr>
@ -115,6 +115,11 @@ function prepareSetPasswordModal(target) {
document.getElementById('setPasswordTarget').value = target; document.getElementById('setPasswordTarget').value = target;
$('#setPasswordModal').modal(); $('#setPasswordModal').modal();
} }
function prepareDeleteUserModal(target) {
document.getElementById('deleteUserModalLabel').innerHTML = 'Delete user: ' + target;
document.getElementById('deleteUserTarget').value = target;
$('#deleteUserModal').modal();
}
</script> </script>
<div class="modal fade" id="setPasswordModal" tabindex="-1" aria-labelledby="setPasswordModalLabel" aria-hidden="true"> <div class="modal fade" id="setPasswordModal" tabindex="-1" aria-labelledby="setPasswordModalLabel" aria-hidden="true">
@ -142,3 +147,26 @@ function prepareSetPasswordModal(target) {
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" id="deleteUserModal" tabindex="-1" aria-labelledby="setPasswordModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteUserModalLabel">Delete user</h5>
<button role="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form method="POST">
<div class="modal-body">
<div class="form-group">
<input type="hidden" value="user_delete" name="action">
<input type="hidden" value="" name="target" id="deleteUserTarget">
<button role="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-danger">Do it</button>
</div>
</div>
</form>
</div>
</div>
</div>

View file

@ -6,15 +6,14 @@ using Microsoft.AspNetCore.Mvc.RazorPages;
using RTMPDash.DataModels; using RTMPDash.DataModels;
using RTMPDash.DataModels.Tables; using RTMPDash.DataModels.Tables;
namespace RTMPDash.Pages { namespace RTMPDash.Pages;
public class AdminModel : PageModel {
public class AdminModel : PageModel {
public void OnGet() { } public void OnGet() { }
public void OnPost() { public void OnPost() {
if (string.IsNullOrEmpty(HttpContext.Session.GetString("authenticatedUser")) if (string.IsNullOrEmpty(HttpContext.Session.GetString("authenticatedUser"))
|| !new AppDb.DbConn().Users || !new AppDb.DbConn().Users.First(p => p.Username == HttpContext.Session.GetString("authenticatedUser")).IsAdmin)
.First(p => p.Username == HttpContext.Session.GetString("authenticatedUser"))
.IsAdmin)
return; return;
if (!Request.HasFormContentType || string.IsNullOrWhiteSpace(Request.Form["action"])) if (!Request.HasFormContentType || string.IsNullOrWhiteSpace(Request.Form["action"]))
@ -23,7 +22,7 @@ namespace RTMPDash.Pages {
var db = new AppDb.DbConn(); var db = new AppDb.DbConn();
if (Request.Form["action"] == "invite_generate") if (Request.Form["action"] == "invite_generate")
db.Insert(new Invite {Code = Guid.NewGuid().ToString()}); db.Insert(new Invite { Code = Guid.NewGuid().ToString() });
if (Request.Form["action"] == "invite_revoke") if (Request.Form["action"] == "invite_revoke")
db.Delete(db.Invites.First(p => p.Code == Request.Form["target"])); db.Delete(db.Invites.First(p => p.Code == Request.Form["target"]));
@ -55,13 +54,14 @@ namespace RTMPDash.Pages {
if (Request.Form["action"] == "user_delete") { if (Request.Form["action"] == "user_delete") {
var user = db.Users.First(p => p.Username == Request.Form["target"]); var user = db.Users.First(p => p.Username == Request.Form["target"]);
db.Delete(user); db.Delete(user);
Response.Redirect("/Admin");
} }
if (Request.Form["action"] == "user_setpass") { if (Request.Form["action"] == "user_setpass") {
var user = db.Users.First(p => p.Username == Request.Form["target"]); var user = db.Users.First(p => p.Username == Request.Form["target"]);
user.Password = Request.Form["value"].ToString().Sha256(); user.Password = Request.Form["value"].ToString().Sha256();
db.Update(user); db.Update(user);
} Response.Redirect("/Admin");
} }
} }
} }

View file

@ -1,12 +1,12 @@
@page @page
@inject IAntiforgery Antiforgery @inject IAntiforgery _antiforgery
@using Microsoft.AspNetCore.Antiforgery @using Microsoft.AspNetCore.Antiforgery
@using Microsoft.AspNetCore.Http @using Microsoft.AspNetCore.Http
@using RTMPDash.DataModels @using RTMPDash.DataModels
@model DashboardModel @model DashboardModel
@{ @{
ViewData["Title"] = "Dashboard"; ViewData["Title"] = "Dashboard";
var tokenSet = Antiforgery.GetAndStoreTokens(HttpContext); var tokenSet = _antiforgery.GetAndStoreTokens(HttpContext);
} }
@if (string.IsNullOrWhiteSpace(HttpContext.Session.GetString("authenticatedUser"))) { @if (string.IsNullOrWhiteSpace(HttpContext.Session.GetString("authenticatedUser"))) {

View file

@ -4,7 +4,7 @@
* Licensed under MIT (https://github.com/coliff/dark-mode-switch/blob/main/LICENSE) * Licensed under MIT (https://github.com/coliff/dark-mode-switch/blob/main/LICENSE)
*/ */
[data-theme="dark"] { [data-theme="dark"], [data-theme="dark"] .modal-content {
background-color: #222 !important; background-color: #222 !important;
color: #eee; color: #eee;
} }
@ -72,6 +72,24 @@
border-color: #4f4f4f; border-color: #4f4f4f;
} }
[data-theme="dark"] .modal-header {
border-bottom: 1px solid #383838;
color: #b6b6b6;
}
[data-theme="dark"] .modal-footer {
border-top: 1px solid #383838;
color: #b6b6b6;
}
[data-theme="dark"] .close {
color: #bebdbd;
}
[data-theme="dark"] .close:hover {
color: #d5d5d5;
}
.notransition, .notransition::before, .notransition::after { .notransition, .notransition::before, .notransition::after {
-webkit-transition: none !important; -webkit-transition: none !important;
-moz-transition: none !important; -moz-transition: none !important;