private RegisterFileRepositaryEF RegisterFile(string userId, string fileName, string FileBase64Data) { if (string.IsNullOrEmpty(FileBase64Data)) { return(null); } RegisterFileRepositaryEF registerFile = new RegisterFileRepositaryEF(); registerFile.UserId = userId; registerFile.FileName = fileName; string[] splits = FileBase64Data.Split(','); if (splits.Length > 1) { registerFile.ContentsType = splits[0]; byte[] data = Convert.FromBase64String(splits[1]); registerFile.Contents = data; } else { registerFile.ContentsType = System.IO.Path.GetExtension(fileName).TrimStart('.'); byte[] data = Convert.FromBase64String(splits[0]); registerFile.Contents = data; } registerFile.CreateDT = DateTime.Now.Date; return(registerFile); }
private RegisterFileRepositaryEF RegisterFile(string userId, string fileName, string FileBase64Data) { if (string.IsNullOrEmpty(FileBase64Data)) { return(null); } RegisterFileRepositaryEF registerFile = new RegisterFileRepositaryEF(); registerFile.UserId = userId; registerFile.FileName = fileName; string[] splits = FileBase64Data.Split(','); registerFile.ContentsType = splits[0]; byte[] data = Convert.FromBase64String(splits[1]); registerFile.Contents = data; registerFile.CreateDT = DateTime.Now.Date; return(registerFile); }
//[ValidateAntiForgeryToken] public async Task <IActionResult> SignonContractor([FromBody] AggregatorRegistModelBase model) { if (ModelState.IsValid) { var trans = await _accountContext.Database.BeginTransactionAsync(); try { AggregatorGroupEF aggregatorGroup = await _accountContext.AggregatorGroups.FindAsync(model.AggregatorGroupId); if (aggregatorGroup == null) { IdentityError error = (_userManager.ErrorDescriber as LocalizedIdentityErrorDescriber).AggregatorNotFounded(model.AggregatorGroupId); IdentityResult _result = IdentityResult.Failed(error); return(base.BadRequest(new { Result = _result })); } var user = CreateUserAccount(model, RegisterType.Contrator); JObject obj = JObject.FromObject(user); var result = await _userManager.CreateAsync(user, model.Password); //result.Errors if (result.Succeeded) { ContractorUserEF cu = new ContractorUserEF(); cu.AggGroupId = aggregatorGroup.ID; cu.ContractStatus = ContractStatusCodes.Signing; cu.UserId = user.Id; _accountContext.ContractorUsers.Add(cu); RegisterFileRepositaryEF registerModel = null; if (string.IsNullOrEmpty(model.RegisterFilename) == false) { registerModel = RegisterFile(user.Id, model.RegisterFilename, model.RegisterFilebase64); _accountContext.RegisterFileRepositaries.Add(registerModel); } await _userManager.AddToRoleAsync(user, UserRoleTypes.Contractor); await _accountContext.SaveChangesAsync(); if (model.NotifyEmail) { string email_contents = htmlGenerator.GenerateHtml("NotifyEmail.html", new { Name = $"{user.FirstName} {user.LastName}", Company = model.Company, Email = model.Email, Phone = model.PhoneNumber, Address = model.Address, Aggregator = aggregatorGroup.AggName }); string sender = "PEIU 운영팀"; string target = ""; List <string> supervisor_emails = (await _userManager.GetUsersInRoleAsync(UserRoleTypes.Supervisor)).Select(x => x.Email).ToList(); target = "발전사업자"; var agg_result = _accountContext.VwAggregatorusers.Where(x => x.AggGroupId == model.AggregatorGroupId); supervisor_emails.AddRange(agg_result.Select(x => x.Email)); //var aggregator_account_users = await _userManager.GetUsersInRoleAsync(UserRoleTypes.Supervisor); await _emailSender.SendEmailAsync(sender, $"새로운 {target} 가입이 요청되었습니다", email_contents, registerModel, supervisor_emails.ToArray()); logger.LogInformation($"가입 알림 메일 전송: {string.Join(", ", supervisor_emails)}"); } trans.Commit(); return(Ok(new { Result = result })); //_userManager.find //if (user.AuthRoles == (int)AuthRoles.Aggregator || user.AuthRoles == (int)AuthRoles.Business) // await Publisher.PublishMessageAsync(obj.ToString(), cancellationTokenSource.Token); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link //var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); //var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); //await _emailSender.SendEmailAsync(model.Email, "Confirm your account", // "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>"); //await _signInManager.SignInAsync(user, isPersistent: false); //_logger.LogInformation(3, "User created a new account with password."); } else { trans.Dispose(); return(BadRequest(new { Result = result })); } } catch (Exception ex) { trans.Dispose(); logger.LogError(ex, ex.Message); throw; } } // If we got this far, something failed, redisplay form return(BadRequest()); }
//[ValidateAntiForgeryToken] public async Task <IActionResult> SignonAggregator([FromBody] AggregatorRegistModelBase model) { if (ModelState.IsValid) { var trans = await _accountContext.Database.BeginTransactionAsync(); try { AggregatorGroupEF aggregatorGroup = _accountContext.AggregatorGroups.FirstOrDefault(x => x.AggName == model.Company); if (aggregatorGroup == null) { aggregatorGroup = new AggregatorGroupEF(); aggregatorGroup.ID = Guid.NewGuid().ToString(); aggregatorGroup.AggName = model.Company; aggregatorGroup.Representation = ""; aggregatorGroup.Address = model.Address; aggregatorGroup.CreateDT = DateTime.Now; aggregatorGroup.PhoneNumber = model.PhoneNumber; await _accountContext.AddAsync(aggregatorGroup); } var user = CreateUserAccount(model, RegisterType.Aggregator); var result = await _userManager.CreateAsync(user, model.Password); //result.Errors if (result.Succeeded) { var role_add_result = await _userManager.AddToRoleAsync(user, UserRoleTypes.Aggregator); //_userManager.AddClaimAsync(user, new Claim()) AggregatorUserEF aggregatorUser = new AggregatorUserEF(); aggregatorUser.AggregatorGroup = aggregatorGroup; aggregatorUser.UserId = user.Id; await _accountContext.AggregatorUsers.AddAsync(aggregatorUser); RegisterFileRepositaryEF registerModel = null; if (string.IsNullOrEmpty(model.RegisterFilename) == false) { registerModel = RegisterFile(user.Id, model.RegisterFilename, model.RegisterFilebase64); _accountContext.RegisterFileRepositaries.Add(registerModel); } await _accountContext.SaveChangesAsync(); if (model.NotifyEmail) { string email_contents = htmlGenerator.GenerateHtml("NotifyEmail.html", new { Name = $"{user.FirstName} {user.LastName}", Company = model.Company, Email = model.Email, Phone = model.PhoneNumber, Address = model.Address, Aggregator = aggregatorGroup.AggName }); string sender = "PEIU 운영팀"; string target = ""; List <string> supervisor_emails = (await _userManager.GetUsersInRoleAsync(UserRoleTypes.Supervisor)).Select(x => x.Email).ToList(); target = "중개거래사업자"; var agg_result = _accountContext.VwAggregatorusers.Where(x => x.AggGroupId == model.AggregatorGroupId); supervisor_emails.AddRange(agg_result.Select(x => x.Email)); //var aggregator_account_users = await _userManager.GetUsersInRoleAsync(UserRoleTypes.Supervisor); await _emailSender.SendEmailAsync(sender, $"새로운 {target} 가입이 요청되었습니다", email_contents, registerModel, supervisor_emails.ToArray()); logger.LogInformation($"가입 알림 메일 전송: {string.Join(", ", supervisor_emails)}"); } trans.Commit(); return(Ok(new { Result = result })); } else { trans.Dispose(); return(BadRequest(new { Result = result })); } } catch (Exception ex) { trans.Dispose(); logger.LogError(ex, ex.Message); } } return(BadRequest()); }
public async Task SendEmailAsync(string email_sender, string subject, string message, RegisterFileRepositaryEF attachFile, params string[] emails) { try { if (emails.Length == 0) { return; } //await Task.CompletedTask; var mimeMessage = new MimeMessage(); mimeMessage.From.Add(new MailboxAddress(email_sender, _emailSettings.Sender)); IEnumerable <MailboxAddress> address = emails.Select(x => new MailboxAddress(x)); mimeMessage.To.AddRange(address); mimeMessage.Subject = subject; var bodyBuilder = new BodyBuilder(); if (attachFile != null) { bodyBuilder.Attachments.Add(attachFile.FileName, attachFile.Contents); } bodyBuilder.HtmlBody = message; mimeMessage.Body = bodyBuilder.ToMessageBody(); using (var client = new SmtpClient()) { // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS) client.ServerCertificateValidationCallback = (s, c, h, e) => true; await client.ConnectAsync(_emailSettings.MailServer, _emailSettings.MailPort, true); // Note: only needed if the SMTP server requires authentication await client.AuthenticateAsync(_emailSettings.Sender, _emailSettings.Password); await client.SendAsync(mimeMessage); Console.WriteLine($"이메일 전송: {string.Join(',', emails)}"); await client.DisconnectAsync(true); } } catch (Exception ex) { // TODO: handle exception throw new InvalidOperationException(ex.Message); } }