refactor(identity): change receiver of OauthUtils.ExpandScopes()
This commit is contained in:
		
							parent
							
								
									00a54f4f8b
								
							
						
					
					
						commit
						8bd118ea67
					
				
					 4 changed files with 13 additions and 14 deletions
				
			
		|  | @ -25,7 +25,7 @@ public class PasswordAuthController(ILogger logger, IdentityContext db, IClock c | |||
|         var appToken = | ||||
|             HttpContext.GetToken() ?? | ||||
|             throw new UnreachableException(); // GetApplicationOrThrow already gets the token and throws if it's null | ||||
|         var appScopes = appToken.ExpandScopes(); | ||||
|         var appScopes = appToken.Scopes.ExpandScopes(); | ||||
| 
 | ||||
|         if (req.Scopes.Except(appScopes).Any()) | ||||
|             throw new ApiError.Forbidden("Cannot request token scopes that are not allowed for this token", | ||||
|  | @ -54,7 +54,7 @@ public class PasswordAuthController(ILogger logger, IdentityContext db, IClock c | |||
|     { | ||||
|         var app = HttpContext.GetApplicationOrThrow(); | ||||
|         var appToken = HttpContext.GetToken() ?? throw new UnreachableException(); | ||||
|         var appScopes = appToken.ExpandScopes(); | ||||
|         var appScopes = appToken.Scopes.ExpandScopes(); | ||||
| 
 | ||||
|         if (req.Scopes.Except(appScopes).Any()) | ||||
|             throw new ApiError.Forbidden("Cannot request token scopes that are not allowed for this token", | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ public class TokenController(ILogger logger, IdentityContext db, IClock clock) : | |||
|     public async Task<IActionResult> PostToken([FromBody] PostTokenRequest req) | ||||
|     { | ||||
|         var app = await db.GetApplicationAsync(req.ClientId, req.ClientSecret); | ||||
|         var appScopes = app.ExpandScopes(); | ||||
|         var appScopes = app.Scopes.ExpandScopes(); | ||||
| 
 | ||||
|         var scopes = req.Scope.Split(' '); | ||||
|         if (scopes.Except(appScopes).Any()) | ||||
|  | @ -25,9 +25,9 @@ public class TokenController(ILogger logger, IdentityContext db, IClock clock) : | |||
| 
 | ||||
|         switch (req.GrantType) | ||||
|         { | ||||
|             case "client_credentials": | ||||
|             case OauthUtils.ClientCredentials: | ||||
|                 return await HandleClientCredentialsAsync(app, scopes); | ||||
|             case "authorization_code": | ||||
|             case OauthUtils.AuthorizationCode: | ||||
|                 // TODO | ||||
|                 break; | ||||
|             default: | ||||
|  |  | |||
|  | @ -24,8 +24,8 @@ public class ClientAuthorizationMiddleware( | |||
|         var token = ctx.GetToken(); | ||||
|         if (token == null || token.Expires < clock.GetCurrentInstant()) | ||||
|             throw new ApiError.Unauthorized("This endpoint requires an authenticated user."); | ||||
|         if (attribute.Scopes.Length > 0 && attribute.Scopes.Except(token.ExpandScopes()).Any()) | ||||
|             throw new ApiError.Forbidden("This endpoint requires ungranted scopes.", attribute.Scopes.Except(token.ExpandScopes())); | ||||
|         if (attribute.Scopes.Length > 0 && attribute.Scopes.Except(token.Scopes.ExpandScopes()).Any()) | ||||
|             throw new ApiError.Forbidden("This endpoint requires ungranted scopes.", attribute.Scopes.Except(token.Scopes.ExpandScopes())); | ||||
| 
 | ||||
|         await next(ctx); | ||||
|     } | ||||
|  |  | |||
|  | @ -6,7 +6,10 @@ namespace Foxchat.Identity.Utils; | |||
| 
 | ||||
| public static class OauthUtils | ||||
| { | ||||
|     public static readonly string[] Scopes = ["identify", "chat_client"]; | ||||
|     public const string ClientCredentials = "client_credentials"; | ||||
|     public const string AuthorizationCode = "authorization_code"; | ||||
| 
 | ||||
|     public static readonly string[] Scopes = ["identify", "email", "guilds", "chat_client"]; | ||||
| 
 | ||||
|     private static readonly string[] ForbiddenSchemes = ["javascript", "file", "data", "mailto", "tel"]; | ||||
|     private const string OobUri = "urn:ietf:wg:oauth:2.0:oob"; | ||||
|  | @ -25,11 +28,7 @@ public static class OauthUtils | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static string[] ExpandScopes(this Token token) => token.Scopes.Contains("chat_client") | ||||
|     public static string[] ExpandScopes(this string[] scopes) => scopes.Contains("chat_client") | ||||
|         ? Scopes | ||||
|         : token.Scopes; | ||||
| 
 | ||||
|     public static string[] ExpandScopes(this Application app) => app.Scopes.Contains("chat_client") | ||||
|         ? Scopes | ||||
|         : app.Scopes; | ||||
|         : scopes; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue