Ejemplo n.º 1
0
        public ActionResult HandleUpdateSettingForm(UpdateSettingModel formData)
        {
            string username = HttpContext.User.Identity.Name;
            string usersid  = UserInfo.UserNameToSID(username);

            if (username != formData.username || usersid != formData.sid)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
            }

            if (formData.submit == "Sign Up")
            {
                HandleSignUp(formData);
            }
            else if (formData.submit == "Update")
            {
                HandleUpdate(formData);
            }
            else if (formData.submit == "Unsubscribe")
            {
                HandleUnsubscribe(formData);
            }

            return(RedirectToAction("UpdateSettings"));
        }
Ejemplo n.º 2
0
 public async Task <IActionResult> Edit(UpdateSettingModel model)
 {
     if (!await SettingSvc.UpdateAsync(model))
     {
         return(Json(new AjaxResult {
             Status = "error", ErrorMsg = SettingSvc.ErrorMsg
         }));
     }
     return(Json(new AjaxResult {
         Status = "ok"
     }));
 }
Ejemplo n.º 3
0
        private void UpdateUserAccountAssetGroup(ConfirmableUserAccount userAccount, UpdateSettingModel formData)
        {
            using (DataContext dataContext = new DataContext("dbOpenXDA"))
            {
                // update link to asset group
                TableOperations <UserAccountAssetGroup> userAccountAssetGroupTable = dataContext.Table <UserAccountAssetGroup>();
                IEnumerable <UserAccountAssetGroup>     userAccountAssetGroups     = userAccountAssetGroupTable.QueryRecordsWhere("UserAccountID = {0}", userAccount.ID);
                IEnumerable <int> assetGroups = userAccountAssetGroups.Select(x => x.AssetGroupID);

                // formData will come back as null instead of empty array ....
                if (formData.region == null)
                {
                    formData.region = new List <int>();
                }

                // First pass. Add Link in database if the link does not exist.
                foreach (int id in formData.region)
                {
                    if (!assetGroups.Contains(id))
                    {
                        UserAccountAssetGroup userAccountAssetGroup = new UserAccountAssetGroup();

                        userAccountAssetGroup.UserAccountID = userAccount.ID;
                        userAccountAssetGroup.AssetGroupID  = id;
                        userAccountAssetGroup.Dashboard     = true;
                        userAccountAssetGroup.Email         = true;
                        userAccountAssetGroupTable.AddNewRecord(userAccountAssetGroup);
                    }
                    else
                    {
                        UserAccountAssetGroup userAccountAssetGroup = userAccountAssetGroups.Where(x => x.AssetGroupID == id).First();
                        if (!userAccountAssetGroup.Dashboard || !userAccountAssetGroup.Email)
                        {
                            userAccountAssetGroup.Dashboard = true;
                            userAccountAssetGroup.Email     = true;
                            userAccountAssetGroupTable.UpdateRecord(userAccountAssetGroup);
                        }
                    }
                }

                userAccountAssetGroups = userAccountAssetGroupTable.QueryRecordsWhere("UserAccountID = {0}", userAccount.ID);

                // Second pass. Remove Link if the link does not exist in data from form.
                foreach (UserAccountAssetGroup link in userAccountAssetGroups)
                {
                    if (!formData.region.Contains(link.AssetGroupID))
                    {
                        userAccountAssetGroupTable.DeleteRecord(link);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void HandleUpdate(UpdateSettingModel formData)
        {
            using (DataContext dataContext = new DataContext("dbOpenXDA"))
                using (AdoDataConnection connection = new AdoDataConnection("systemSettings"))
                {
                    TableOperations <ConfirmableUserAccount> userAccountTable = dataContext.Table <ConfirmableUserAccount>();
                    ConfirmableUserAccount userAccount = userAccountTable.QueryRecordWhere("Name = {0}", formData.sid);
                    string url = connection.ExecuteScalar <string>("SELECT AltText1 FROM ValueList WHERE Text = 'URL' AND GroupID = (SELECT ID FROM ValueListGroup WHERE Name = 'System')");
                    string emailServiceName = GetEmailServiceName();
                    string recipient, subject, body;

                    // if phone changed force reconfirmation
                    if (userAccount.Phone != formData.phone + "@" + formData.carrier)
                    {
                        userAccount.Phone          = formData.phone;
                        userAccount.PhoneConfirmed = false;

                        if (!string.IsNullOrEmpty(formData.phone))
                        {
                            userAccount.Phone += $"@{formData.carrier}";

                            // generate code for sms confirmation
                            string code = Random.Int32Between(0, 999999).ToString("D6");
                            s_memoryCache.Set("sms" + userAccount.ID.ToString(), code, new CacheItemPolicy {
                                SlidingExpiration = TimeSpan.FromDays(1)
                            });

                            recipient = userAccount.Phone;
                            subject   = $"{emailServiceName} requires you to confirm your SMS number.";
                            body      = $"From your workstation, input {code} at {url}/email/verify/sms";
                            SendEmail(recipient, subject, body);
                        }
                    }

                    userAccountTable.UpdateRecord(userAccount);

                    UpdateUserAccountAssetGroup(userAccount, formData);
                    UpdateUserAccountEmailType(userAccount, formData.job, false);
                    UpdateUserAccountEmailType(userAccount, formData.sms, true);

                    recipient = userAccount.Email;
                    subject   = $"{emailServiceName} subscriptions updated";
                    body      = $"Your {emailServiceName} subscriptions have been updated. Visit {url}/email/UpdateSettings to review your subscriptions.";
                    SendEmail(recipient, subject, body);
                }
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Post(UpdateSettingModel model)
        {
            var en = await SettingSvc.GetByKeyAsync(model.KeyPari);

            if (en != null)
            {
                if (en.Id != model.Id)
                {
                    return(new JsonResult(new APIResult <long> {
                        ErrorMsg = "key存在"
                    })
                    {
                        StatusCode = 400
                    });
                }
            }
            await SettingSvc.UpdateAsync(model.Id, model.KeyPari, model.Key, model.Value);

            return(Ok());
        }
Ejemplo n.º 6
0
        private void HandleSignUp(UpdateSettingModel formData)
        {
            UserInfo userInfo = new UserInfo(System.Web.HttpContext.Current.User.Identity.Name);

            userInfo.Initialize();
            //// Create new user
            m_dataContext.Connection.ExecuteNonQuery("INSERT INTO UserAccount (Name, Email, EmailConfirmed, FirstName, LastName) VALUES ({0}, {1}, {2}, {3}, {4})", formData.sid, userInfo.Email, true, userInfo.FirstName, userInfo.LastName);

            HandleUpdate(formData);

            // email system admin for approval
            ConfirmableUserAccount    user        = m_dataContext.Table <ConfirmableUserAccount>().QueryRecordWhere("Name = {0}", formData.sid);
            IEnumerable <AssetGroup>  assetGroup  = m_dataContext.Table <AssetGroup>().QueryRecordsWhere($"ID IN ({string.Join(",", formData.region)})", formData.region);
            IEnumerable <EmailType>   emailType   = m_dataContext.Table <EmailType>().QueryRecordsWhere($"ID IN ({string.Join(",", formData.job)})");
            IEnumerable <XSLTemplate> xslTemplate = m_dataContext.Table <XSLTemplate>().QueryRecordsWhere($"ID IN ({string.Join(",", emailType.Select(x => x.XSLTemplateID))})");
            string url              = m_dataContext.Connection.ExecuteScalar <string>("SELECT Value FROM DashSettings WHERE Name = 'System.URL'");
            string admin            = m_dataContext.Connection.ExecuteScalar <string>("SELECT Value FROM Setting WHERE Name = 'Email.AdminAddress'");
            string templateName     = (xslTemplate.Any() ? string.Join(", ", xslTemplate.Select(x => x.Name)) : "None");
            string regionName       = (assetGroup.Any() ? string.Join(", ", assetGroup.Select(x => x.Name)) : "None");
            string emailServiceName = GetEmailServiceName();
            string subject          = $"{formData.username} requests access to the {emailServiceName}.";
            string body             = @"
                <html>
                    <p>" + formData.username + @" requests access to the " + emailServiceName + @".</p>
                    <table>
                        <tr><td>Email:</td><td>" + userInfo.Email + @"</td></tr>
                        <tr><td>Name:</td><td>" + userInfo.FirstName + " " + userInfo.LastName + @"</td></tr>
                        <tr><td>Phone:</td><td>" + formData.phone + @"</td></tr>
                        <tr><td>Region:</td><td>" + regionName + @"</td></tr>
                        <tr><td>Job:</td><td>" + templateName + @"</td></tr>
                    </table>
                    <a href='" + url + @"/email/approveuser/" + user.ID + @"'>Approve</a>
                    <a href='" + url + @"/email/denyuser/" + user.ID + @"'>Deny</a>
                </html>
            ";

            if (!string.IsNullOrEmpty(admin))
            {
                SendEmail(admin, subject, body);
            }
        }
Ejemplo n.º 7
0
        private void HandleUpdate(UpdateSettingModel formData)
        {
            TableOperations <ConfirmableUserAccount> userAccountTable = m_dataContext.Table <ConfirmableUserAccount>();
            ConfirmableUserAccount userAccount = userAccountTable.QueryRecordWhere("Name = {0}", formData.sid);
            string url = m_dataContext.Connection.ExecuteScalar <string>("SELECT Value FROM DashSettings WHERE Name = 'System.URL'");
            string emailServiceName = GetEmailServiceName();
            string recipient, subject, body;

            string phone   = formData.phone;
            string carrier = formData.carrier;

            if (!string.IsNullOrEmpty(phone) && !string.IsNullOrEmpty(carrier) && carrier != "0")
            {
                phone                      = new string(formData.phone.Where(char.IsDigit));
                userAccount.Phone          = $"{phone}@{carrier}";
                userAccount.PhoneConfirmed = false;

                // generate code for sms confirmation
                string code = Random.Int32Between(0, 999999).ToString("D6");
                s_memoryCache.Set("sms" + userAccount.ID.ToString(), code, new CacheItemPolicy {
                    SlidingExpiration = TimeSpan.FromDays(1)
                });

                recipient = userAccount.Phone;
                subject   = $"{emailServiceName} requires you to confirm your SMS number.";
                body      = $"From your workstation, input {code} at {url}/email/verify/sms";
                SendEmail(recipient, subject, body);
            }

            userAccountTable.UpdateRecord(userAccount);

            UpdateUserAccountAssetGroup(userAccount, formData);
            UpdateUserAccountEmailType(userAccount, formData.job, false);
            UpdateUserAccountEmailType(userAccount, formData.sms, true);

            recipient = userAccount.Email;
            subject   = $"{emailServiceName} subscriptions updated";
            body      = $"Your {emailServiceName} subscriptions have been updated. Visit {url}/email/UpdateSettings to review your subscriptions.";
            SendEmail(recipient, subject, body);
        }
Ejemplo n.º 8
0
 private void HandleUnsubscribe(UpdateSettingModel formData)
 {
     formData.job = new List <int>();
     formData.sms = new List <int>();
     HandleUpdate(formData);
 }
Ejemplo n.º 9
0
        private void HandleSignUp(UpdateSettingModel formData)
        {
            using (DataContext dataContext = new DataContext("dbOpenXDA"))
                using (AdoDataConnection connection = new AdoDataConnection("systemSettings"))
                {
                    UserInfo userInfo = new UserInfo(System.Web.HttpContext.Current.User.Identity.Name);
                    userInfo.Initialize();
                    //// Create new user
                    dataContext.Connection.ExecuteNonQuery("INSERT INTO UserAccount (Name, Email, EmailConfirmed, FirstName, LastName) VALUES ({0}, {1}, {2}, {3}, {4})", formData.sid, userInfo.Email, true, userInfo.FirstName, userInfo.LastName);

                    HandleUpdate(formData);

                    // email system admin for approval
                    ConfirmableUserAccount user = dataContext.Table <ConfirmableUserAccount>().QueryRecordWhere("Name = {0}", formData.sid);

                    IEnumerable <int> regionData = formData.region ?? Enumerable.Empty <int>();
                    IEnumerable <int> jobData    = formData.job ?? Enumerable.Empty <int>();
                    IEnumerable <int> smsData    = formData.sms ?? Enumerable.Empty <int>();

                    string assetGroupIDList   = string.Join(",", regionData);
                    string emailTypeIDList    = string.Join(",", jobData);
                    string smsEmailTypeIDList = string.Join(",", smsData);

                    IEnumerable <AssetGroup>  assetGroup    = Enumerable.Empty <AssetGroup>();
                    IEnumerable <XSLTemplate> emailTemplate = Enumerable.Empty <XSLTemplate>();
                    IEnumerable <XSLTemplate> smsTemplate   = Enumerable.Empty <XSLTemplate>();

                    if (assetGroupIDList.Length > 0)
                    {
                        assetGroup = dataContext.Table <AssetGroup>().QueryRecordsWhere($"ID IN ({assetGroupIDList})");
                    }

                    if (emailTypeIDList.Length > 0)
                    {
                        emailTemplate = dataContext.Table <XSLTemplate>().QueryRecordsWhere($"ID IN (SELECT XSLTemplateID FROM EmailType WHERE ID IN ({emailTypeIDList}))");
                    }

                    if (smsEmailTypeIDList.Length > 0)
                    {
                        smsTemplate = dataContext.Table <XSLTemplate>().QueryRecordsWhere($"ID IN (SELECT XSLTemplateID FROM EmailType WHERE ID IN ({smsEmailTypeIDList}))");
                    }

                    string url               = connection.ExecuteScalar <string>("SELECT AltText1 FROM ValueList WHERE Text = 'URL' AND GroupID = (SELECT ID FROM ValueListGroup WHERE Name = 'System')");
                    string admin             = dataContext.Connection.ExecuteScalar <string>("SELECT Value FROM Setting WHERE Name = 'Email.AdminAddress'");
                    string emailTemplateName = (emailTemplate.Any() ? string.Join(", ", emailTemplate.Select(x => x.Name)) : "None");
                    string smsTemplateName   = (smsTemplate.Any() ? string.Join(", ", smsTemplate.Select(x => x.Name)) : "None");
                    string regionName        = (assetGroup.Any() ? string.Join(", ", assetGroup.Select(x => x.Name)) : "None");
                    string emailServiceName  = GetEmailServiceName();
                    string subject           = $"{formData.username} requests access to the {emailServiceName}.";
                    string body              = @"
                <html>
                    <p>" + formData.username + @" requests access to the " + emailServiceName + @".</p>
                    <table>
                        <tr><td>Email:</td><td>" + userInfo.Email + @"</td></tr>
                        <tr><td>Name:</td><td>" + userInfo.FirstName + " " + userInfo.LastName + @"</td></tr>
                        <tr><td>Phone:</td><td>" + formData.phone + @"</td></tr>
                        <tr><td>Region:</td><td>" + regionName + @"</td></tr>
                        <tr><td>Email Template:</td><td>" + emailTemplateName + @"</td></tr>
                        <tr><td>SMS Template:</td><td>" + smsTemplateName + @"</td></tr>
                    </table>
                    <a href='" + url + @"/email/approveuser/" + user.ID + @"'>Approve</a>
                    <a href='" + url + @"/email/denyuser/" + user.ID + @"'>Deny</a>
                </html>
            ";

                    if (!string.IsNullOrEmpty(admin))
                    {
                        SendEmail(admin, subject, body);
                    }
                }
        }
 public async Task <bool> UpdateAsync(UpdateSettingModel model)
 {
     return(await UpdateAsync <UpdateSettingModel>(model));
 }