예제 #1
0
        protected override BaseResponse <EmptyViewModel> ExecuteCore(RegistrationViewModel request)
        {
            if (repository.Users.Any(x => x.Email.ToLower() == request.Email.ToLower()))
            {
                return(GetResponseFailed(Resources.Errors_EmailAlreadyExists).WithStatusCode(ResponseStatusCodes.Ok));
            }

            var user = registrationService.CreateUser(request);

            user.PasswordHash = registrationService.HashPassword(user, request.Password);

            user.UserName      = request.Email;
            user.SecurityStamp = Guid.NewGuid().ToString();

            repository.Users.Add(user);

            repository.SaveChanges();

            if (request.IsInvitation)
            {
                var pendingInvitation = invitationService.GetInvitation(x => x.Email == request.Email);

                invitationService.AcceptInvitation(user, pendingInvitation);

                repository.SaveChanges();
            }

            return(GetResponseSuccess(message: Resources.RegistrationSuccessful));
        }
예제 #2
0
        protected override BaseResponse <EmptyViewModel> ExecuteCore(PendingInvitationRequestViewModel request)
        {
            var pendingInvitation = invitationService.GetInvitation(x => x.Token == request.Token);

            if (pendingInvitation is null)
            {
                return(GetResponseFailed(Resources.Errors_InvitationInvalid).WithStatusCode(ResponseStatusCodes.Ok));
            }

            if (pendingInvitation.Project.Collaborators.Select(x => x.Collaborator.Email).Contains(CurrentApplicationUser.Email))
            {
                return(GetResponseFailed(Resources.Errors_CollaboratorAlreadyExists).WithStatusCode(ResponseStatusCodes.Ok));
            }

            if (pendingInvitation.Email != CurrentApplicationUser.Email)
            {
                return(GetResponseFailed(Resources.Errors_InvitationUnauthorized).WithStatusCode(ResponseStatusCodes.Ok));
            }

            invitationService.AcceptInvitation(CurrentApplicationUser, pendingInvitation);

            repository.SaveChanges();

            return(GetResponseSuccess(message: Resources.Invitation_Accepted));
        }
예제 #3
0
        private async Task RegisterInvitedUserAsync(RegisterInvitationModel registerInvitationModel)
        {
            var invitation = await _invitationService.GetInvitation(registerInvitationModel.InvitationId);

            if (!invitation.Used)
            {
                var newUser = await CreateNewUser(registerInvitationModel);
                await CreateNewMember(newUser);

                await _invitationService.AcceptInvitation(newUser.Id, registerInvitationModel.InvitationId);
            }
            else
            {
                throw new InvalidOperationException($"Unable to register user. Invitation with id {registerInvitationModel.InvitationId} was already used.");
            }
        }