feat(identity): add /users/@me endpoint
This commit is contained in:
		
							parent
							
								
									8bd118ea67
								
							
						
					
					
						commit
						2919413118
					
				
					 1 changed files with 31 additions and 0 deletions
				
			
		| 
						 | 
					@ -1,12 +1,17 @@
 | 
				
			||||||
using Foxchat.Core;
 | 
					using Foxchat.Core;
 | 
				
			||||||
using Foxchat.Core.Models;
 | 
					using Foxchat.Core.Models;
 | 
				
			||||||
using Foxchat.Identity.Database;
 | 
					using Foxchat.Identity.Database;
 | 
				
			||||||
 | 
					using Foxchat.Identity.Database.Models;
 | 
				
			||||||
 | 
					using Foxchat.Identity.Middleware;
 | 
				
			||||||
 | 
					using Foxchat.Identity.Utils;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					using Microsoft.EntityFrameworkCore;
 | 
				
			||||||
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Foxchat.Identity.Controllers;
 | 
					namespace Foxchat.Identity.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ApiController]
 | 
					[ApiController]
 | 
				
			||||||
 | 
					[ClientAuthenticate]
 | 
				
			||||||
[Route("/_fox/ident/users")]
 | 
					[Route("/_fox/ident/users")]
 | 
				
			||||||
public class UsersController(ILogger logger, InstanceConfig config, IdentityContext db) : ControllerBase
 | 
					public class UsersController(ILogger logger, InstanceConfig config, IdentityContext db) : ControllerBase
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -18,4 +23,30 @@ public class UsersController(ILogger logger, InstanceConfig config, IdentityCont
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return Ok(new Users.User(user.Id.ToString(), user.Username, config.Domain, null));
 | 
					        return Ok(new Users.User(user.Id.ToString(), user.Username, config.Domain, null));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("@me")]
 | 
				
			||||||
 | 
					    [Authorize("identify")]
 | 
				
			||||||
 | 
					    public IActionResult GetMe()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var acct = HttpContext.GetAccountOrThrow();
 | 
				
			||||||
 | 
					        var token = HttpContext.GetToken()!;
 | 
				
			||||||
 | 
					        var showEmail = token.Scopes.ExpandScopes().Contains("email");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return Ok(new MeUser(
 | 
				
			||||||
 | 
					            acct.Id,
 | 
				
			||||||
 | 
					            acct.Username,
 | 
				
			||||||
 | 
					            acct.Role,
 | 
				
			||||||
 | 
					            null,
 | 
				
			||||||
 | 
					            showEmail ? acct.Email : null
 | 
				
			||||||
 | 
					        ));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public record MeUser(
 | 
				
			||||||
 | 
					        Ulid Id,
 | 
				
			||||||
 | 
					        string Username,
 | 
				
			||||||
 | 
					        Account.AccountRole Role,
 | 
				
			||||||
 | 
					        string? AvatarUrl,
 | 
				
			||||||
 | 
					        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 | 
				
			||||||
 | 
					        string? Email
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue