Пример #1
0
        public void GetAssignment_ConstructsQuery_ReturnsResultOfDispatch()
        {
            var assignmentId = TestIds.A;
            var result       = new AssignmentToUserDto();

            _dispatcherMock.Setup(d => d.QueryAsync(It.Is <GetAssignmentToUser>(q => q.Id == assignmentId))).ReturnsAsync(result).Verifiable();

            var actionResult = _controller.GetAssignment(assignmentId).GetAwaiter().GetResult();

            Assert.AreEqual(actionResult.Value, result);
            _dispatcherMock.Verify();
        }
Пример #2
0
        public async Task <ActionResult> UpdateAssignmentToUser(Guid id, AssignmentToUserDto dto)
        {
            if (!(await _authService.IsAdministrator(User)))
            {
                if (dto.UserId != Guid.Empty)
                {
                    ModelState.AddModelError("field_is_readonly", "Only administrators may re-assign assignments to user to other users");
                    return(ValidationProblem());
                }

                dto.UserId = User.GetUserId();
            }

            return(await SendAndHandleOperationCommand(
                       new UpdateAssignmentToUser(id, dto.MeansId, dto.ValidSince, dto.ValidUntil, dto.UserId, dto.IsShared)
                       ));
        }
Пример #3
0
        public async Task <ActionResult> CreateAssignmentToUser(AssignmentToUserDto dto)
        {
            if (!(await _authService.IsAdministrator(User)))
            {
                if (dto.UserId != Guid.Empty)
                {
                    ModelState.AddModelError("field_is_readonly", "Only administrators may create assignments to user for other users");
                    return(ValidationProblem());
                }

                dto.UserId = User.GetUserId();
            }

            return(await SendAndHandleIdentifierResultCommand(
                       new CreateAssignmentToUser(Guid.NewGuid(), dto.MeansId, dto.ValidSince, dto.ValidUntil, dto.UserId, dto.IsShared),
                       nameof(GetAssignmentToUser)
                       ));
        }
        public async Task <IUserIdResolutionResult> HandleAsync(IResolveAuthenticationMeansUserId command, ICorrelationContext correlationContext)
        {
            var authenticationMeans = await _queryDispatcher.QueryAsync(new GetAuthenticationMeans(command.AuthenticationMeansId));

            if (authenticationMeans is null)
            {
                return(new UserIdResolutionResult("authentication_means_not_found", $"Could not find authentication means with ID '{command.AuthenticationMeansId}'"));
            }

            if (!authenticationMeans.IsValid)
            {
                return(new UserIdResolutionResult("authentication_means_not_valid", $"The authentication means with ID '{command.AuthenticationMeansId}' is not valid"));
            }

            AssignmentToUserDto validUserAssignment = null;

            var now = DateTimeOffset.UtcNow;

            await _queryDispatcher.QueryAllPages( // todo
                new BrowseAssignmentsToUser()
            {
                OfAuthenticationMeans = authenticationMeans.Id
            },
                assignment =>
            {
                if (assignment.ValidSince > now)
                {
                    return(false);
                }

                if (assignment.ValidUntil < now)
                {
                    return(false);
                }

                if (assignment.IsShared && command.ExcludeSharedAuthenticationMeans)
                {
                    return(false);
                }

                validUserAssignment = assignment;
                return(true);
            }
                );

            if (validUserAssignment is null)
            {
                return(new UserIdResolutionResult("authentication_means_not_assigned", $"The authentication means with ID '{command.AuthenticationMeansId}' is not assigned to any user"));
            }

            var user = await _usersService.GetUser(validUserAssignment.AssignedToUserId);

            if (user is null)
            {
                return(new UserIdResolutionResult("authentication_means_assignment_not_valid", $"The authentication means with ID '{command.AuthenticationMeansId}' is assigned to user with ID '{validUserAssignment.AssignedToUserId}' which was not found."));
            }
            else if (!user.IsActive)
            {
                return(new UserIdResolutionResult("authentication_means_assignment_not_valid", $"The authentication means with ID '{command.AuthenticationMeansId}' is assigned to user with ID '{validUserAssignment.AssignedToUserId}' which is an inactive account."));
            }

            return(new UserIdResolutionResult(
                       validUserAssignment.AssignedToUserId,
                       validUserAssignment.Id,
                       validUserAssignment.IsShared,
                       validUserAssignment.SpendingLimits.Select(spl => new KeyValuePair <TimeSpan, decimal>(spl.Interval, spl.Value)).ToArray()
                       ));
        }