Foxchat.NET/Foxchat.Identity/Controllers/UsersController.cs

52 lines
No EOL
1.5 KiB
C#

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
{
[HttpGet("{id}")]
public async Task<IActionResult> GetUser(Ulid id)
{
var user = await db.Accounts.FirstOrDefaultAsync(a => a.Id == id);
if (user == null) throw new ApiError.NotFound("User not found.");
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
);
}