public async Task <object> PostNotificationToken(NotificationToken notificationToken) { try { notificationToken.SettingsId = (await _context.Settings.FirstOrDefaultAsync(x => x.ProjectKey == "KarikaturMadeni")).Id; } catch (Exception ex) { return(ex.Message); } if (await _context.NotificationToken.AnyAsync(x => x.Device == notificationToken.Device)) { NotificationToken result = await _context.NotificationToken.FirstOrDefaultAsync(x => x.Device == notificationToken.Device); result.UpdateDate = DateTime.Now; _context.Entry(result).State = EntityState.Modified; await _context.SaveChangesAsync(); return(-2); } _context.NotificationToken.Add(notificationToken); try { var result = await _context.SaveChangesAsync(); return(result); } catch (Exception ex) { return(ex.Message); } }
public async Task <IActionResult> Edit(Guid id, [Bind("Id,Token,Device,CreateDate")] NotificationToken notificationToken) { if (id != notificationToken.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(notificationToken); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!NotificationTokenExists(notificationToken.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(notificationToken)); }
public async Task <IActionResult> PutNotificationToken(Guid id, NotificationToken notificationToken) { if (id != notificationToken.Id) { return(BadRequest()); } _context.Entry(notificationToken).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!NotificationTokenExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public ActionResult SaveNotificationToken(NotificationToken notificationToken) { var result = new ActionResult(); this.Use( client => { result = client.SaveNotificationTokenAsync(notificationToken).Result; } ); return(result); }
public async Task <IActionResult> Create([Bind("Id,Token,Device,CreateDate")] NotificationToken notificationToken) { if (ModelState.IsValid) { notificationToken.Id = Guid.NewGuid(); _context.Add(notificationToken); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(notificationToken)); }
public async Task <ActionResult> PostNotificationToken(string connectionFierbaseId) { var user = await userManager.FindByIdAsync(User.FindFirst("Id")?.Value); var notificationToken = new NotificationToken { UserId = user.Id, connectionFierbaseId = connectionFierbaseId, Type = userManager.GetRolesAsync(user).Result.FirstOrDefault() }; _context.NotificationTokens.Add(notificationToken); _context.SaveChanges(); return(Ok()); }
public async Task <IActionResult> PostNotificationToken([FromBody] NotificationTokenRequestDTO notificationToken) { var claimSID = User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value; if (claimSID == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest, ErrorMessageEnum.杖中沒有發現指定使用者ID); return(BadRequest(apiResult)); } UserID = Convert.ToInt32(claimSID); var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID); if (fooUser == null) { apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound, ErrorMessageEnum.沒有發現指定的該使用者資料); return(NotFound(apiResult)); } NotificationToken NotificationToken = new NotificationToken() { OSType = (OSType)Enum.Parse(typeof(OSType), notificationToken.OSType.ToString()), RegistrationTime = notificationToken.RegistrationTime, Token = notificationToken.Token, User = fooUser, }; _context.NotificationTokens.Add(NotificationToken); await _context.SaveChangesAsync(); NotificationTokenResponseDTO NotificationTokenResponseDTO = new NotificationTokenResponseDTO() { OSType = notificationToken.OSType, RegistrationTime = notificationToken.RegistrationTime, Token = notificationToken.Token, User = new UserDTO() { Id = fooUser.Id }, }; apiResult = APIResultFactory.Build(true, StatusCodes.Status200OK, ErrorMessageEnum.None, payload: NotificationTokenResponseDTO); return(Ok(apiResult)); }
public async Task <ReturnValue> SaveToken([FromBody] NotificationToken context) { ReturnValue retVal = new ReturnValue(); using (TransactionScope scope = CollectorController.TransactionScopeUtils.CreateTransactionScope()) { try { db.NotificationTokens.Add(new NotificationToken() { CustomerId = context.CustomerId, RegistrationToken = context.RegistrationToken }); db.SaveChanges(); scope.Complete(); retVal.Status = true; } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; //scope.Dispose(); //retVal.Status = false; //throw; } return(retVal); } }
public async Task <IActionResult> EditUser([Bind("Username", "Name", "PhoneNumber", "EmailAddress", "Role")] UserDataManagementViewModel existingUser) { bool change = false; User identity = await _context.Users.Where(u => u.Username == existingUser.Username).FirstOrDefaultAsync(); if (identity == null) { return(StatusCode(404)); } else if (existingUser.PhoneNumber == null && existingUser.EmailAddress == null) { ViewData["Alert"] = "Danger"; ViewData["Message"] = "You must specify either a Phone Number or Email Address"; existingUser.user = identity; existingUser.allRoles = await _context.Roles.ToListAsync(); return(View(existingUser)); } else { NotificationToken token = new NotificationToken { Type = Models.Type.Verify, Vaild = true, LinkedUser = identity }; if (identity.Existence == Existence.Internal && !existingUser.Username.Equals(identity.Username)) { identity.Username = existingUser.Username; change = true; } if (identity.Existence == Existence.Internal && !existingUser.Name.Equals(identity.Name)) { identity.Name = existingUser.Name; change = true; } if (!existingUser.Role.Equals("User") && identity.Existence == Existence.Internal) { Role role = await _context.Roles.Where(r => r.RoleName == existingUser.Role).FirstOrDefaultAsync(); if (identity.LinkedRole != role) { identity.LinkedRole = role; change = true; } } else if (existingUser.Role.Equals("User") && identity.Existence == Existence.Internal && identity.LinkedRole != null) { identity.LinkedRole = null; change = true; } if (existingUser.PhoneNumber != null && (identity.PhoneNumber == null || !identity.PhoneNumber.Equals(existingUser.PhoneNumber)) && (identity.OverridableField == OverridableField.PhoneNumber || identity.OverridableField == OverridableField.Both)) { identity.PhoneNumber = existingUser.PhoneNumber; identity.VerifiedPhoneNumber = false; token.Token = Areas.Internal.Controllers.AccountController.TokenGenerator(); PublishRequest SNSrequest = new PublishRequest { Message = HttpContext.User.Claims.First(c => c.Type == "name").Value + " has changed the phone number on your account. To confirm this change, please click on this link: " + "https://" + HttpContext.Request.Host + "/Internal/Account/VerifyPhoneNumber?token=" + token.Token, PhoneNumber = "+65" + identity.PhoneNumber }; SNSrequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = new MessageAttributeValue { StringValue = "SmartIS", DataType = "String" }; SNSrequest.MessageAttributes["AWS.SNS.SMS.SMSType"] = new MessageAttributeValue { StringValue = "Transactional", DataType = "String" }; PublishResponse response = await _snsClient.PublishAsync(SNSrequest); if (response.HttpStatusCode != HttpStatusCode.OK) { return(StatusCode(500)); } token.Mode = Mode.SMS; _context.NotificationTokens.Add(token); change = true; } else if (existingUser.PhoneNumber == null && identity.PhoneNumber != null && (identity.OverridableField == OverridableField.PhoneNumber || identity.OverridableField == OverridableField.Both)) { identity.PhoneNumber = null; identity.VerifiedPhoneNumber = false; change = true; } if (existingUser.EmailAddress != null && (identity.EmailAddress == null || !identity.EmailAddress.Equals(existingUser.EmailAddress)) && (identity.OverridableField == OverridableField.EmailAddress || identity.OverridableField == OverridableField.Both)) { identity.EmailAddress = existingUser.EmailAddress; identity.VerifiedEmailAddress = false; token.Token = Areas.Internal.Controllers.AccountController.TokenGenerator(); SendEmailRequest SESrequest = new SendEmailRequest { Source = Environment.GetEnvironmentVariable("SES_EMAIL_FROM-ADDRESS"), Destination = new Destination { ToAddresses = new List <string> { identity.EmailAddress } }, Message = new Message { Subject = new Content("Verify your email address for SmartInsights"), Body = new Body { Text = new Content { Charset = "UTF-8", Data = "Hi " + identity.Name + ",\r\n\n" + HttpContext.User.Claims.First(c => c.Type == "name").Value + " has changed the email address on your account. To confirm this change, please click on this link: " + "https://" + HttpContext.Request.Host + "/Internal/Account/VerifyEmailAddress?token=" + token.Token + "\r\n\n\nThis is a computer-generated email, please do not reply" } } } }; SendEmailResponse response = await _sesClient.SendEmailAsync(SESrequest); if (response.HttpStatusCode != HttpStatusCode.OK) { return(StatusCode(500)); } token.Mode = Mode.EMAIL; _context.NotificationTokens.Add(token); change = true; } else if (existingUser.EmailAddress == null && identity.EmailAddress != null && (identity.OverridableField == OverridableField.EmailAddress || identity.OverridableField == OverridableField.Both)) { identity.EmailAddress = null; identity.VerifiedEmailAddress = false; change = true; } _context.Users.Update(identity); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { ViewData["Alert"] = "Danger"; ViewData["Message"] = "Something went wrong. Maybe try again?"; return(View(existingUser)); } if (change) { TempData["Message"] = "Succesfully edited " + identity.Name + "'s account details"; TempData["Alert"] = "Success"; } else { TempData["Message"] = "No changes made to " + identity.Name + "'s account details"; TempData["Alert"] = "Warning"; } return(RedirectToAction("Manage")); } }
public async Task <IActionResult> CreateUser([Bind("Username", "Name", "PhoneNumber", "EmailAddress", "Role")] UserDataManagementViewModel newUser) { if (newUser.PhoneNumber == null && newUser.EmailAddress == null) { ViewData["Alert"] = "Danger"; ViewData["Message"] = "You must specify either a Phone Number or Email Address"; newUser.allRoles = await _context.Roles.ToListAsync(); return(View(newUser)); } else { User addition = new User { Username = newUser.Username, Name = newUser.Name, Existence = Existence.Internal, Password = Password.GetRandomSalt(), Status = UserStatus.Pending, OverridableField = OverridableField.Both }; if (!newUser.Role.Equals("User")) { Role role = await _context.Roles.Where(r => r.RoleName == newUser.Role).FirstOrDefaultAsync(); addition.LinkedRole = role; } if (newUser.PhoneNumber == null) { addition.EmailAddress = newUser.EmailAddress; } else { addition.PhoneNumber = newUser.PhoneNumber; } _context.Users.Add(addition); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { ViewData["Alert"] = "Danger"; ViewData["Message"] = "Something went wrong. Maybe try again?"; return(View(newUser)); } addition = await _context.Users.Where(u => u.Username == newUser.Username).FirstOrDefaultAsync(); Settings settings = new Settings { LinkedUserID = addition.ID, LinkedUser = addition }; await _context.Settings.AddAsync(settings); NotificationToken token = new NotificationToken { Type = Models.Type.Activate, Vaild = true, LinkedUser = addition }; if (addition.EmailAddress != null) { token.Token = Areas.Internal.Controllers.AccountController.TokenGenerator(); SendEmailRequest SESrequest = new SendEmailRequest { Source = Environment.GetEnvironmentVariable("SES_EMAIL_FROM-ADDRESS"), Destination = new Destination { ToAddresses = new List <string> { addition.EmailAddress } }, Message = new Message { Subject = new Content("Welcome to SmartInsights"), Body = new Body { Text = new Content { Charset = "UTF-8", Data = "Hi " + addition.Name + ",\r\n\n" + HttpContext.User.Claims.First(c => c.Type == "name").Value + " has created an account for you on SmartInsights. Your username to login is:\r\n" + addition.Username + "\r\n\nTo enable your account, you will need to set your password and verify this email address. Please click on this link: " + "https://" + HttpContext.Request.Host + "/Internal/Account/SetPassword?token=" + token.Token + " to do so.\r\n\n\nThis is a computer-generated email, please do not reply" } } } }; SendEmailResponse response = await _sesClient.SendEmailAsync(SESrequest); if (response.HttpStatusCode != HttpStatusCode.OK) { return(StatusCode(500)); } token.Mode = Mode.EMAIL; } else { PublishRequest SNSrequest = new PublishRequest { Message = HttpContext.User.Claims.First(c => c.Type == "name").Value + " has created an account for you on SmartInsights. Your username to login is: " + addition.Username + ". Please click on this link to set your password and verify this phone number: " + "https://" + HttpContext.Request.Host + "/Internal/Account/SetPassword?token=" + token.Token, PhoneNumber = "+65" + addition.PhoneNumber }; SNSrequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = new MessageAttributeValue { StringValue = "SmartIS", DataType = "String" }; SNSrequest.MessageAttributes["AWS.SNS.SMS.SMSType"] = new MessageAttributeValue { StringValue = "Transactional", DataType = "String" }; PublishResponse response = await _snsClient.PublishAsync(SNSrequest); if (response.HttpStatusCode != HttpStatusCode.OK) { return(StatusCode(500)); } token.Mode = Mode.SMS; } await _context.NotificationTokens.AddAsync(token); await _context.SaveChangesAsync(); TempData["Message"] = "Succesfully created " + addition.Name + "'s account. Please ask " + addition.Name + " to look at the email/SMS to activate the account"; TempData["Alert"] = "Success"; return(RedirectToAction("Manage")); } }
public Message(NotificationToken token) { Token = token; }