diff --git a/Foxchat.Identity/Controllers/UsersController.cs b/Foxchat.Identity/Controllers/UsersController.cs index 9e9c32d..6302183 100644 --- a/Foxchat.Identity/Controllers/UsersController.cs +++ b/Foxchat.Identity/Controllers/UsersController.cs @@ -1,12 +1,17 @@ using Foxchat.Core; using Foxchat.Core.Models; using Foxchat.Identity.Database; +using Foxchat.Identity.Database.Models; +using Foxchat.Identity.Middleware; +using Foxchat.Identity.Utils; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; namespace Foxchat.Identity.Controllers; [ApiController] +[ClientAuthenticate] [Route("/_fox/ident/users")] 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)); } + + [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 + ); } \ No newline at end of file