Authinator/Pages/User.cshtml.cs
2023-06-01 06:14:24 +02:00

63 lines
1.5 KiB
C#

using Authinator.Backend.Database;
using Authinator.Backend.Database.Tables;
using Authinator.Backend.Utils;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Authinator.Pages;
public class UserModel : PageModel {
public User ModelUser = null!;
public IActionResult OnGet() {
var db = new DatabaseContext();
if (!HttpContext.IsAuthenticated(db))
return Redirect("/Login");
#pragma warning disable CS8601
ModelUser = HttpContext.GetRemoteUser(db);
#pragma warning restore CS8601
if (ModelUser == null)
return Redirect("/");
return Page();
}
public async Task<IActionResult> OnPost() {
var db = new DatabaseContext();
if (!Request.HttpContext.IsAuthenticated(db))
return Redirect("/Login");
if (Request.Form["action"] == "save") {
var user = HttpContext.GetRemoteUser(db)!;
var newUsername = Request.Form["username"].ToString();
var newPassword = Request.Form["password"].ToString();
var newEmail = Request.Form["email"].ToString();
if (!string.IsNullOrWhiteSpace(newUsername) && newUsername != user.Username) {
if (db.Users.Any(p => p.Username == newUsername)) {
return BadRequest();
}
user.Username = newUsername;
}
if (!string.IsNullOrWhiteSpace(newEmail) && newEmail != user.Email) {
user.Email = newEmail;
}
if (!string.IsNullOrWhiteSpace(newPassword) && newPassword.Length >= 8) {
user.SetPassword(newPassword);
user.Iteration++;
}
await db.SaveChangesAsync();
}
return Redirect("/");
}
}