public async Task <HttpResponseMessage> PutPersonalInfo(ApplicationUserPutPersonalInfoViewModel model)
        {
            var validatedModel = ValidateModel(model);

            if (!validatedModel.IsSuccessStatusCode)
            {
                return(validatedModel);
            }

            var userOrg = GetUserAndOrganization();
            var user    = _applicationUserRepository.GetByID(model.Id);

            if (user == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound, new[] { string.Format(Resources.Common.DoesNotExist, Resources.Models.ApplicationUser.ApplicationUser.EntityName) }));
            }

            if ((user.FirstName != model.FirstName || user.LastName != model.LastName) && !HasPermission(userOrg, AdministrationPermissions.ApplicationUser))
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden));
            }

            if (_applicationUserRepository.Get(u => u.Email == model.Email && u.Id != user.Id).Any())
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Models.ApplicationUser.ApplicationUser.EmailAlreadyExsists) }));
            }

            if (user.PictureId != model.PictureId &&
                !string.IsNullOrEmpty(user.PictureId))
            {
                await _pictureService.RemoveImage(user.PictureId, userOrg.OrganizationId);
            }

            _mapper.Map(model, user);
            _applicationUserRepository.Update(user);
            _unitOfWork.Save();

            var response = default(object);

            if (!User.IsInRole(Roles.NewUser) || !_userManager.IsInRole(user.Id, Roles.FirstLogin))
            {
                return(Request.CreateResponse(HttpStatusCode.OK));
            }

            await _userManager.RemoveFromRoleAsync(User.Identity.GetUserId(), Roles.FirstLogin);

            _administrationUsersService.NotifyAboutNewUser(user, userOrg.OrganizationId);
            var requiresConfirmation = _organizationService.RequiresUserConfirmation(userOrg.OrganizationId);

            if (!requiresConfirmation)
            {
                _administrationUsersService.ConfirmNewUser(userOrg.UserId, userOrg);
            }

            response = new { requiresConfirmation };

            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
Exemplo n.º 2
0
        public async Task <HttpResponseMessage> PutPersonalInfo(ApplicationUserPutPersonalInfoViewModel model)
        {
            var validatedModel = ValidateModel(model);

            if (!validatedModel.IsSuccessStatusCode)
            {
                return(validatedModel);
            }

            var userOrg = GetUserAndOrganization();
            var user    = _applicationUserRepository.GetByID(model.Id);

            if (user == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound, new[] { string.Format(Resources.Common.DoesNotExist, Resources.Models.ApplicationUser.ApplicationUser.EntityName) }));
            }

            if ((user.FirstName != model.FirstName || user.LastName != model.LastName) && !HasPermission(userOrg, AdministrationPermissions.ApplicationUser))
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden));
            }

            if (_applicationUserRepository.Get(u => u.Email == model.Email && u.Id != user.Id).Any())
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Models.ApplicationUser.ApplicationUser.EmailAlreadyExsists) }));
            }

            _mapper.Map(model, user);
            _applicationUserRepository.Update(user);
            _unitOfWork.Save();

            var response = default(object);

            if (User.IsInRole(Roles.NewUser) && _userManager.IsInRole(user.Id, Roles.FirstLogin))
            {
                await _userManager.RemoveFromRoleAsync(User.Identity.GetUserId(), Roles.FirstLogin);

                _administrationUsersService.NotifyAboutNewUser(user, userOrg.OrganizationId);
                var requiresConfirmation = _organizationService.RequiresUserConfirmation(userOrg.OrganizationId);

                if (!requiresConfirmation)
                {
                    _administrationUsersService.ConfirmNewUser(userOrg.UserId, userOrg);
                }

                response = new { requiresConfirmation };
            }

            var cache = Configuration.CacheOutputConfiguration().GetCacheOutputProvider(Request);

            cache.RemoveStartsWith(Configuration.CacheOutputConfiguration().MakeBaseCachekey((BirthdaysController t) => t.GetWeeklyBirthdays()));

            return(response != null?Request.CreateResponse(HttpStatusCode.OK, response) : Request.CreateResponse(HttpStatusCode.OK));
        }
        public void ConfirmNewUser(string userId, UserAndOrganizationDTO userAndOrg)
        {
            var applicationUser = _usersDbSet.First(user => user.Id == userId);

            _userAdministrationValidator.CheckIfEmploymentDateIsSet(applicationUser.EmploymentDate);

            var hasRole = _userManager.IsInRole(userId, Constants.Authorization.Roles.FirstLogin);

            _userAdministrationValidator.CheckIfUserHasFirstLoginRole(hasRole);

            var addRoleResult    = _userManager.AddToRole(userId, Constants.Authorization.Roles.User);
            var removeRoleResult = _userManager.RemoveFromRole(userId, Constants.Authorization.Roles.NewUser);

            _userAdministrationValidator.CheckForAddingRemovingRoleErrors(addRoleResult.Errors, removeRoleResult.Errors);
            _notificationService.SendConfirmedNotificationEmail(applicationUser.Email, userAndOrg);

            SetTutorialStatus(applicationUser, false);

            AddUserToMainWall(userId);
            _uow.SaveChanges(userAndOrg.UserId);
        }