using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore.ChangeTracking; using VPNAuth.Server.Database; namespace VPNAuth.Server.Pages; public class Auth : PageModel { public Config Config; public ConfigApp? ConfApp; public ConfigUser? User; public bool ValidRequest; public EntityEntry? RequestEntry; public readonly List RequiredQueryParams = [ "response_type", "client_id", "scope", "code_challenge_method", "code_challenge" ]; public void OnGet() { Config = Config.Read(); ConfApp = Config.FindApp(Request.Query["client_id"]); User = HttpContext.GetUser(); ValidRequest = RequiredQueryParams.All(key => Request.Query.ContainsKey(key)) && ConfApp != null && Request.Query["code_challenge_method"] == "S256" && User != null && (ConfApp.AllowedUsers == null || ConfApp.AllowedUsers!.Contains(User.Username!)); RequestEntry = null; if (ValidRequest) { using var db = new Database.Database(); RequestEntry = db.Add(new AuthRequest { InitTime = DateTime.Now, ClientId = Request.Query["client_id"]!, Code = PkceUtils.GenerateCode(), State = Request.Query["state"], Scopes = Request.Query["scope"].ToString().Split(" ").ToList(), CodeChallenge = Request.Query["code_challenge"]!, CodeChallengeMethod = Request.Query["code_challenge_method"]!, Accepted = false, Username = User!.Username! }); db.SaveChanges(); } } }