private async Task <HttpResponseMessage> ValidateModelAsync(ApplicationUserPutPersonalInfoViewModel model)
        {
            if (!await CanAccessAsync(model))
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden));
            }

            if (model.BirthDay != null)
            {
                if (model.BirthDay.Value.Year < WebApiConstants.LowestBirthdayYear)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Common.BirthdayDateIsTooOld) }));
                }

                if (model.BirthDay > DateTime.UtcNow)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Common.BirthdayDateValidationError) }));
                }
            }

            if (!await _organizationService.IsOrganizationHostValidAsync(model.Email, Request.GetRequestedTenant()))
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Models.ApplicationUser.ApplicationUser.WrongEmailDomain) }));
            }

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
        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));
        }
Пример #3
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));
        }