示例#1
0
        public virtual JsonResult Login()
        {
            //if (!VerifyToken())
            //{
            //    return ResultUtils.Fail(app_senre, msg_box);
            //}
            string username = RequestHelper.GetFormString("username");
            string password = RequestHelper.GetFormString("password");

            if (Utils.StrIsNullOrEmpty(username) || Utils.StrIsNullOrEmpty(password))
            {
                return(ResultUtils.Error("账号或密码不能为空"));
            }
            if (Utils.IsValidMobile(username))                                                    //判断是否是手机号码
            {
                userid = NH.Service.Api.AuthService.GetInstance().LoginUp(username, password, 1); //手机号码
            }
            else
            {
                userid = NH.Service.Api.AuthService.GetInstance().LoginUp(username, password, 0); //用户名
            }
            if (userid > 0)
            {
                Entity.Model.Token token = base.GetToken();
                return(ResultUtils.Success(new
                {
                    userId = token.UserID,
                    timeStamp = token.Timestamp,
                    platform = token.Platform,
                    token = token.TokenStr
                }));
            }
            return(ResultUtils.Fail("登录失败"));
        }
示例#2
0
        public async Task <Result> Register(RegisterRequest registerRequest)
        {
            ValidationResult validationResult = _registerValidator.Validate(registerRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid RegisterRequest");
                return(Result.Fail(ResultUtils.ToResultError(validationResult.Errors)));
            }

            AppUserEntity appUser = new AppUserEntity(
                userName: registerRequest.Email,
                email: registerRequest.Email,
                firstName: registerRequest.FirstName,
                lastName: registerRequest.LastName,
                emailConfirmed: false,
                enabled: true);

            IdentityResult identityResult = await _userManager.CreateAsync(appUser, registerRequest.Password);

            if (!identityResult.Succeeded)
            {
                _logger.LogError($"Failed to register user");
                return(Result.Fail(ResultUtils.ToResultError(identityResult.Errors)));
            }

            string code = await _userManager.GenerateEmailConfirmationTokenAsync(appUser);

            await _emailService.SendVerificationMail(appUser, code);

            return(Result.Ok());
        }
示例#3
0
        public Result EditRole(string id, EditRoleRequest editRoleRequest, string adminId)
        {
            ValidationResult validationResult = _editRoleValidator.Validate(editRoleRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid EditRoleRequest. admin {adminId}");
                return(Result.Fail(ResultUtils.ToResultError(validationResult.Errors)));
            }

            BaseSpecification <RoleEntity> roleSpecification = new BaseSpecification <RoleEntity>();

            roleSpecification.AddFilter(x => x.Id == id);

            RoleEntity role = _roleRepository.SingleOrDefault(roleSpecification);

            if (role == null)
            {
                _logger.LogError($"No role. Admin id {adminId}");
                return(Result.Fail("no_role", "No Role"));
            }

            role.Description = editRoleRequest.Description;

            bool result = _roleRepository.Update(role);

            if (!result)
            {
                _logger.LogError($"Failed to update role with id {id}. Admin {adminId}");
                return(Result.Fail("error", "Error"));
            }

            return(Result.Ok());
        }
示例#4
0
        public async Task <Result <string> > AddRole(NewRoleRequest newRoleRequest, string adminId)
        {
            ValidationResult validationResult = _newRoleValidator.Validate(newRoleRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid NewRoleRequest. Admin {adminId}");
                return(Result.Fail <string>(ResultUtils.ToResultError(validationResult.Errors)));
            }

            RoleEntity role = new RoleEntity(
                name: newRoleRequest.Name,
                description: newRoleRequest.Description,
                type: newRoleRequest.Type.Value);

            IdentityResult result = await _roleManager.CreateAsync(role);

            if (!result.Succeeded)
            {
                _logger.LogError($"Failed to add new role. Admin with id {adminId}");
                return(Result.Fail <string>(ResultUtils.ToResultError(result.Errors)));
            }

            role = await _roleManager.FindByNameAsync(newRoleRequest.Name);

            if (role == null)
            {
                _logger.LogError($"Failed to find new role with name {newRoleRequest.Name}. Admin with id {adminId}");
                return(Result.Fail <string>("no_role", "No role"));
            }

            return(Result.Ok(role.Id));
        }
示例#5
0
        /// <summary>
        /// 提交验证码
        /// </summary>
        /// <param name="mod"></param>
        /// <returns></returns>
        public virtual JsonResult SubmitCode(SubmitCodeReq mod)
        {
            if (string.IsNullOrEmpty(mod.phone))
            {
                return(ResultUtils.Fail("手机号码或用户名不能为空"));
            }
            if (string.IsNullOrEmpty(mod.code))
            {
                return(ResultUtils.Fail("验证码不能为空"));
            }
            int ret = NH.Service.VerifyService.Instance().SubmitCode(mod);

            if (ret == 1)
            {
                return(ResultUtils.Success("验证成功"));
            }
            else if (ret == -1)
            {
                return(ResultUtils.Fail("用户不存在"));
            }
            else if (ret == -2)
            {
                return(ResultUtils.Fail("手机号码未注册"));
            }
            return(ResultUtils.Fail("验证码过期"));
        }
示例#6
0
        /// <summary>
        /// Used only when admin is adding new user
        /// </summary>
        /// <param name="newUserRequest"></param>
        /// <param name="adminId"></param>
        /// <returns></returns>
        public async Task <Core.Models.Result.Result <string> > AddUser(NewUserRequest newUserRequest, string adminId)
        {
            ValidationResult validationResult = _newUserValidator.Validate(newUserRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid NewUserRequest. Admin {adminId}");
                return(Core.Models.Result.Result.Fail <string>(ResultUtils.ToResultError(validationResult.Errors)));
            }

            BaseRegisterRequest baseRegisterRequest = new BaseRegisterRequest
            {
                Username  = newUserRequest.UserName,
                Email     = newUserRequest.Email,
                FirstName = newUserRequest.FirstName,
                LastName  = newUserRequest.LastName,
            };

            Result <AppUserEntity> addUserResult = await AddUser(baseRegisterRequest, false, false, false);

            if (addUserResult.Failure)
            {
                return(Core.Models.Result.Result.Fail <string>(addUserResult.ResultMessages.Select(x => new Core.Models.Result.Result.ResultError(x.Code, x.Code)).ToList()));
            }

            return(Core.Models.Result.Result.Ok(addUserResult.Value.Id));
        }
示例#7
0
        void btnClick(Object sender, EventArgs e)
        {
            Button btn = (Button)sender;

            switch (btn.Text)
            {
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
            case "0":
            case ".":
            case "+":
            case "-":
            case "*":
            case "/":
            case "(":
            case ")":
                if (this.clear)
                {
                    testResult.Text = btn.Text;
                    clear           = false;
                }
                else
                {
                    testResult.Text += btn.Text;
                }
                break;

            case "CE":
            {
                this.clear      = true;
                testResult.Text = "0";
                break;
            }

            case "=":
            {
                String      temp = testResult.Text + "=";
                ResultUtils ru   = new ResultUtils(testResult.Text);
                String      tmp  = ru.getResult();
                if (tmp.Equals("error"))
                {
                    testResult.Text = "表达式错误,请正确输入,按CE继续";
                }
                else
                {
                    testResult.Text = temp + ru.getResult();
                }
                break;
            }
            }
        }
示例#8
0
        public Result <DataTableResult <UserTableModel> > GetGroupUsers(string roleId, DataTableRequest request)
        {
            ValidationResult validationResult = _dataTableValidator.Validate(request);

            if (!validationResult.IsValid)
            {
                _logger.LogWarning($"Invalid {nameof(DataTableRequest)} model");
                return(Result.Fail <DataTableResult <UserTableModel> >(ResultUtils.ToResultError(validationResult.Errors.ToList())));
            }

            BaseSpecification <RoleEntity> roleSpecification = new BaseSpecification <RoleEntity>();

            roleSpecification.AddFilter(x => x.Id == roleId);
            roleSpecification.AddFilter(x => x.Type == RoleTypes.Group);

            bool existResult = _roleRepository.Exist(roleSpecification);

            if (!existResult)
            {
                _logger.LogWarning($"GroupRole with id {roleId} does not exist");
                return(Result.Fail <DataTableResult <UserTableModel> >("no_role", "No Role"));
            }

            PaginationSpecification <GroupUserEntity, UserTableModel> baseSpecification = new PaginationSpecification <GroupUserEntity, UserTableModel>();

            baseSpecification.AddFilter(x => x.RoleId == roleId);
            baseSpecification.AddSelect(x => new UserTableModel(
                                            x.User.Id,
                                            x.User.UserName,
                                            x.Group.Name));

            if (!string.IsNullOrEmpty(request.Search))
            {
                string search = request.Search.ToUpper();

                baseSpecification.AddFilter(x =>
                                            x.User.Id.ToUpper().Contains(search) ||
                                            x.User.Email.ToUpper().Contains(search) ||
                                            x.User.UserName.ToUpper().Contains(search) ||
                                            x.User.FirstName.ToUpper().Contains(search) ||
                                            x.User.LastName.ToUpper().Contains(search));
            }
            baseSpecification.AppalyPaging(request.Start, request.Length);
            baseSpecification.AddInclude(x => x.User);

            PaginatedData <UserTableModel> paginationData = _groupUserRepository.GetPaginated(baseSpecification);

            DataTableResult <UserTableModel> result = new DataTableResult <UserTableModel>(
                draw: request.Draw,
                recordsTotal: paginationData.Count,
                recordsFilterd: paginationData.Count,
                error: null,
                data: paginationData.Data);

            return(Result.Ok(result));
        }
示例#9
0
        public Task <Result <IEnumerable <string> > > VerifyEmailTwoFactorCode(string userId, AddTwoFactorEmailAuthenticationRequest request)
        {
            ValidationResult validationResult = _addEmailTwoFactorValidator.Validate(request);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Verification failed.");
                return(Task.FromResult(Result.Fail <IEnumerable <string> >(ResultUtils.ToResultError(validationResult.Errors))));
            }

            return(AddTwoFactorAuthentication(userId, TwoFactorAuthenticationType.Email, request.Token));
        }
示例#10
0
        /// <summary>
        /// 获取一级类目
        /// </summary>
        /// <returns></returns>
        public virtual JsonResult GetRecommendTag()
        {
            var list = NH.Service.CategoryService.Instance().GetParentCategoryList();

            if (list != null)
            {
                return(ResultUtils.Success(new
                {
                    list = list
                }));
            }
            return(ResultUtils.Fail("获取类目列表失败"));
        }
示例#11
0
        public Task <Result <IEnumerable <string> > > VerifyTwoFactorCode(string userId, AddTwoFactorAuthenticatorRequest request)
        {
            ValidationResult validationResult = _addTwoFactorValidator.Validate(request);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid TwoFactor Verification code. ");
                return(Task.FromResult(Result.Fail <IEnumerable <string> >(ResultUtils.ToResultError(validationResult.Errors))));
            }

            string vereficationCode = request.VereficationCode.Replace(" ", string.Empty).Replace("-", string.Empty);

            return(AddTwoFactorAuthentication(userId, TwoFactorAuthenticationType.Authenticator, vereficationCode));
        }
示例#12
0
        /// <summary>
        /// 重置密码
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public virtual JsonResult ResetPassword(ResetPasswordReq req)
        {
            if (string.IsNullOrEmpty(req.phone))
            {
                return(ResultUtils.Fail("手机号码或用户名不能为空"));
            }
            if (string.IsNullOrEmpty(req.code))
            {
                return(ResultUtils.Fail("验证码不能为空"));
            }
            if (string.IsNullOrEmpty(req.password))
            {
                return(ResultUtils.Fail("密码不能为空"));
            }
            SubmitCodeReq mod = new SubmitCodeReq()
            {
                phone = req.phone,
                code  = req.code
            };
            int ret = NH.Service.VerifyService.Instance().SubmitCode(mod);

            if (ret == 0)
            {
                return(ResultUtils.Success("验证码过期"));
            }
            else if (ret == -1)
            {
                return(ResultUtils.Fail("用户不存在"));
            }
            else if (ret == -2)
            {
                return(ResultUtils.Fail("手机号码未注册"));
            }
            userid = NH.Service.Api.AuthService.GetInstance().ResetPassword(req);
            if (userid > 0)
            {
                Entity.Model.Token token = base.GetToken();
                return(ResultUtils.Success(new
                {
                    userId = token.UserID,
                    timeStamp = token.Timestamp,
                    platform = token.Platform,
                    token = token.TokenStr
                }));
            }
            return(ResultUtils.Fail("重置密码失败"));
        }
示例#13
0
 public virtual ActionResult Register(RegisterReq mod)
 {
     lock (lockhelper)
     {
         if (string.IsNullOrEmpty(mod.phone))
         {
             return(ResultUtils.Error("手机号码不能为空"));
         }
         else if (!Utils.IsValidMobile(mod.phone))
         {
             return(ResultUtils.Error("手机号码格式有误"));
         }
         if (string.IsNullOrEmpty(mod.code))
         {
             return(ResultUtils.Error("验证码不能为空"));
         }
         else if (mod.code.Trim().Length != 6)
         {
             return(ResultUtils.Error("验证码有误"));
         }
         else
         {
         }
         if (string.IsNullOrEmpty(mod.username))
         {
             mod.username = mod.phone;
         }
         if (string.IsNullOrEmpty(mod.password))
         {
             return(ResultUtils.Error("密码不能为空"));
         }
         userid = NH.Service.Api.AuthService.GetInstance().Regieste(mod);
         if (userid > 0)
         {
             Entity.Model.Token token = base.GetToken();
             return(ResultUtils.Success(new
             {
                 userId = token.UserID,
                 timeStamp = token.Timestamp,
                 platform = token.Platform,
                 token = token.TokenStr
             }));
         }
         return(ResultUtils.Fail("注册失败"));
     }
 }
示例#14
0
        /// <summary>
        /// 请求发送验证码
        /// </summary>
        /// <param name="mod"></param>
        /// <returns></returns>
        public virtual JsonResult SendCode(SendCodeReq mod)
        {
            if (string.IsNullOrEmpty(mod.phone))
            {
                return(ResultUtils.Fail("手机号码不能为空"));
            }
            string randownum = DataCheck.RandomNumber(4); //获取4位随机码
            bool   b         = VerifyService.Instance().CreateVerifyCode(mod.phone, randownum);

            if (b)
            {
                return(ResultUtils.Success(new
                {
                    verifycode = randownum
                }));
            }
            return(ResultUtils.Fail("请重新获取"));
        }
        public async Task <Result> VerifyTwoFactorCode(string userId, string sessionCode, string ip, AddTwoFactorAuthenticatorRequest request)
        {
            ValidationResult validationResult = _addTwoFactorValidator.Validate(request);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid TwoFactor Verificatin code. ");
                return(Result.Fail(ResultUtils.ToResultError(validationResult.Errors)));
            }

            AppUserEntity appUser = await _userManager.FindByIdAsync(userId);

            if (appUser == null)
            {
                _logger.LogError($"No user. UserId {userId}");
                return(Result.Fail("no_user", "No User"));
            }

            string vereficationCode = request.VereficationCode.Replace(" ", string.Empty).Replace("-", string.Empty);

            bool isCodeValid = await _userManager.VerifyTwoFactorTokenAsync(appUser, _userManager.Options.Tokens.AuthenticatorTokenProvider, vereficationCode);

            if (!isCodeValid)
            {
                _logger.LogError($"Invlid TwoFactor Verification code. User {userId}");
                return(Result.Fail("invlid_code", "Invalid Code", "VereficationCode"));
            }

            await _userManager.SetTwoFactorEnabledAsync(appUser, true);

            _logger.LogInformation($"2fa enabled. User {appUser.Id}");

            //TO DO: generate recovery codes

            Result loginResult = await _loginService.Login(userId, sessionCode, ip);

            if (loginResult.Failure)
            {
                _logger.LogError($"Faild to login user after 2fa reset. UserId {userId}");
            }

            return(Result.Ok());
        }
示例#16
0
        public Result <DataTableResult <UserListViewModel> > GetAll(DataTableRequest request)
        {
            ValidationResult validationResult = _dataTableValidator.Validate(request);

            if (!validationResult.IsValid)
            {
                return(Result.Fail <DataTableResult <UserListViewModel> >(ResultUtils.ToResultError(validationResult.Errors.ToList())));
            }

            PaginationSpecification <AppUserEntity, UserListViewModel> baseSpecification = new PaginationSpecification <AppUserEntity, UserListViewModel>();

            if (!string.IsNullOrEmpty(request.Search))
            {
                string search = request.Search.ToUpper();

                baseSpecification.AddFilter(x =>
                                            x.Id.ToUpper().Contains(search) ||
                                            x.Email.ToUpper().Contains(search) ||
                                            x.UserName.ToUpper().Contains(search) ||
                                            x.FirstName.ToUpper().Contains(search) ||
                                            x.LastName.ToUpper().Contains(search));
            }

            baseSpecification.AppalyPaging(request.Start, request.Length);
            baseSpecification.AddSelect(x => new UserListViewModel(
                                            x.Id,
                                            x.UserName,
                                            x.Email,
                                            x.FirstName,
                                            x.LastName));

            PaginatedData <UserListViewModel> paginationData = _userRepository.GetPaginated(baseSpecification);

            DataTableResult <UserListViewModel> result = new DataTableResult <UserListViewModel>(
                draw: request.Draw,
                recordsTotal: paginationData.Count,
                recordsFilterd: paginationData.Count,
                error: null,
                data: paginationData.Data);

            return(Result.Ok(result));
        }
示例#17
0
        public virtual JsonResult IntersetingCategory(UserCategoryReq request)
        {
            if (!VerifyToken())
            {
                return(ResultUtils.Fail(app_senre, msg_box));
            }
            if (string.IsNullOrEmpty(request.categoryids))
            {
                return(ResultUtils.Fail("请选择感兴趣的类目"));
            }
            string[] arr  = request.categoryids.Split(',');
            var      list = arr.Select(c => c.ToInt()).ToArray();
            int      ret  = NH.Service.CategoryService.Instance().InterstingCategory(userid, list);

            if (ret > 0)
            {
                return(ResultUtils.Success("提交成功"));
            }
            return(ResultUtils.Fail("提交失败"));
        }
示例#18
0
        public async Task <Result> SetNewPassword(string userId, SetNewPasswordRequest setNewPasswordRequest, string adminId)
        {
            ValidationResult validationResult = _setNewPasswordValidator.Validate(setNewPasswordRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invlid SetNewPasswordRequest. Admin {adminId}");
                return(Result.Fail(ResultUtils.ToResultError(validationResult.Errors)));
            }

            AppUserEntity appUser = await _userManager.FindByIdAsync(userId);

            if (appUser == null)
            {
                _logger.LogError($"No User with id {userId}. Admin {adminId}");
                return(Result.Fail("no_user", "No User"));
            }

            _logger.LogInformation($"Seting new password for with id {userId}. Admin id {adminId}");

            string passwordResetToken = await _userManager.GeneratePasswordResetTokenAsync(appUser);

            IdentityResult changePasswordResult = await _userManager.ResetPasswordAsync(appUser, passwordResetToken, setNewPasswordRequest.Password);

            if (!changePasswordResult.Succeeded)
            {
                _logger.LogError($"Faild to reset password. UserId {appUser.Id}, admin {adminId}");
                return(Result.Fail(changePasswordResult.Errors));
            }


            Result logoutUserResult = await _sessionService.LogoutUser(new Auth.Session.Models.LogoutUserSessionsRequest(appUser.Id), adminId);

            if (logoutUserResult.Failure)
            {
                return(logoutUserResult);
            }

            _logger.LogInformation($"Added new password to user with id {userId}. Admin id {adminId}");
            return(Result.Ok());
        }
示例#19
0
        public async Task <Result> AddRoles(string userId, List <string> roles, string adminId)
        {
            AppUserEntity appUser = await _userManager.FindByIdAsync(userId);

            if (appUser == null)
            {
                _logger.LogError($"No user {userId}");
                return(Result.Fail("no_user", "No User"));
            }

            IdentityResult result = await _userManager.AddToRolesAsync(appUser, roles);

            if (!result.Succeeded)
            {
                _logger.LogError($"Admin with id {adminId} faild to add roles to user with id {userId}");
                return(Result.Fail(ResultUtils.ToResultError(result.Errors)));
            }

            _logger.LogInformation($"Admin with id {adminId} added roles to user with id {userId}. Role ids: {Newtonsoft.Json.JsonConvert.SerializeObject(roles)}");
            return(Result.Ok());
        }
示例#20
0
        public Result <DataTableResult <RoleListViewModel> > GetAll(DataTableRequest request)
        {
            ValidationResult validationResult = _dataTableValidator.Validate(request);

            if (!validationResult.IsValid)
            {
                _logger.LogWarning($"Invalid DataTableRequest model");
                return(Result.Fail <DataTableResult <RoleListViewModel> >(ResultUtils.ToResultError(validationResult.Errors.ToList())));
            }

            PaginationSpecification <RoleEntity, RoleListViewModel> baseSpecification = new PaginationSpecification <RoleEntity, RoleListViewModel>();

            if (!string.IsNullOrEmpty(request.Search))
            {
                string search = request.Search.ToUpper();

                baseSpecification.AddFilter(x =>
                                            x.Id.ToUpper().Contains(search) ||
                                            x.Name.ToUpper().Contains(search));
            }

            baseSpecification.AppalyPaging(request.Start, request.Length);
            baseSpecification.AddSelect(x => new RoleListViewModel(
                                            x.Id,
                                            x.Name,
                                            x.Type.ToString()));

            PaginatedData <RoleListViewModel> pagedResult = _roleRepository.GetPaginated(baseSpecification);

            DataTableResult <RoleListViewModel> result = new DataTableResult <RoleListViewModel>(
                draw: request.Draw,
                recordsTotal: pagedResult.Count,
                recordsFilterd: pagedResult.Count,
                error: null,
                data: pagedResult.Data);

            return(Result.Ok(result));
        }
示例#21
0
        /// <summary>
        /// Used only when admin is adding new user
        /// </summary>
        /// <param name="newUserRequest"></param>
        /// <param name="adminId"></param>
        /// <returns></returns>
        public async Task <Result <string> > AddUser(NewUserRequest newUserRequest, string adminId)
        {
            ValidationResult validationResult = _newUserValidator.Validate(newUserRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid NewUserRequest. Admin {adminId}");
                return(Result.Fail <string>(ResultUtils.ToResultError(validationResult.Errors)));
            }

            AppUserEntity appUser = new AppUserEntity(
                userName: newUserRequest.UserName,
                email: newUserRequest.Email,
                firstName: newUserRequest.FirstName,
                lastName: newUserRequest.LastName,
                emailConfirmed: false,
                enabled: true);

            IdentityResult result = await _userManager.CreateAsync(appUser);

            if (!result.Succeeded)
            {
                _logger.LogError($"Admin with id {adminId} failed to add new user");
                return(Result.Fail <string>(ResultUtils.ToResultError(result.Errors)));
            }

            appUser = await _userManager.FindByNameAsync(newUserRequest.UserName);

            if (appUser == null)
            {
                _logger.LogError($"Failed to find new user with UserName {newUserRequest.UserName}. Admin {adminId}");
                return(Result.Fail <string>("no_user", "No user"));
            }

            return(Result.Ok(appUser.Id));
        }
示例#22
0
        public async Task <Result> EditUser(string id, EditUserRequest editUserRequest, string adminId)
        {
            ValidationResult validationResult = _editUserValidator.Validate(editUserRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid EditUserRequest. Admin {adminId}");
                return(Result.Fail(ResultUtils.ToResultError(validationResult.Errors)));
            }

            BaseSpecification <AppUserEntity> userSpecification = new BaseSpecification <AppUserEntity>();

            userSpecification.AddFilter(x => x.Id == id);

            AppUserEntity appUser = _userRepository.SingleOrDefault(userSpecification);

            if (appUser == null)
            {
                _logger.LogWarning($"No User. UserId {id}. Admin {adminId}");
                return(Result.Fail("no_user", "No User"));
            }

            bool updateSecurityStamp = false;

            appUser.FirstName = editUserRequest.FirstName;
            appUser.LastName  = editUserRequest.LastName;

#if NET_CORE2
            string normalizeEmail = _userManager.NormalizeKey(editUserRequest.Email);
#endif
#if NET_CORE3
            string normalizeEmail = _userManager.NormalizeEmail(editUserRequest.Email);
#endif
            if (normalizeEmail != appUser.NormalizedEmail)
            {
                appUser.Email           = editUserRequest.Email;
                appUser.NormalizedEmail = normalizeEmail;
                appUser.EmailConfirmed  = false;
            }
            else
            {
                appUser.EmailConfirmed = editUserRequest.EmailConfirmed;
            }

            if (appUser.PhoneNumber != editUserRequest.PhoneNumber)
            {
                appUser.PhoneNumber          = editUserRequest.PhoneNumber;
                appUser.PhoneNumberConfirmed = false;
            }
            else
            {
                appUser.PhoneNumberConfirmed = editUserRequest.PhoneNumberConfirmed;
            }

            if (appUser.TwoFactorEnabled)
            {
                appUser.TwoFactorEnabled = editUserRequest.TwoFactorEnabled;
            }

            if (appUser.Enabled != editUserRequest.Enabled)
            {
                appUser.Enabled     = editUserRequest.Enabled;
                updateSecurityStamp = true;
            }

            bool result = _userRepository.Update(appUser);
            if (!result)
            {
                _logger.LogError($"Failed to save edited user data. Admin {adminId}");
                return(Result.Fail("error", "error"));
            }

            if (updateSecurityStamp)
            {
                Result logoutUserResult = await _sessionService.LogoutUser(new Auth.Session.Models.LogoutUserSessionsRequest(appUser.Id), adminId);

                if (logoutUserResult.Failure)
                {
                    return(logoutUserResult);
                }
            }

            return(Result.Ok());
        }
示例#23
0
        public async Task <Result> AcceptInvite(AcceptInviteRequest acceptInvite)
        {
            ValidationResult validationResult = _acceptInviteValidator.Validate(acceptInvite);

            if (!validationResult.IsValid)
            {
                _logger.LogWarning($"Invalid {nameof(AcceptInviteRequest)} model");
                return(Result.Fail(validationResult.Errors));
            }

            BaseSpecification <InviteEntity> getInviteSpecification = new BaseSpecification <InviteEntity>();

            getInviteSpecification.AddFilter(x => x.Token == acceptInvite.Code);
            getInviteSpecification.AddFilter(x => x.Status == Data.Enums.Entity.InviteStatuses.Pending);

            InviteEntity inviteEntity = _inviteRepository.SingleOrDefault(getInviteSpecification);

            if (inviteEntity == null)
            {
                _logger.LogError($"No Invite. Token {acceptInvite.Code}");
                return(Result.Fail("no_invite", "No Invite"));
            }

            if (inviteEntity.ExpiresAt < DateTimeOffset.UtcNow)
            {
                _logger.LogError($"Invite has expired");
                return(Result.Fail("no_invite", "No Invite"));
            }

            AppUserEntity appUser = new AppUserEntity(
                userName: inviteEntity.Email,
                email: inviteEntity.Email,
                firstName: acceptInvite.FirstName,
                lastName: acceptInvite.LastName,
                emailConfirmed: true,
                enabled: true);

            IdentityResult identityResult = await _userManager.CreateAsync(appUser, acceptInvite.Password);

            if (!identityResult.Succeeded)
            {
                _logger.LogError($"Failed to create new user for invite. InviteId {inviteEntity.Id}");
                return(Result.Fail(ResultUtils.ToResultError(identityResult.Errors)));
            }

            inviteEntity.Update(Data.Enums.Entity.InviteStatuses.Accepted);
            bool updateInvite = _inviteRepository.Update(inviteEntity);

            if (!updateInvite)
            {
                _logger.LogWarning($"Failed to update invite status. InnivteId {inviteEntity.Id}, UserId {appUser.Id}");
            }

            if (inviteEntity.GroupId != null)
            {
                AddToGroup(appUser.Id, inviteEntity.GroupId, inviteEntity.GroupRoleId);
            }

            if (inviteEntity.RoleId != null)
            {
                await AddToGlobalRole(appUser, inviteEntity.RoleId);
            }

            return(Result.Ok());
        }
示例#24
0
        public async Task <Result> AcceptInvite(AcceptInviteRequest acceptInvite)
        {
            ValidationResult acceptInviteValidationResult  = _acceptInviteValidator.Validate(acceptInvite);
            ValidationResult userAttributeValidationResult = _userAttributeRequestValidator.Validate(acceptInvite);

            if (!acceptInviteValidationResult.IsValid || !userAttributeValidationResult.IsValid)
            {
                _logger.LogWarning($"Invalid {nameof(AcceptInviteRequest)} model");

                List <Result.ResultError> errors = ResultUtils.ToResultError(acceptInviteValidationResult.Errors);
                errors.AddRange(ResultUtils.ToResultError(userAttributeValidationResult.Errors));

                return(Result.Fail(errors));
            }

            BaseSpecification <InviteEntity> getInviteSpecification = new BaseSpecification <InviteEntity>();

            getInviteSpecification.AddFilter(x => x.Token == acceptInvite.Code);
            getInviteSpecification.AddFilter(x => x.Status == Data.Enums.Entity.InviteStatuses.Pending);

            InviteEntity inviteEntity = _inviteRepository.SingleOrDefault(getInviteSpecification);

            if (inviteEntity == null)
            {
                _logger.LogError($"No Invite. Token {acceptInvite.Code}");
                return(Result.Fail("no_invite", "No Invite"));
            }

            if (inviteEntity.ExpiresAt < DateTimeOffset.UtcNow)
            {
                _logger.LogError($"Invite has expired");
                return(Result.Fail("no_invite", "No Invite"));
            }

            List <UserAttributeEntity> userAttributes = null;

            if (acceptInvite.Attributes != null)
            {
                userAttributes = acceptInvite.Attributes
                                 .Select(x => new UserAttributeEntity(
                                             key: x.Key,
                                             value: x.Value))
                                 .ToList();
            }

            string username;

            if (_identityUIEndpoints.UseEmailAsUsername)
            {
                username = inviteEntity.Email;
            }
            else
            {
                if (string.IsNullOrEmpty(acceptInvite.Username))
                {
                    _logger.LogError($"Username cannot be empty");
                    return(Result.Fail("username_cannot_be_empty", "username_cannot_be_empty"));
                }

                username = acceptInvite.Username;
            }

            AppUserEntity appUser = new AppUserEntity(
                userName: username,
                email: inviteEntity.Email,
                firstName: acceptInvite.FirstName,
                lastName: acceptInvite.LastName,
                emailConfirmed: true,
                enabled: true,
                phoneNumber: acceptInvite.PhoneNumber,
                attributes: userAttributes);

            IdentityResult identityResult = await _userManager.CreateAsync(appUser, acceptInvite.Password);

            if (!identityResult.Succeeded)
            {
                _logger.LogError($"Failed to create new user for invite. InviteId {inviteEntity.Id}");
                return(Result.Fail(ResultUtils.ToResultError(identityResult.Errors)));
            }

            inviteEntity.Update(Data.Enums.Entity.InviteStatuses.Accepted);
            bool updateInvite = _inviteRepository.Update(inviteEntity);

            if (!updateInvite)
            {
                _logger.LogWarning($"Failed to update invite status. InnivteId {inviteEntity.Id}, UserId {appUser.Id}");
            }

            if (inviteEntity.GroupId != null)
            {
                AddToGroup(appUser.Id, inviteEntity.GroupId, inviteEntity.GroupRoleId);
            }

            if (inviteEntity.RoleId != null)
            {
                await AddToGlobalRole(appUser, inviteEntity.RoleId);
            }

            return(Result.Ok());
        }
示例#25
0
        public async Task <Result> ExternalLoginRequest(ExternalLoginRegisterRequest externalLoginRegisterRequest)
        {
            if (!_identityUIEndpoints.RegisterEnabled)
            {
                _logger.LogError($"User tried to register, but registrations are disabled");
                return(Result.Fail("registration_is_not_enabled", "Registration disabled"));
            }

            ValidationResult externalLoginValidationResult = _externalLoginRequsterRequestValidator.Validate(externalLoginRegisterRequest);
            ValidationResult userAttributeValidationResult = _userAttributeRequestValidator.Validate(externalLoginRegisterRequest);

            if (!externalLoginValidationResult.IsValid || !userAttributeValidationResult.IsValid)
            {
                _logger.LogWarning($"Invalid {nameof(ExternalLoginRegisterRequestValidator)} model");

                List <Result.ResultError> errors = ResultUtils.ToResultError(externalLoginValidationResult.Errors);
                errors.AddRange(ResultUtils.ToResultError(userAttributeValidationResult.Errors));

                return(Result.Fail(errors));
            }

            ExternalLoginInfo externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync();

            if (externalLoginInfo == null)
            {
                _logger.LogError($"Failed to get external login info.");
                return(Result.Fail("failed_to_get_external_login_info", "Failed to get external login info"));
            }

            List <UserAttributeEntity> userAttributes = null;

            if (externalLoginRegisterRequest.Attributes != null)
            {
                userAttributes = externalLoginRegisterRequest.Attributes
                                 .Select(x => new UserAttributeEntity(
                                             key: x.Key,
                                             value: x.Value))
                                 .ToList();
            }

            string username;

            if (_identityUIEndpoints.UseEmailAsUsername)
            {
                username = externalLoginRegisterRequest.Email;
            }
            else
            {
                if (string.IsNullOrEmpty(externalLoginRegisterRequest.Username))
                {
                    _logger.LogError($"Username cannot be empty");
                    return(Result.Fail("username_cannot_be_empty", "username_cannot_be_empty"));
                }

                username = externalLoginRegisterRequest.Username;
            }

            AppUserEntity appUser = new AppUserEntity(
                userName: username,
                email: externalLoginRegisterRequest.Email,
                firstName: externalLoginRegisterRequest.FirstName,
                lastName: externalLoginRegisterRequest.LastName,
                emailConfirmed: false,
                enabled: true,
                phoneNumber: externalLoginRegisterRequest.PhoneNumber,
                attributes: userAttributes);

            IdentityResult createUserResult = await _userManager.CreateAsync(appUser);

            if (!createUserResult.Succeeded)
            {
                _logger.LogError($"Failed to create user");
                return(Result.Fail(createUserResult.Errors));
            }

            IdentityResult addLoginResult = await _userManager.AddLoginAsync(appUser, externalLoginInfo);

            if (!addLoginResult.Succeeded)
            {
                _logger.LogError($"Failed to add login to user. UserId {appUser.Id}");
            }

            string code = await _userManager.GenerateEmailConfirmationTokenAsync(appUser);

            await _emailService.SendVerificationMail(appUser, code);

            return(Result.Ok());
        }
示例#26
0
        public async Task <Result> Register(RegisterRequest registerRequest)
        {
            if (!_identityUIEndpoints.RegisterEnabled)
            {
                _logger.LogError($"User tried to register, but registrations are disabled");
                return(Result.Fail("registration_is_not_enabled", "Registration disabled"));
            }

            ValidationResult registerValidationResult      = _registerValidator.Validate(registerRequest);
            ValidationResult userAttributeValidationResult = _userAttributeRequestValidator.Validate(registerRequest);

            if (!registerValidationResult.IsValid || !userAttributeValidationResult.IsValid)
            {
                _logger.LogError($"Invalid {typeof(RegisterRequest).Name} model");

                List <Result.ResultError> errors = ResultUtils.ToResultError(registerValidationResult.Errors);
                errors.AddRange(ResultUtils.ToResultError(userAttributeValidationResult.Errors));

                return(Result.Fail(errors));
            }

            List <UserAttributeEntity> userAttributes = null;

            if (registerRequest.Attributes != null)
            {
                userAttributes = registerRequest.Attributes
                                 .Select(x => new UserAttributeEntity(
                                             key: x.Key,
                                             value: x.Value))
                                 .ToList();
            }

            string username;

            if (_identityUIEndpoints.UseEmailAsUsername)
            {
                username = registerRequest.Email;
            }
            else
            {
                if (string.IsNullOrEmpty(registerRequest.Username))
                {
                    _logger.LogError($"Username cannot be empty");
                    return(Result.Fail("username_cannot_be_empty", "username_cannot_be_empty"));
                }

                username = registerRequest.Username;
            }

            AppUserEntity appUser = new AppUserEntity(
                userName: username,
                email: registerRequest.Email,
                firstName: registerRequest.FirstName,
                lastName: registerRequest.LastName,
                emailConfirmed: false,
                enabled: true,
                phoneNumber: registerRequest.PhoneNumber,
                attributes: userAttributes);

            IdentityResult identityResult = await _userManager.CreateAsync(appUser, registerRequest.Password);

            if (!identityResult.Succeeded)
            {
                _logger.LogError($"Failed to register user");
                return(Result.Fail(ResultUtils.ToResultError(identityResult.Errors)));
            }

            string code = await _userManager.GenerateEmailConfirmationTokenAsync(appUser);

            await _emailService.SendVerificationMail(appUser, code);

            return(Result.Ok());
        }
示例#27
0
 public static Result <T> Fail <T>(IEnumerable <IdentityError> errors)
 {
     return(new Result <T>(default(T), false, ResultUtils.ToResultError(errors)));
 }
示例#28
0
 public static Result <T> Fail <T>(IList <ValidationFailure> errors)
 {
     return(new Result <T>(default(T), false, ResultUtils.ToResultError(errors)));
 }
示例#29
0
 public static Result Fail(IEnumerable <IdentityError> errors)
 {
     return(new Result(false, ResultUtils.ToResultError(errors)));
 }
示例#30
0
 public static Result Fail(IList <ValidationFailure> errors)
 {
     return(new Result(false, ResultUtils.ToResultError(errors)));
 }