Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
        public ActionResult SaveNotificationToken(NotificationToken notificationToken)
        {
            var result = new ActionResult();

            this.Use(
                client => { result = client.SaveNotificationTokenAsync(notificationToken).Result; }
                );
            return(result);
        }
Beispiel #5
0
        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));
        }
Beispiel #8
0
        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);
            }
        }
Beispiel #9
0
        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"));
            }
        }
Beispiel #10
0
        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"));
            }
        }
Beispiel #11
0
 public Message(NotificationToken token)
 {
     Token = token;
 }