public async Task <Member> CreateNewUser(MemberView memberView) { if (!EmailChecker.IsValidEmail(memberView.Email)) { throw new CoralTimeDangerException("Invalid email"); } if (memberView.IsAdmin) { var applicationUserAdmin = new ApplicationUser { UserName = memberView.UserName, Email = memberView.Email, IsAdmin = true, IsManager = false, IsActive = true }; return(await CreateNewUserCommon(memberView, applicationUserAdmin, ApplicationRoleAdmin)); } else { var applicationUserMember = new ApplicationUser { UserName = memberView.UserName, Email = memberView.Email, IsAdmin = false, IsManager = false, IsActive = true }; return(await CreateNewUserCommon(memberView, applicationUserMember, ApplicationRoleUser)); } }
public MemberView PatchPersonalInfo(string userName, MemberPersonalInfoView memberPreferencesView) { if (!EmailChecker.IsValidEmail(memberPreferencesView.Email)) { throw new CoralTimeDangerException("Invalid email"); } CheckRelatedEntities(userName, out var memberByName); memberByName = Uow.MemberRepository.GetQueryByUserName(userName); memberByName.FullName = memberPreferencesView.FullName; try { Uow.MemberRepository.Update(memberByName); Uow.Save(); _memberService.ChangeEmailByUserAsync(memberByName, memberPreferencesView.Email).GetAwaiter().GetResult(); _memberService.UpdateUserClaims(memberByName.Id); Uow.MemberRepository.LinkedCacheClear(); return(memberByName.GetView(Mapper)); } catch (Exception e) { throw new CoralTimeSafeEntityException("An error occurred while updating member", e); } }
public MemberView PatchPersonalInfo(MemberPersonalInfoView memberPreferencesView) { if (!EmailChecker.IsValidEmail(memberPreferencesView.Email)) { throw new CoralTimeDangerException("Invalid email"); } if (_isDemo) { throw new CoralTimeForbiddenException("Full name can't be changed on demo site"); } CheckRelatedEntities(ImpersonatedUserName, out var memberByName); memberByName = Uow.MemberRepository.GetQueryByUserName(ImpersonatedUserName); memberByName.FullName = memberPreferencesView.FullName; Uow.MemberRepository.Update(memberByName); Uow.Save(); _memberService.ChangeEmailByUserAsync(memberByName, memberPreferencesView.Email).GetAwaiter().GetResult(); _memberService.UpdateUserClaims(memberByName.Id); Uow.MemberRepository.LinkedCacheClear(); var urlIcon = _avatarService.GetUrlIcon(memberByName.Id); var memberView = memberByName.GetView(Mapper, urlIcon); return(memberView); }
/// <summary> /// Добавить почтовые ящики к сообщению для SMTP клиента /// </summary> /// <param name="emailsList">Список почтовых ящиков</param> private void AddEmails(IEnumerable <String> emailsList) { // Очищаем список почтовых ящиков подлежащих рассылке ClearEmails(); //Добавляем почтовые ящики к рассылке foreach (var item in emailsList) { if (EmailChecker.IsValidEmail(item)) { mailMessage.To.Add(item); } else { throw new ArgumentException("Incorrect email"); } } }
public static List <SelectItemPair> ReadEmails(string filePath) { List <SelectItemPair> emails = new List <SelectItemPair>(); foreach (var line in File.ReadAllLines(filePath)) { var trimmed = StringHelper.Trim(line); if (string.IsNullOrEmpty(trimmed)) { continue; } if (!EmailChecker.IsValidEmail(trimmed)) { continue; } emails.Add(new SelectItemPair() { Selected = true, Text = trimmed, Value = trimmed }); } return(emails); }
public async Task <MemberView> Update(MemberView memberView) { var memberByName = Uow.MemberRepository.GetQueryByUserName(CurrentUserName); if (memberByName == null) { throw new CoralTimeEntityNotFoundException($"Member with userName {CurrentUserName} not found."); } if (!memberByName.User.IsActive) { throw new CoralTimeEntityNotFoundException($"Member with userName {CurrentUserName} is not active."); } var memberId = memberView.Id; if (memberByName.Id != memberId && !memberByName.User.IsAdmin) { throw new CoralTimeForbiddenException($"Member with userName {CurrentUserName} can't change other user's data."); } if (!EmailChecker.IsValidEmail(memberView.Email)) { throw new CoralTimeSafeEntityException("Invalid email"); } var member = Uow.MemberRepository.GetQueryByMemberId(memberId); if (_isDemo) { if (member.User.Email != memberView.Email) { throw new CoralTimeForbiddenException("Email can't be changed on demo site"); } if (member.User.UserName != memberView.UserName) { throw new CoralTimeForbiddenException("Username can't be changed on demo site"); } if (member.User.IsActive != memberView.IsActive) { throw new CoralTimeForbiddenException("Status can't be changed on demo site"); } if (member.FullName != memberView.FullName) { throw new CoralTimeForbiddenException("Full name can't be changed on demo site"); } } if (memberByName.User.IsAdmin) { var newEmail = memberView.Email; var newUserName = memberView.UserName; var newIsActive = memberView.IsActive; var newIsAdmin = memberView.IsAdmin; if (member.User.Email != newEmail || member.User.UserName != newUserName || member.User.IsActive != newIsActive || member.User.IsAdmin != newIsAdmin) { member.User.Email = newEmail; member.User.UserName = newUserName; var updateResult = await _userManager.UpdateAsync(member.User); if (updateResult.Succeeded) { var startRole = member.User.IsAdmin ? ApplicationRoleAdmin : ApplicationRoleUser; if (memberId != memberByName.Id) { member.User.IsActive = newIsActive; member.User.IsAdmin = newIsAdmin; } var finishRole = member.User.IsAdmin ? ApplicationRoleAdmin : ApplicationRoleUser; try { Uow.MemberRepository.Update(member); Uow.Save(); if (startRole != finishRole) { await _userManager.RemoveFromRoleAsync(member.User, startRole); await _userManager.AddToRoleAsync(member.User, finishRole); } UpdateUserClaims(member.Id); Uow.MemberRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating member", e); } } else { CheckMembersErrors(updateResult.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); } } } var memberById = Uow.MemberRepository.GetQueryByMemberId(memberId); await ChangeEmailByUserAsync(memberById, memberView.Email); memberById.FullName = memberView.FullName; memberById.DefaultProjectId = memberView.DefaultProjectId; memberById.DefaultTaskId = memberView.DefaultTaskId; memberById.DateFormatId = memberView.DateFormatId; memberById.TimeZone = memberView.TimeZone; memberById.WeekStart = (WeekStart)memberView.WeekStart; memberById.IsWeeklyTimeEntryUpdatesSend = memberView.IsWeeklyTimeEntryUpdatesSend; memberById.TimeFormat = memberView.TimeFormat; memberById.SendEmailTime = memberView.SendEmailTime; memberById.SendEmailDays = ConverterBitMask.DayOfWeekStringToInt(memberView.SendEmailDays); try { Uow.MemberRepository.Update(memberById); if (Uow.Save() > 0) { UpdateUserClaims(memberById.Id); } Uow.MemberRepository.LinkedCacheClear(); } catch (Exception e) { Uow.MemberRepository.LinkedCacheClear(); throw new CoralTimeDangerException("An error occurred while updating member", e); } var memberByIdResult = Uow.MemberRepository.LinkedCacheGetById(memberById.Id); var result = memberByIdResult.GetView(Mapper); return(result); }
public Dictionary <string, object> Put([FromBody] ClienteOnline newClient) { if (newClient.Login == null || newClient.Password == null || newClient.Nome == null || newClient.Sobrenome == null) { Response.StatusCode = StatusCodes.Status400BadRequest; return(new Dictionary <string, object> { { "error", "MALFORMED_REQUEST_ERROR" }, }); } if (!EmailChecker.IsValidEmail(newClient.Login)) { Response.StatusCode = StatusCodes.Status400BadRequest; return(new Dictionary <string, object> { { "error", "EMAIL_INVALID_ERROR" }, }); } else if (newClient.Password.Length < 1) { return(new Dictionary <string, object> { { "error", "PASS_TOO_SHORT_ERROR" }, }); } else if (newClient.Nome.Length < 1) { return(new Dictionary <string, object> { { "error", "NAME_TOO_SHORT_ERROR" }, }); } else if (newClient.Sobrenome.Length < 1) { return(new Dictionary <string, object> { { "error", "SURNAME_TOO_SHORT_ERROR" }, }); } else { using ( SqlConnection connection = new SqlConnection(string.Format("User ID={0}; Password={1}; Initial Catalog={2}; Persist Security Info=True;Data Source={3}", Program.dbLogin, Program.dbPass, "dbSblenders", Program.dbEnv)) ) using ( SqlCommand insertAgentCommand = new SqlCommand("INSERT INTO tbAgente(tipoAgenteID, agenteLogin, agenteSenha, agenteSalt) VALUES(1, @login, @pass, @salt) SELECT CAST(SCOPE_IDENTITY() AS INT)", connection) ) { string salt = RandomGenerator.GenerateHexString(32); insertAgentCommand.Parameters.Add(new SqlParameter("@salt", salt)); insertAgentCommand.Parameters.Add(new SqlParameter("@login", newClient.Login)); insertAgentCommand.Parameters.Add(new SqlParameter("@pass", PasswordHasher.Hash(newClient.Password, salt))); connection.Open(); int agentID; try { agentID = (int)insertAgentCommand.ExecuteScalar(); } catch (SqlException ex) { if (ex.Number == 2601 || ex.Number == 2627) //ver se é unique violation { Response.StatusCode = StatusCodes.Status400BadRequest; return(new Dictionary <string, object> { { "error", "LOGIN_ALREADY_EXISTS_ERROR" } }); } else { Response.StatusCode = StatusCodes.Status500InternalServerError; return(new Dictionary <string, object> { { "error", "INTERNAL_ERROR" } }); } } using ( SqlCommand insertClientCommand = new SqlCommand("INSERT INTO tbClienteOnline(clienteOnlineNome, clienteOnlineSobrenome, clienteOnlineUrlVerifica, clienteOnlineVerificadoFlag, agenteID) VALUES(@name, @surname, @url, 0, @id)", connection) ) { string url = RandomGenerator.GenerateHexString(16); insertClientCommand.Parameters.Add(new SqlParameter("@name", newClient.Nome)); insertClientCommand.Parameters.Add(new SqlParameter("@surname", newClient.Sobrenome)); insertClientCommand.Parameters.Add(new SqlParameter("@url", url)); insertClientCommand.Parameters.Add(new SqlParameter("@id", agentID)); int rowsAffected = insertClientCommand.ExecuteNonQuery(); if (rowsAffected < 1) { Response.StatusCode = StatusCodes.Status500InternalServerError; return(new Dictionary <string, object> { { "error", "INTERNAL_ERROR" } }); } else { //mandar email aqui [email protected] wbBA6rgyGLQ5dPZ string htmlString = string.Format("<h1>Clique neste link para verificar sua conta, {0}:</h1><br/><a href='http://*****:*****@gmail.com"); message.To.Add(new MailAddress(newClient.Login)); message.Subject = "Verifique sua conta SBLENDERS"; message.IsBodyHtml = true; message.Body = htmlString; smtp.Port = 587; smtp.Host = "smtp.gmail.com"; smtp.EnableSsl = true; smtp.UseDefaultCredentials = false; smtp.Credentials = new NetworkCredential("*****@*****.**", "wbBA6rgyGLQ5dPZ"); smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Send(message); return(new Dictionary <string, object> { { "message", "SUCCESS" } }); } } } } }
public async Task <MemberView> CreateNewUser(MemberView memberView, string baseUrl) { if (!EmailChecker.IsValidEmail(memberView.Email)) { throw new CoralTimeDangerException("Invalid email"); } var applicationUserNew = new ApplicationUser { UserName = memberView.UserName, Email = memberView.Email, IsManager = false, IsActive = true, IsAdmin = memberView.IsAdmin }; var roleUser = memberView.IsAdmin ? ApplicationRoleAdmin : ApplicationRoleUser; #region Check ApplicationUser, Roles, Member // Check ApplicationUser var isExistApplicationUser = await _userManager.FindByNameAsync(memberView.UserName); if (isExistApplicationUser != null) { throw new CoralTimeAlreadyExistsException($"User with userName {memberView.UserName} already exist"); } // Check ApplicationUser Roles var isExistRolesForMember = await _userManager.GetRolesAsync(applicationUserNew).ToAsyncEnumerable().Any(x => x.Contains(roleUser)); if (isExistRolesForMember) { throw new CoralTimeAlreadyExistsException($"User with userName {memberView.UserName} already exist '{roleUser}' role"); } // Check Member var isExistMember = Uow.MemberRepository.GetQueryByUserName(applicationUserNew.UserName); if (isExistMember != null) { throw new CoralTimeAlreadyExistsException($"Member with userName {memberView.UserName} already exist"); } #endregion // Insert ApplicationUser var userCreationResult = await _userManager.CreateAsync(applicationUserNew, memberView.Password); if (!userCreationResult.Succeeded) { CheckIdentityResultErrors(userCreationResult); } var applicationUser = await _userManager.FindByNameAsync(applicationUserNew.UserName); // Insert ApplicationUser Roles var userCreateRoleResult = await _userManager.AddToRoleAsync(applicationUser, roleUser); if (!userCreateRoleResult.Succeeded) { CheckIdentityResultErrors(userCreateRoleResult); } #region Set UserId to new Member. Save to Db. Get Member from Db with related entity User by UserId. // 1. Convert MemberView to Member. var newMember = memberView.GetModel(Mapper); // 2. Assign UserId to Member (After Save, when you try to get entity from Db, before assign UserId to entity then it has Related Entity User). newMember.UserId = applicationUser.Id; // 3. Save in Db. Uow.MemberRepository.Insert(newMember); Uow.Save(); // 4. Clear cache for Members. Uow.MemberRepository.LinkedCacheClear(); // 5. Get From Db -> Cache New Member. (Get entity With new created related entity - User) var memberByName = Uow.MemberRepository.LinkedCacheGetByName(memberView.UserName); #endregion // Identity #3. Create claims. Add Claims for user in AspNetUserClaims. var claimsUser = ClaimsCreator.CreateUserClaims(applicationUser.UserName, memberView.FullName, memberView.Email, roleUser, memberByName.Id); var claimsUserResult = await _userManager.AddClaimsAsync(applicationUser, claimsUser); if (!claimsUserResult.Succeeded) { CheckIdentityResultErrors(userCreateRoleResult); } var urlIcon = _avatarService.GetUrlIcon(memberByName.Id); var memberViewResult = memberByName.GetView(Mapper, urlIcon); if (memberView.SendInvitationEmail) { await SentInvitationEmailAsync(memberView, baseUrl); } return(memberViewResult); }