feat: add user management, refs NOISSUE

This commit is contained in:
2025-05-17 22:17:09 +02:00
parent 6b9c383697
commit efbbc915e5
17 changed files with 908 additions and 97 deletions

View File

@@ -1,4 +1,15 @@
<!DOCTYPE html>
@{
bool DoesUserHaveClaimedPhoneNumber()
{
using (var dci = DataContext.Instance)
{
var user = dci.Users.Where(u => u.LdapUserName == User.Identity.Name);
return user.Any();
}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -26,9 +37,18 @@
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/SuggestionHelpers">Suggestion Helpers</a>
</li>
@if (this.User.Identity.IsAuthenticated && !DoesUserHaveClaimedPhoneNumber())
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/UnclaimedPhoneNumbers">Unclaimed Phone Numbers</a>
</li>
}
</ul>
</div>
</div>
<div class="container" style="min-height: auto; width: 400px;">
<partial name="_LoginView" />
</div>
</nav>
</header>
<div class="container">

View File

@@ -0,0 +1,36 @@
@using Microsoft.AspNetCore.Authentication
<div class="loginform">
@if (!this.User.Identity.IsAuthenticated)
{
<form method="post" action="Auth/Login">
<div>
<label for="username">Username:</label>
</div>
<div>
<input name="username" type="text" />
</div>
<div>
<label for="password">Password:</label>
</div>
<div>
<input name="password" type="password" />
</div>
<div>
<input name="submit" type="submit" value="Login" />
</div>
</form>
}
else
{
<form method="post" action="Auth/Logout">
<div>
Welcome, @User.Identity.Name!
</div>
<div>
<input name="submit" type="submit" value="Logout" />
</div>
</form>
}
</div>

View File

@@ -0,0 +1,38 @@
@page
@model UnclaimedPhoneNumbersModel
@{
ViewData["Title"] = "Unclaimed Phone Numbers";
var codeService = HttpContext.RequestServices.GetService<PhoneClaimCodeProviderService>();
var codeGenerated = codeService.IsCodeGeneratedForUser(User.Identity.Name);
}
<div class="text-left">
<table>
<tr>
<th>Phone Number</th>
<th>Claim</th>
</tr>
@foreach (var user in @Model.UnclaimedUsers)
{
var phone = user.SignalMemberId; var userId = user.UserId;
<tr>
<td>@phone</td>
<td>
<form method="post">
<input name="userIndex" value="@userId" type="hidden" />
<input type="submit" title="Claim" value="Claim" disabled="@codeGenerated" />
</form>
</td>
</tr>
}
</table>
@if(codeGenerated)
{
<form method="post">
<label for="code">Verification code:</label>
<input type="text" id="code" name="code" />
<input type="submit" title="Verify" value="Verify" asp-page-handler="SubmitCode" />
</form>
}
</div>

View File

@@ -0,0 +1,64 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.VisualBasic;
namespace sotd.Pages;
public class UnclaimedPhoneNumbersModel : PageModel
{
private readonly ILogger<UserModel> _logger;
public UnclaimedPhoneNumbersModel(ILogger<UserModel> logger)
{
_logger = logger;
}
public int userId { get; set; }
[BindProperty]
public List<User> UnclaimedUsers { get; set; }
public void OnGet()
{
using (var dci = DataContext.Instance)
{
this.UnclaimedUsers = dci.Users.Where(u => string.IsNullOrEmpty(u.LdapUserName)).ToList();
}
}
public void OnPost(int userIndex)
{
using (var dci = DataContext.Instance)
{
var user = dci.Users.Find(userIndex);
var claimCodeService = HttpContext.RequestServices.GetService<PhoneClaimCodeProviderService>();
claimCodeService.GenerateClaimCodeForUserAndNumber(HttpContext.User.Identity.Name, user.SignalMemberId);
this.UnclaimedUsers = dci.Users.Where(u => string.IsNullOrEmpty(u.LdapUserName)).ToList();
}
}
public IActionResult OnPostSubmitCode(string code)
{
var claimCodeService = HttpContext.RequestServices.GetService<PhoneClaimCodeProviderService>();
var validatedNumber = claimCodeService.ValidateClaimCodeForUser(code, HttpContext.User.Identity.Name);
if (!string.IsNullOrEmpty(validatedNumber))
{
using (var dci = DataContext.Instance)
{
var user = dci.Users.Where(u => u.SignalMemberId == validatedNumber).FirstOrDefault();
if (user == default(User))
{
throw new Exception("User with specified phone number not found!");
}
user.LdapUserName = HttpContext.User.Identity.Name;
dci.SaveChanges();
}
}
else
{
throw new Exception("Invalid code provided!");
}
return RedirectToPage("/");
}
}