Esempio n. 1
0
        protected override void Seed(Rock.Data.RockContext context)
        {
            // Previous to Rock v4.0 the saved routing|account numbers in the PersonBankAccount table may have included
            // leading or trailing spaces for the routing number and/or account number. v4.0 trims these leading/trailing
            // spaces before looking for and saving the routing|account numbers. Because of this, any existing saved
            // values need to be updated so they don't include any spaces. This can probably be removed in a future update
            // after v4.0 -DT
            var txnService            = new Rock.Model.FinancialTransactionService(context);
            var personBankAcctService = new Rock.Model.FinancialPersonBankAccountService(context);

            foreach (string encryptedMicr in txnService
                     .Queryable()
                     .Where(t =>
                            t.CheckMicrParts != null &&
                            t.CheckMicrParts != "")
                     .Select(t => t.CheckMicrParts)
                     .Distinct())
            {
                if (!string.IsNullOrWhiteSpace(encryptedMicr))
                {
                    string clearMicr = Rock.Security.Encryption.DecryptString(encryptedMicr) ?? string.Empty;
                    var    parts     = clearMicr.Split('_');
                    if (parts.Length >= 2 && (parts[0] != parts[0].Trim() || parts[1] != parts[1].Trim()))
                    {
                        string oldHash = Rock.Security.Encryption.GetSHA1Hash(string.Format("{0}|{1}", parts[0], parts[1]));
                        string newHash = Rock.Security.Encryption.GetSHA1Hash(string.Format("{0}|{1}", parts[0].Trim(), parts[1].Trim()));

                        foreach (var match in personBankAcctService.Queryable().Where(a => a.AccountNumberSecured == oldHash))
                        {
                            match.AccountNumberSecured = newHash;
                        }

                        context.SaveChanges();
                    }
                }
            }

            // Previous to Rock v4.0 the PageViews didn't store Browser or OS info. This can probably be removed in a future update
            // after v4.0 -DT
            var pageViewRockContext      = new Rock.Data.RockContext();
            var pageViewUserAgentService = new Rock.Model.PageViewUserAgentService(pageViewRockContext);
            var qryPageViewUserAgent     = pageViewUserAgentService.Queryable().Where(a => a.Browser == null || a.OperatingSystem == null || a.ClientType == null);

            foreach (var pageViewUserAgent in qryPageViewUserAgent.Where(a => a.UserAgent != null))
            {
                try
                {
                    UAParser.Parser     uaParser = UAParser.Parser.GetDefault();
                    UAParser.ClientInfo client   = uaParser.Parse(pageViewUserAgent.UserAgent);
                    pageViewUserAgent.ClientType      = Rock.Model.PageViewUserAgent.GetClientType(pageViewUserAgent.UserAgent);
                    pageViewUserAgent.OperatingSystem = client.OS.ToString();
                    pageViewUserAgent.Browser         = client.UserAgent.ToString();
                }
                catch
                {
                    // shouldn't happen, but skip if unable to parse
                }
            }

            pageViewRockContext.SaveChanges(true);
        }