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 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(); User = HttpContext.GetUser(); ValidRequest = RequiredQueryParams.All(key => Request.Query.ContainsKey(key)) && Config.FindApp(Request.Query["client_id"]!) != null && Request.Query["code_challenge_method"] == "S256" && User != null; 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 }); db.SaveChanges(); } } }