예제 #1
0
        public async Task <APIResponseModel> Process(InternalSendEmailVerificationAction action)
        {
            var rsU = await this.DataManager.QueryUser(action.UserId);

            if (rsU.Code != ResponseCode.Ok)
            {
                return(APIResponseModel.Result(rsU.ToResponse()));
            }

            var user = rsU.Data[0].User;

            if (user == null)
            {
                return(APIResponseModel.Error(ResponseCode.NotFound));
            }
            if (user.EmailVerification == null)
            {
                return(APIResponseModel.Success());
            }

            string vs = await this.PasswordManager.BuildEmailVerificationString(user.UserId, user.EmailVerification.Code);

            var url = this.EmailProvider.BaseUrl() + "verify?code=" + Uri.EscapeDataString(vs);

            var cd = new Dictionary <string, string> {
                { "EmailVerificationUrl", url },
                { "DisplayName", user.DisplayName }
            };

            var rs = await this.EmailProvider.ProcessTemplate(action.UserId, EmailTemplateId.EmailVerification, user.Email, cd, user);

            return(APIResponseModel.Result(rs));
        }
예제 #2
0
        public async Task <APIResponseModel> Process(SampleUser userContext, UserUpdatePasswordAction action)
        {
            UserModel user = userContext.OBO != null ? userContext.OBO : userContext.SiteUser;

            if (string.IsNullOrWhiteSpace(action.NewPassword))
            {
                return(APIResponseModel.Error(ResponseCode.InvalidParameter, "Password"));
            }

            var passwordStrength = new PasswordStrengthValidator().Test(action.NewPassword);

            if (!passwordStrength.Good)
            {
                return(APIResponseModel.Error(ResponseCode.InvalidParameter, "Password Strength"));
            }

            if (!(await this.PasswordManager.Verify(action.OldPassword, user.Password.Hash)))
            {
                return(APIResponseModel.Error(ResponseCode.InvalidCredentials));
            }
            else
            {
                var pwd = new UserPasswordModel(await this.PasswordManager.CreatePasswordHash(action.NewPassword));
                var rs  = await this.DataManager.UpdateEntityProperty(EntityTableType.user, UserEntity.UpdatePasswordBuilder(user.UserId, pwd, PasswordMode.UpdatePassword));

                if (rs.Code != ResponseCode.Ok)
                {
                    return(APIResponseModel.Error(rs.Code, rs.Message));
                }
            }

            this.DataManager.WriteEvent("user-password-updated", action);               // don't await - fire & forget

            return(APIResponseModel.Success());
        }
예제 #3
0
        public async Task <APIResponseModel> Process(SampleUser userContext, UserUpdateDisplayNameAction action)
        {
            UserModel user = userContext.OBO != null ? userContext.OBO : userContext.SiteUser;

            var dte = UserEntity.UpdateDisplayName(user.UserId, action.DisplayName);
            var rs  = await this.DataManager.UpdateEntityProperty(EntityTableType.user, dte);

            if (rs.Code != ResponseCode.Ok)
            {
                return(APIResponseModel.Error(rs.Code, rs.Message));
            }

            return(APIResponseModel.Success());
        }