public async Task <IActionResult> Put([FromBody] LoginModel loginUser) { if (!AppOptions.AllowedWebLogin) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Возможность авторизации через web интерфейс отключена администратором.", Status = StylesMessageEnum.warning.ToString() })); } if (!ModelState.IsValid) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Ошибка контроля валидации модели. Контроллер авторизации отклонил запрос.", Status = StylesMessageEnum.danger.ToString(), Tag = ModelState })); } if (AppOptions.IsEnableReCaptchaV2 || AppOptions.IsEnableReCaptchaV2Invisible) { string privatKey = AppOptions.IsEnableReCaptchaV2Invisible ? AppOptions.reCaptchaV2InvisiblePrivatKey : AppOptions.reCaptchaV2PrivatKey; reCaptcha2ResponseModel reCaptcha2Status = reCaptchaVerifier.reCaptcha2SiteVerify(privatKey, loginUser.g_recaptcha_response, HttpContext.Connection.RemoteIpAddress.ToString()); if (reCaptcha2Status is null || !reCaptcha2Status.success || (reCaptcha2Status.ErrorСodes != null && reCaptcha2Status.ErrorСodes.Length > 0)) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Неудачная попытка входа. Ошибка валидации reCaptcha токена.", Status = StylesMessageEnum.danger.ToString(), Tag = reCaptcha2Status })); } } UserObjectModel user = DbContext.Users.Include(x => x.Department).FirstOrDefault(u => u.Email == loginUser.EmailLogin && u.Password == glob_tools.GetHashString(loginUser.PasswordLogin));//glob_tools.GetHashString if (user != null) { if (user.isDisabled) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Вход невозможен. Пользователь отключён. Для снятия данного ограничения обратитесь к администратору", Status = StylesMessageEnum.danger.ToString(), Tag = new { user.Name, user.Role, Department = user.Department.Name } })); } await Authenticate(user); return(new ObjectResult(new ServerActionResult() { Success = true, Info = "Вход успешно выполнен.", Status = StylesMessageEnum.success.ToString(), Tag = new { user.Name, user.Role, Department = user.Department.Name } })); } else { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Неверный логин и/или пароль.", Status = StylesMessageEnum.warning.ToString() })); } }
public async Task <IActionResult> Post([FromBody] RegisterModel regUser) { if (!AppOptions.AllowedWebRegistration) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Регистрация через web интерфейс отключена администратором", Status = StylesMessageEnum.warning.ToString() })); } if (!ModelState.IsValid) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Ошибка контроля валидации модели. Регистрация отклонена.", Status = StylesMessageEnum.warning.ToString(), Tag = ModelState })); } if (AppOptions.IsEnableReCaptchaV2 || AppOptions.IsEnableReCaptchaV2Invisible) { string privatKey = AppOptions.IsEnableReCaptchaV2Invisible ? AppOptions.reCaptchaV2InvisiblePrivatKey : AppOptions.reCaptchaV2PrivatKey; reCaptcha2ResponseModel reCaptcha2Status = reCaptchaVerifier.reCaptcha2SiteVerify(privatKey, regUser.g_recaptcha_response, HttpContext.Connection.RemoteIpAddress.ToString()); if (reCaptcha2Status is null || !reCaptcha2Status.success || (reCaptcha2Status.ErrorСodes != null && reCaptcha2Status.ErrorСodes.Length > 0)) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Неудачная попытка регистрации. Ошибка верификации reCaptcha.", Status = StylesMessageEnum.danger.ToString(), Tag = reCaptcha2Status })); } } if (await DbContext.Users.AnyAsync(u => u.Name.ToLower() == regUser.PublicNameRegister.ToLower())) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Неудачная попытка регистрации. Публичное имя используется другим пользователем. Введите другое.", Status = StylesMessageEnum.warning.ToString() })); } UserObjectModel user = DbContext.Users.FirstOrDefault(u => u.Email.ToLower() == regUser.EmailRegister.ToLower()); if (user != null) { return(new ObjectResult(new ServerActionResult() { Success = false, Info = "Неудачная попытка регистрации. Логин занят. Придумайте другой лгин для входа или воспользуйтесь формой входа.", Status = StylesMessageEnum.warning.ToString() })); } DepartmentObjectModel userDepartment = DbContext.Departments.FirstOrDefault(x => x.Name.ToLower() == "user"); if (userDepartment is null) { userDepartment = new DepartmentObjectModel() { Name = "user", isReadonly = true }; DbContext.Departments.Add(userDepartment); DbContext.SaveChanges(); } user = new UserObjectModel { Email = regUser.EmailRegister, Name = regUser.PublicNameRegister, Password = glob_tools.GetHashString(regUser.PasswordRegister), Role = AccessLevelUserRolesEnum.Auth, DepartmentId = userDepartment.Id }; DbContext.Users.Add(user); DbContext.SaveChanges(); await Authenticate(user); return(new ObjectResult(new ServerActionResult() { Success = true, Info = "Регистрация успешно завершена", Status = StylesMessageEnum.success.ToString(), Tag = new { user.Name, user.Role, Department = user.Department.Name } })); }