1
0
mirror of https://github.com/bitwarden/server synced 2025-12-20 10:13:39 +00:00

[EC-508] SCIM CQRS Refactor - Users/Get (#2266)

* [EC-390] Added Scim.Test unit tests project

* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter

* [EC-534] Implemented CQRS for Users Get and added unit tests

* [EC-508] Renamed GetUserCommand to GetUserQuery

* [EC-508] Created ScimServiceCollectionExtensions

* [EC-508] Renamed AddScimCommands to AddScimUserQueries

* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project

Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
This commit is contained in:
Rui Tomé
2022-10-04 02:40:28 +01:00
committed by GitHub
parent 707a39972b
commit 8325f0eed4
13 changed files with 3454 additions and 11 deletions

View File

@@ -5,6 +5,8 @@ using Bit.Core.Services;
using Bit.Core.Utilities;
using Bit.Scim.Context;
using Bit.Scim.Models;
using Bit.Scim.Queries.Users.Interfaces;
using Bit.Scim.Utilities;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
@@ -13,6 +15,7 @@ namespace Bit.Scim.Controllers.v2;
[Authorize("Scim")]
[Route("v2/{organizationId}/users")]
[ExceptionHandlerFilter]
public class UsersController : Controller
{
private readonly IUserService _userService;
@@ -21,6 +24,7 @@ public class UsersController : Controller
private readonly IOrganizationService _organizationService;
private readonly IScimContext _scimContext;
private readonly ScimSettings _scimSettings;
private readonly IGetUserQuery _getUserQuery;
private readonly ILogger<UsersController> _logger;
public UsersController(
@@ -30,6 +34,7 @@ public class UsersController : Controller
IOrganizationService organizationService,
IScimContext scimContext,
IOptions<ScimSettings> scimSettings,
IGetUserQuery getUserQuery,
ILogger<UsersController> logger)
{
_userService = userService;
@@ -38,22 +43,15 @@ public class UsersController : Controller
_organizationService = organizationService;
_scimContext = scimContext;
_scimSettings = scimSettings?.Value;
_getUserQuery = getUserQuery;
_logger = logger;
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(Guid organizationId, Guid id)
{
var orgUser = await _organizationUserRepository.GetDetailsByIdAsync(id);
if (orgUser == null || orgUser.OrganizationId != organizationId)
{
return new NotFoundObjectResult(new ScimErrorResponseModel
{
Status = 404,
Detail = "User not found."
});
}
return new ObjectResult(new ScimUserResponseModel(orgUser));
var scimUserResponseModel = await _getUserQuery.GetUserAsync(organizationId, id);
return Ok(scimUserResponseModel);
}
[HttpGet("")]