Inheritance: mobSocial.WebApi.Configuration.Mvc.Models.RootEntityModel
Exemplo n.º 1
0
 public static UserEntityModel ToEntityModel(this User user, IMediaService mediaService, MediaSettings mediaSettings)
 {
     var userCoverId = user.GetPropertyValueAs<int>(PropertyNames.DefaultCoverId);
     var userProfileImageId = user.GetPropertyValueAs<int>(PropertyNames.DefaultPictureId);
     var model = new UserEntityModel() {
         Id = user.Id,
         FirstName = user.FirstName,
         LastName = user.LastName,
         Name = user.Name,
         UserName = user.UserName,
         Email = user.Email,
         Active = user.Active,
         Remarks = user.Remarks,
         RoleIds = user.UserRoles.Select(x => x.RoleId).ToList(),
         LastLoginDateUtc = user.LastLoginDate,
         LastLoginDateLocal = DateTimeHelper.GetDateInUserTimeZone(user.LastLoginDate, DateTimeKind.Utc, user),
         CoverImageId = userCoverId,
         ProfileImageId = userProfileImageId
     };
     model.CoverImageUrl = userCoverId == 0 ? mediaSettings.DefaultUserProfileCoverUrl : mediaService.GetPictureUrl(userCoverId, PictureSizeNames.MediumCover);
     model.ProfileImageUrl = userProfileImageId == 0 ? mediaSettings.DefaultUserProfileImageUrl : mediaService.GetPictureUrl(userProfileImageId, PictureSizeNames.MediumProfileImage);
     return model;
 }
Exemplo n.º 2
0
        public IHttpActionResult Post(UserEntityModel entityModel)
        {
            User user;
            user = entityModel.Id == 0 ? new User() : _userService.Get(entityModel.Id);

            if (user == null)
                return NotFound();

            //check if the email has already been registered
            var emailUser = _userService.Get(x => x.Email == entityModel.Email, null).FirstOrDefault();
            if (emailUser != null && emailUser.Id != user.Id)
            {
                VerboseReporter.ReportError("The email is already registered with another user", "post_user");
                return RespondFailure();
            }

            //same for user name
            if (_userSettings.AreUserNamesEnabled)
            {
                var userNameUser = _userService.Get(x => x.UserName == entityModel.UserName, null).FirstOrDefault();
                if (userNameUser != null && userNameUser.Id != user.Id)
                {
                    VerboseReporter.ReportError("The username is already taken by another user", "post_user");
                    return RespondFailure();
                }
            }

            //we should have at least one role
            if (entityModel.RoleIds.Count == 0)
            {
                VerboseReporter.ReportError("At least one role must be assigned to the user", "post_user");
                return RespondFailure();
            }
            //is this a new user, we'll require password
            if (string.IsNullOrEmpty(entityModel.Password) && entityModel.Id == 0)
            {
                VerboseReporter.ReportError("You must specify the password for the user", "post_user");
                return RespondFailure();
            }
            //are passwords same?
            if (string.Compare(entityModel.Password, entityModel.ConfirmPassword, StringComparison.Ordinal) != 0)
            {
                VerboseReporter.ReportError("The passwords do not match", "post_user");
                return RespondFailure();
            }

            user.FirstName = entityModel.FirstName;
            user.LastName = entityModel.LastName;
            user.Email = entityModel.Email;
            user.Remarks = entityModel.Remarks;
            user.Active = entityModel.Active;
            user.DateUpdated = DateTime.UtcNow;
            user.Name = string.Concat(user.FirstName, " ", user.LastName);
            user.UserName = entityModel.UserName;
            if (entityModel.Id == 0)
            {
                user.Password = entityModel.Password;
                _userRegistrationService.Register(user, _securitySettings.DefaultPasswordStorageFormat);
            }
            else
            {
                if (!string.IsNullOrEmpty(entityModel.Password)) // update password if provided
                {
                    if (string.IsNullOrEmpty(user.PasswordSalt))
                        user.PasswordSalt = _cryptographyService.CreateSalt(8);
                    user.Password = _cryptographyService.GetHashedPassword(entityModel.Password, user.PasswordSalt,
                        _securitySettings.DefaultPasswordStorageFormat);
                }
                    
                _userService.Update(user);
            }

            //assign the roles now
            var roles = _roleService.Get(x => x.IsActive);
            //current roles
            var currentRoleIds = user.UserRoles.Select(x => x.RoleId).ToList();
            //roles to unassign
            var rolesToUnassign = currentRoleIds.Except(entityModel.RoleIds);
            foreach (var roleId in rolesToUnassign)
            {
                var role = roles.FirstOrDefault(x => x.Id == roleId);
                if(role == null)
                    continue;

                _roleService.UnassignRoleToUser(role, user);
            }

            //roles to assign
            var rolesToAssign = entityModel.RoleIds.Except(currentRoleIds);
            foreach (var roleId in rolesToAssign)
            {
                var role = roles.FirstOrDefault(x => x.Id == roleId);
                if (role == null)
                    continue;

                _roleService.AssignRoleToUser(role, user);
            }

            //any images to assign
            if(entityModel.CoverImageId != 0)
                user.SetPropertyValue(PropertyNames.DefaultCoverId, entityModel.CoverImageId);
            if(entityModel.ProfileImageId != 0)
                user.SetPropertyValue(PropertyNames.DefaultPictureId, entityModel.ProfileImageId);

            VerboseReporter.ReportSuccess("User saved successfully", "post_user");
            return RespondSuccess(new {
                User = user.ToEntityModel(_mediaService, _mediaSettings)
            });
        }