using Bit.Api.KeyManagement.Models.Response; using Bit.Api.KeyManagement.Queries.Interfaces; using Bit.Core.Exceptions; using Bit.Core.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using UserKeyResponseModel = Bit.Api.Models.Response.UserKeyResponseModel; namespace Bit.Api.KeyManagement.Controllers; [Route("users")] [Authorize("Application")] public class UsersController : Controller { private readonly IUserRepository _userRepository; private readonly IUserAccountKeysQuery _userAccountKeysQuery; public UsersController(IUserRepository userRepository, IUserAccountKeysQuery userAccountKeysQuery) { _userRepository = userRepository; _userAccountKeysQuery = userAccountKeysQuery; } [HttpGet("{id}/public-key")] public async Task GetPublicKeyAsync(string id) { var guidId = new Guid(id); var key = await _userRepository.GetPublicKeyAsync(guidId) ?? throw new NotFoundException(); return new UserKeyResponseModel(guidId, key); } [HttpGet("{id}/keys")] public async Task GetAccountKeysAsync([FromRoute] Guid id) { var user = await _userRepository.GetByIdAsync(id) ?? throw new NotFoundException(); var accountKeys = await _userAccountKeysQuery.Run(user) ?? throw new NotFoundException("User account keys not found."); return new PublicKeysResponseModel(accountKeys); } }