✨ Web version login
This commit is contained in:
		| @@ -15,6 +15,7 @@ public static class AuthConstants | ||||
| { | ||||
|     public const string SchemeName = "DysonToken"; | ||||
|     public const string TokenQueryParamName = "tk"; | ||||
|     public const string CookieTokenName = "AuthToken"; | ||||
| } | ||||
|  | ||||
| public enum TokenType | ||||
| @@ -44,7 +45,7 @@ public class DysonTokenAuthHandler( | ||||
|     : AuthenticationHandler<DysonTokenAuthOptions>(options, logger, encoder) | ||||
| { | ||||
|     public const string AuthCachePrefix = "auth:"; | ||||
|      | ||||
|  | ||||
|     protected override async Task<AuthenticateResult> HandleAuthenticateAsync() | ||||
|     { | ||||
|         var tokenInfo = _ExtractToken(Request); | ||||
| @@ -126,7 +127,7 @@ public class DysonTokenAuthHandler( | ||||
|                 SeenAt = SystemClock.Instance.GetCurrentInstant(), | ||||
|             }; | ||||
|             fbs.Enqueue(lastInfo); | ||||
|              | ||||
|  | ||||
|             return AuthenticateResult.Success(ticket); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
| @@ -182,7 +183,7 @@ public class DysonTokenAuthHandler( | ||||
|         return Convert.FromBase64String(padded); | ||||
|     } | ||||
|  | ||||
|     private static TokenInfo? _ExtractToken(HttpRequest request) | ||||
|     private TokenInfo? _ExtractToken(HttpRequest request) | ||||
|     { | ||||
|         // Check for token in query parameters | ||||
|         if (request.Query.TryGetValue(AuthConstants.TokenQueryParamName, out var queryToken)) | ||||
| @@ -206,7 +207,7 @@ public class DysonTokenAuthHandler( | ||||
|                     Type = TokenType.AuthKey | ||||
|                 }; | ||||
|             } | ||||
|              | ||||
|  | ||||
|             if (authHeader.StartsWith("AtField ", StringComparison.OrdinalIgnoreCase)) | ||||
|             { | ||||
|                 return new TokenInfo | ||||
| @@ -227,7 +228,7 @@ public class DysonTokenAuthHandler( | ||||
|         } | ||||
|  | ||||
|         // Check for token in cookies | ||||
|         if (request.Cookies.TryGetValue(AuthConstants.TokenQueryParamName, out var cookieToken)) | ||||
|         if (request.Cookies.TryGetValue(AuthConstants.CookieTokenName, out var cookieToken)) | ||||
|         { | ||||
|             return new TokenInfo | ||||
|             { | ||||
|   | ||||
| @@ -131,7 +131,7 @@ public class AuthService( | ||||
|             case "google": | ||||
|                 content = new StringContent($"secret={apiSecret}&response={token}", System.Text.Encoding.UTF8, | ||||
|                     "application/x-www-form-urlencoded"); | ||||
|                 response = await client.PostAsync("https://www.google.com/recaptcha/api/siteverify", content); | ||||
|                 response = await client.PostAsync("https://www.google.com/recaptcha/siteverify", content); | ||||
|                 response.EnsureSuccessStatusCode(); | ||||
|  | ||||
|                 json = await response.Content.ReadAsStringAsync(); | ||||
|   | ||||
| @@ -39,7 +39,7 @@ public class AfdianOidcService( | ||||
|         return Task.FromResult(new OidcDiscoveryDocument | ||||
|         { | ||||
|             AuthorizationEndpoint = "https://afdian.com/oauth2/authorize", | ||||
|             TokenEndpoint = "https://afdian.com/api/oauth2/access_token", | ||||
|             TokenEndpoint = "https://afdian.com/oauth2/access_token", | ||||
|             UserinfoEndpoint = null, | ||||
|             JwksUri = null | ||||
|         })!; | ||||
| @@ -60,7 +60,7 @@ public class AfdianOidcService( | ||||
|             }); | ||||
|  | ||||
|             var client = HttpClientFactory.CreateClient(); | ||||
|             var request = new HttpRequestMessage(HttpMethod.Post, "https://afdian.com/api/oauth2/access_token"); | ||||
|             var request = new HttpRequestMessage(HttpMethod.Post, "https://afdian.com/oauth2/access_token"); | ||||
|             request.Content = content; | ||||
|              | ||||
|             var response = await client.SendAsync(request); | ||||
|   | ||||
| @@ -30,7 +30,7 @@ public class DiscordOidcService( | ||||
|         }; | ||||
|  | ||||
|         var queryString = string.Join("&", queryParams.Select(p => $"{p.Key}={Uri.EscapeDataString(p.Value)}")); | ||||
|         return $"https://discord.com/api/oauth2/authorize?{queryString}"; | ||||
|         return $"https://discord.com/oauth2/authorize?{queryString}"; | ||||
|     } | ||||
|      | ||||
|     protected override Task<OidcDiscoveryDocument?> GetDiscoveryDocumentAsync() | ||||
| @@ -38,8 +38,8 @@ public class DiscordOidcService( | ||||
|         return Task.FromResult(new OidcDiscoveryDocument | ||||
|         { | ||||
|             AuthorizationEndpoint = "https://discord.com/oauth2/authorize", | ||||
|             TokenEndpoint = "https://discord.com/api/oauth2/token", | ||||
|             UserinfoEndpoint = "https://discord.com/api/users/@me", | ||||
|             TokenEndpoint = "https://discord.com/oauth2/token", | ||||
|             UserinfoEndpoint = "https://discord.com/users/@me", | ||||
|             JwksUri = null | ||||
|         })!; | ||||
|     } | ||||
| @@ -75,7 +75,7 @@ public class DiscordOidcService( | ||||
|             { "redirect_uri", config.RedirectUri }, | ||||
|         }); | ||||
|  | ||||
|         var response = await client.PostAsync("https://discord.com/api/oauth2/token", content); | ||||
|         var response = await client.PostAsync("https://discord.com/oauth2/token", content); | ||||
|         response.EnsureSuccessStatusCode(); | ||||
|  | ||||
|         return await response.Content.ReadFromJsonAsync<OidcTokenResponse>(); | ||||
| @@ -84,7 +84,7 @@ public class DiscordOidcService( | ||||
|     private async Task<OidcUserInfo> GetUserInfoAsync(string accessToken) | ||||
|     { | ||||
|         var client = HttpClientFactory.CreateClient(); | ||||
|         var request = new HttpRequestMessage(HttpMethod.Get, "https://discord.com/api/users/@me"); | ||||
|         var request = new HttpRequestMessage(HttpMethod.Get, "https://discord.com/users/@me"); | ||||
|         request.Headers.Add("Authorization", $"Bearer {accessToken}"); | ||||
|  | ||||
|         var response = await client.SendAsync(request); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user