/// <summary>
 /// Takes the given text and encrypts it using the given password.
 /// </summary>
 /// <param name="textToEncrypt">Text to encrypt.</param>
 /// <param name="encryptionPassword">Encryption password.</param>
 /// <returns>The encrypted text.</returns>
 public static string Encrypt(
     string textToEncrypt, string encryptionPassword)
 {
     return(AESGCM.SimpleEncryptWithPassword(
                textToEncrypt, encryptionPassword));
 }
 /// <summary>
 /// Takes the given encrypted text and decrypts it
 /// using the given password.
 /// </summary>
 /// <param name="encryptedText">Encrypted text.</param>
 /// <param name="encryptionPassword">Encryption password.</param>
 /// <returns>The decrypted text.</returns>
 public static string Decrypt(
     string encryptedText, string encryptionPassword)
 {
     return(AESGCM.SimpleDecryptWithPassword(
                encryptedText, encryptionPassword));
 }
Exemplo n.º 3
0
        public static void ImportEmailFile()
        {
            Log.Append("Application initialized");

            TimeSpan startTime = DateTime.Now.TimeOfDay;

            Log.Append("Caching email list...");

            try
            {
                string[] emailFiles = Directory.GetFiles(cacheDirectoryPath, "*.cfg*");

                if (emailFiles.Length <= 0)
                {
                    RegenerateCacheFile();
                }

                foreach (string filePath in emailFiles)
                {
                    var      text  = File.ReadAllText(filePath);
                    string[] lines = AESGCM.SimpleDecryptWithPassword(text, AESGCM.AES256Key)
                                     .Split(new[] { Environment.NewLine }, StringSplitOptions.None);

                    // Load email information
                    foreach (string line in lines)
                    {
                        if (line.Contains("[EM_ID_]="))
                        {
                            Email email = new Email()
                            {
                                ID           = Parser.Parse(line, "EM_ID_"),
                                UID          = Parser.Parse(line, "EM_UI_"),
                                To           = Parser.Parse(line, "EM_TO_"),
                                From         = Parser.Parse(line, "EM_FR_"),
                                Subject      = Parser.Parse(line, "EM_SU_"),
                                EmailMessage = "", // prevent nullification
                                MailDate     = Convert.ToDateTime(Parser.Parse(line, "EM_MD_"))
                            };

                            // For testing, local does not read emails
                            //email.RetrieveMsg();

                            EmailList.Add(email);

                            email.MapNameFromEmail();
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RegenerateCacheFile();
            }

            // Retrieve all messages in background
            Task.Run(() => ReadAllEmailMessages());

            // Sort by date
            EmailList = EmailList.OrderByDescending(x => x.MailDate).ToList();

            Log.Append(String.Format("Cached {1} emails! Process took {0}",
                                     Arithmetic.GetStopWatchStr((DateTime.Now.TimeOfDay - startTime).TotalMilliseconds), EmailList.Count));

            GetEmailCounts();
        }
Exemplo n.º 4
0
        public Contracts.JobTypes.Ftp.Model.FtpDownloadJob Get(Guid id)
        {
            Logger.Debug("Entered FtpJobsController.Get().");

            IJobDetail jobDetail;

            try
            {
                jobDetail = _schedulerCore.GetJobDetail(id);
            }
            catch (Exception ex)
            {
                Logger.WarnFormat("Error getting JobDetail: {0}", ex.Message);
                return(null);
            }

            string username = jobDetail.JobDataMap.GetString("userName");
            string password = jobDetail.JobDataMap.GetString("password");
            string sshPrivateKeyPassword = jobDetail.JobDataMap.GetString("sshPrivateKeyPassword");

            try
            {
                if (new EncryptionFeatureToggle().FeatureEnabled)
                {
                    username = AESGCM.SimpleDecrypt(username, Convert.FromBase64String(ConfigurationManager.AppSettings["SchedulerEncryptionKey"]));

                    if (!string.IsNullOrEmpty(password))
                    {
                        password = AESGCM.SimpleDecrypt(password, Convert.FromBase64String(ConfigurationManager.AppSettings["SchedulerEncryptionKey"]));
                    }

                    if (!string.IsNullOrEmpty(sshPrivateKeyPassword))
                    {
                        sshPrivateKeyPassword = AESGCM.SimpleDecrypt(sshPrivateKeyPassword, Convert.FromBase64String(ConfigurationManager.AppSettings["SchedulerEncryptionKey"]));
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Warn("ConfigurationError getting FtpDownload job.", ex);
            }

            return(new Contracts.JobTypes.Ftp.Model.FtpDownloadJob
            {
                Id = id,
                JobName = jobDetail.Key.Name,
                JobGroup = jobDetail.Key.Group,
                SchedulerName = _schedulerCore.SchedulerName,
                FtpHost = jobDetail.JobDataMap.GetString("ftpHost"),
                ServerPort = jobDetail.JobDataMap.GetString("serverPort"),
                Username = username,
                Password = password,
                LocalDirectoryPath = jobDetail.JobDataMap.GetString("localDirectoryPath"),
                RemoteDirectoryPath = jobDetail.JobDataMap.GetString("remoteDirectoryPath"),
                FileExtensions = jobDetail.JobDataMap.GetString("fileExtensions"),
                CutOffTimeSpan = jobDetail.JobDataMap.GetString("cutOffTimeSpan"),
                Description = jobDetail.Description,
                SshPrivateKeyPath = jobDetail.JobDataMap.GetString("sshPrivateKeyPath"),
                SshPrivateKeyPassword = sshPrivateKeyPassword
            });
        }
Exemplo n.º 5
0
        public IActionResult Post(object encryptObject)
        {
            using (var dbContextTransaction = _dbContext.Database.BeginTransaction())
            {
                try
                {
                    IHeaderDictionary headers     = _httpContextAccessor.HttpContext.Request.Headers;
                    string            accessToken = headers.Where(x => x.Key == "Authorization").Select(x => x.Value).FirstOrDefault();
                    if (string.IsNullOrEmpty(accessToken))
                    {
                        return(BadRequest("Invalid Authorization"));
                    }

                    accessToken = accessToken.Substring(7);

                    string          jsonString = AESGCM.Decrypt(encryptObject.ToString(), accessToken);
                    ApplicationUser input      = JsonConvert.DeserializeObject <ApplicationUser>(jsonString);

                    ApplicationUser user = _dbContext.Users
                                           .Include("Claims")
                                           .Include("Logins")
                                           .Include("Tokens")
                                           .Include("RoleClaims")
                                           //.Include("RoleClaims.User")
                                           .Include("RoleClaims.Role")
                                           .Include("RoleClaims.RoleClaim")
                                           .Include("RoleClaims.History")
                                           .Include("RoleClaims.History.ActionBy")
                                           //.Include("RoleClaims.History.UserRoleClaim")
                                           .Where(x => x.Id == input.Id)
                                           .FirstOrDefault();

                    if (user != null)
                    {
                        if (user.AccessFailedCount != input.AccessFailedCount)
                        {
                            user.AccessFailedCount = input.AccessFailedCount;
                        }
                        if (user.ApprovedById != input.ApprovedById)
                        {
                            user.ApprovedById = input.ApprovedById;
                        }
                        if (user.ApprovedDate != input.ApprovedDate)
                        {
                            user.ApprovedDate = input.ApprovedDate;
                        }
                        if (user.ConcurrencyStamp != input.ConcurrencyStamp)
                        {
                            user.ConcurrencyStamp = input.ConcurrencyStamp;
                        }
                        if (user.Email != input.Email)
                        {
                            user.Email           = input.Email;
                            user.NormalizedEmail = input.Email.Trim().ToUpper();
                        }
                        if (user.EmailConfirmed != input.EmailConfirmed)
                        {
                            user.EmailConfirmed = input.EmailConfirmed;
                        }
                        if (user.UserName != input.UserName)
                        {
                            user.UserName           = input.UserName;
                            user.NormalizedUserName = input.UserName.Trim().ToUpper();
                        }
                        if (user.FirstName != input.FirstName)
                        {
                            user.FirstName = input.FirstName;
                        }
                        if (user.LastName != input.LastName)
                        {
                            user.LastName = input.LastName;
                        }
                        if (user.LockoutEnabled != input.LockoutEnabled)
                        {
                            user.LockoutEnabled = input.LockoutEnabled;
                        }
                        if (user.LockoutEnd != input.LockoutEnd)
                        {
                            user.LockoutEnd = input.LockoutEnd;
                        }
                        if (user.PasswordHash != input.PasswordHash)
                        {
                            user.PasswordHash = input.PasswordHash;
                        }
                        if (user.PhoneNumber != input.PhoneNumber)
                        {
                            user.PhoneNumber = input.PhoneNumber;
                        }
                        if (user.PhoneNumberConfirmed != input.PhoneNumberConfirmed)
                        {
                            user.PhoneNumberConfirmed = input.PhoneNumberConfirmed;
                        }
                        if (user.RequestDate != input.RequestDate)
                        {
                            user.RequestDate = input.RequestDate;
                        }
                        if (user.RevokedById != input.RevokedById)
                        {
                            user.RevokedById = input.RevokedById;
                        }
                        if (user.RevokedDate != input.RevokedDate)
                        {
                            user.RevokedDate = input.RevokedDate;
                        }
                        if (user.TwoFactorEnabled != input.TwoFactorEnabled)
                        {
                            user.TwoFactorEnabled = input.TwoFactorEnabled;
                        }

                        // remove Claims
                        foreach (IdentityUserClaim <string> userClaim in user.Claims.ToArray())
                        {
                            var inputClaim = input.Claims
                                             .Where(x => x.ClaimType.Trim().ToUpper() == userClaim.ClaimType.Trim().ToUpper() && x.ClaimValue.Trim().ToUpper() == userClaim.ClaimValue.Trim().ToUpper())
                                             .FirstOrDefault();

                            if (inputClaim == null)
                            {
                                user.Claims.Remove(userClaim);
                                _dbContext.Entry(userClaim).State = EntityState.Deleted;
                            }
                        }

                        // add Claims
                        foreach (IdentityUserClaim <string> inputClaim in input.Claims)
                        {
                            var userClaim = user.Claims.ToArray()
                                            .Where(x => x.ClaimType.Trim().ToUpper() == inputClaim.ClaimType.Trim().ToUpper() && x.ClaimValue.Trim().ToUpper() == inputClaim.ClaimValue.Trim().ToUpper())
                                            .FirstOrDefault();

                            if (userClaim == null)
                            {
                                user.Claims.Add(inputClaim);
                            }
                        }

                        // remove Logins
                        foreach (IdentityUserLogin <string> userLogin in user.Logins.ToArray())
                        {
                            var inputLogin = input.Logins
                                             .Where(x => x.LoginProvider.Trim().ToUpper() == userLogin.LoginProvider.Trim().ToUpper() && x.ProviderKey.Trim().ToUpper() == userLogin.ProviderKey.Trim().ToUpper())
                                             .FirstOrDefault();

                            if (inputLogin == null)
                            {
                                user.Logins.Remove(userLogin);
                                _dbContext.Entry(userLogin).State = EntityState.Deleted;
                            }
                        }

                        // add Logins
                        foreach (IdentityUserLogin <string> inputLogin in input.Logins)
                        {
                            var userLogin = user.Logins.ToArray()
                                            .Where(x => x.LoginProvider.Trim().ToUpper() == inputLogin.LoginProvider.Trim().ToUpper() && x.ProviderKey.Trim().ToUpper() == inputLogin.ProviderKey.Trim().ToUpper())
                                            .FirstOrDefault();

                            if (userLogin == null)
                            {
                                user.Logins.Add(inputLogin);
                            }
                        }

                        // remove Tokens
                        foreach (IdentityUserToken <string> userToken in user.Tokens.ToArray())
                        {
                            var inputToken = input.Tokens
                                             .Where(x => x.LoginProvider.Trim().ToUpper() == userToken.LoginProvider.Trim().ToUpper() && x.Name.Trim().ToUpper() == userToken.Name.Trim().ToUpper() && x.Value.Trim().ToUpper() == userToken.Value.Trim().ToUpper())
                                             .FirstOrDefault();

                            if (inputToken == null)
                            {
                                user.Tokens.Remove(userToken);
                                _dbContext.Entry(userToken).State = EntityState.Deleted;
                            }
                        }

                        // add Tokens
                        foreach (IdentityUserToken <string> inputToken in input.Tokens)
                        {
                            var userToken = user.Tokens.ToArray()
                                            .Where(x => x.LoginProvider.Trim().ToUpper() == inputToken.LoginProvider.Trim().ToUpper() && x.Name.Trim().ToUpper() == inputToken.Name.Trim().ToUpper() && x.Value.Trim().ToUpper() == inputToken.Value.Trim().ToUpper())
                                            .FirstOrDefault();

                            if (userToken == null)
                            {
                                user.Tokens.Add(inputToken);
                            }
                        }

                        // remove RoleClaims
                        foreach (AspNetUserRoleClaim userRoleClaim in user.RoleClaims.ToArray())
                        {
                            user.RoleClaims.Remove(userRoleClaim);
                            _dbContext.Entry(userRoleClaim).State = EntityState.Deleted;
                        }

                        // add RoleClaims
                        foreach (AspNetUserRoleClaim inputRoleClaim in input.RoleClaims)
                        {
                            var userRoleClaim = user.RoleClaims
                                                .Where(x => x.RoleId == inputRoleClaim.RoleId &&
                                                       x.RoleClaimId == inputRoleClaim.RoleClaimId)
                                                .FirstOrDefault();

                            if (userRoleClaim == null)
                            {
                                if (inputRoleClaim.User == null)
                                {
                                    inputRoleClaim.User = user;
                                }

                                foreach (AspNetUserRoleClaimHistory inputHistory in inputRoleClaim.History)
                                {
                                    if (inputHistory.UserRoleClaim == null)
                                    {
                                        inputHistory.UserRoleClaim = inputRoleClaim;
                                    }

                                    _dbContext.Entry(inputHistory).State = EntityState.Added;
                                }

                                user.RoleClaims.Add(inputRoleClaim);
                                _dbContext.Entry(inputRoleClaim).State = EntityState.Added;
                            }
                        }

                        // save changes
                        if (_dbContext.HasUnsavedChanges())
                        {
                            _dbContext.Users.Update(user);
                            _dbContext.SaveChanges();
                            dbContextTransaction.Commit();
                        }
                    }

                    return(Ok());
                }
                catch (Exception exception)
                {
                    dbContextTransaction.Rollback();
                    _logger.Exception(exception);
                    return(BadRequest(exception));
                }
            }
        }
Exemplo n.º 6
0
        private static void TestLibraries(bool testCompression = true, bool testEncryption = true)
        {
            var myOrgMsg   = "123456";
            var encryptedx = AESGCM.SimpleEncryptWithPassword(myOrgMsg, "123456");

            var decryptedx = AESGCM.SimpleDecryptWithPassword(encryptedx, "1234567");

            try
            {
                Parallel.For(0, 1000000, i =>
                {
                    var v          = new InstructorValidationData($"Std{i}", DateTime.Now, 10, 11);
                    var serialized = SerializationHelper.Serialize <InstructorValidationData>(v);
                    if (serialized == null)
                    {
                        throw new Exception("serialized==null");
                    }


                    string compressedString = Framework_Project.Compression.CompressionHelper.Zip(serialized);
                    if (compressedString == null)
                    {
                        throw new Exception("compressed==null");
                    }
                    //  string decompressed = Framework_Project.Compression.CompressionHelper.Unzip(compressedString);


                    string encrypted = AESGCM.SimpleEncryptWithPassword(compressedString, $"Keyyy{i}");
                    if (encrypted == null)
                    {
                        throw new Exception("encrypted==null");
                    }

                    string decrypted = AESGCM.SimpleDecryptWithPassword(encrypted, $"Keyyy{i}");
                    if (decrypted == null)
                    {
                        throw new Exception("decrypted==null");
                    }

                    if (decrypted != compressedString)
                    {
                        throw new Exception("decrypted!=compressedString");
                    }



                    if (!StructuralComparisons.StructuralEqualityComparer.Equals(decrypted, compressedString))
                    {
                        throw new Exception("decryptedBytes!=compressed");
                    }

                    string decompressed = Framework_Project.Compression.CompressionHelper.Unzip(decrypted);
                    if (decompressed == null)
                    {
                        throw new Exception("decompressed==null");
                    }
                    if (decompressed != serialized)
                    {
                        throw new Exception("decompressed != serialized");
                    }


                    var deserialized = SerializationHelper.Deserialize <InstructorValidationData>(serialized);
                });
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Exemplo n.º 7
0
        //=========================== SYNC SYSTEM =============================

        /// <summary>
        /// Upload entire information item/order list from FTP/Cloud_Sync/FullSync directory
        /// </summary>
        public static void DownloadAllInformation()
        {
            string syncText     = "";
            string emailAddress = GetSettingsValue("SYNC_EMAIL");


            try
            {
                if (Global.isOnWifi()) // only try on WiFi (most data will block this)
                {
                    List <string> lines = new List <string>();
                    // Copy local repository to FTP Server
                    if (Device.OS == TargetPlatform.Android || Device.OS == TargetPlatform.iOS)
                    {
                        // Read from FTP File
                        //string[] lines = GetFileContent(emailAddress + SyncFileName)
                        lines = AESGCM
                                .SimpleDecryptWithPassword(
                            DependencyService.Get <IFtpWebRequest>().FTPRead(emailAddress + FullSyncFileName), AESGCMKey)
                                .Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList();
                    }

                    // Load items and orders from downloaded file
                    foreach (string line in lines)
                    {
                        // Load items
                        if (line.Contains("||[IT_LO]="))
                        {
                            Item New_Item = new Item();
                            New_Item.Name           = Parse_Line_Information(line, "IT_DE_");
                            New_Item.Status         = Parse_Line_Information(line, "IT_ST_") == "" ? "0" : Parse_Line_Information(line, "IT_ST_");
                            New_Item.RefundAlert    = Parse_Line_Information(line, "IT_RE_") == "1" ? true : false;
                            New_Item.consumedStatus = Convert.ToInt32(Parse_Line_Information(line, "IT_CO_", "||", "2"));
                            New_Item.Location       = Parse_Line_Information(line, "IT_LO");
                            New_Item.Payment_Type   = Parse_Line_Information(line, "IT_PA_");
                            New_Item.Category       = Parse_Line_Information(line, "IT_CA_");
                            New_Item.Discount_Amt   = Convert.ToDouble(Parse_Line_Information(line, "IT_DI_", "||", "0"));
                            New_Item.Price          = Convert.ToDouble(Parse_Line_Information(line, "IT_PR_"));
                            New_Item.Quantity       = Convert.ToInt32(Parse_Line_Information(line, "IT_QU_"));
                            New_Item.Date           = Convert.ToDateTime(Parse_Line_Information(line, "IT_DA_"));
                            New_Item.Refund_Date    = Parse_Line_Information(line, "IT_RD_").Length > 0 ? Convert.ToDateTime(Parse_Line_Information(line, "IT_RD_")) : DateTime.Now;
                            New_Item.Memo           = Parse_Line_Information(line, "IT_ME_");
                            New_Item.OrderID        = Parse_Line_Information(line, "IT_ID_");

                            GlobalItemList.Add(New_Item);
                        }

                        // Load orders
                        else if (line.Contains("||[OR_QU_]="))
                        {
                            Order New_Order = new Order();
                            New_Order.Location            = Parse_Line_Information(line, "OR_LO_");
                            New_Order.OrderMemo           = Parse_Line_Information(line, "OR_ME_");
                            New_Order.Payment             = Parse_Line_Information(line, "OR_PA_");
                            New_Order.Tax_Overridden      = (Parse_Line_Information(line, "OR_TO_") == "1");
                            New_Order.Order_Total_Pre_Tax = Convert.ToDouble(Parse_Line_Information(line, "OR_PP_"));
                            New_Order.GC_Amount           = Convert.ToDouble(Parse_Line_Information(line, "OR_GC_", "||", "0"));
                            New_Order.Order_Taxes         = Convert.ToDouble(Parse_Line_Information(line, "OR_TA_"));
                            New_Order.Order_Discount_Amt  = Convert.ToDouble(Parse_Line_Information(line, "OR_DI_", "||", "0"));
                            New_Order.Order_Quantity      = Convert.ToInt32(Parse_Line_Information(line, "OR_QU_"));
                            New_Order.Date    = Convert.ToDateTime(Parse_Line_Information(line, "OR_DA_"));
                            New_Order.OrderID = Parse_Line_Information(line, "OR_ID_");

                            GlobalOrderList.Add(New_Order);
                        }
                    }

                    foreach (Item item in GlobalItemList)
                    {
                        Debug.WriteLine(item.ToString());
                    }
                }
            }
            catch (Exception Ex)
            {
                Debug.WriteLine("No file found: " + Ex);
            }
        }
Exemplo n.º 8
0
 /// <summary>
 /// Method to store encrypted object in Http Session
 /// </summary>
 /// <param name="session">ISession</param>
 /// <param name="key">string</param>
 /// <param name="value">T</param>
 /// <method>Encrypt&lt;T&gt;(this ISession session, string key, T value)</method>
 public static async void Encrypt <T>(this ISession session, string key, T value)
 {
     session.SetString(key, AESGCM.Encrypt(JsonSerializer.Serialize(value)));
     await session.CommitAsync();
 }
Exemplo n.º 9
0
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap data    = context.MergedJobDataMap;
            var        jobName = context.JobDetail.Key.Name;

            string ftpHost             = GetRequiredParameter(data, FtpHost, jobName);
            string serverPort          = GetOptionalParameter(data, ServerPort);
            string userName            = GetOptionalParameter(data, UserName);
            string password            = GetOptionalParameter(data, Password);
            string localDirectoryPath  = GetRequiredParameter(data, LocalDirectoryPath, jobName);
            string remoteDirectoryPath = GetOptionalParameter(data, RemoteDirectoryPath);
            string cutOff                = GetOptionalParameter(data, CutOff);
            string fileExtensions        = GetRequiredParameter(data, FileExtensions, jobName);
            string sshPrivateKeyPath     = GetOptionalParameter(data, SshPrivateKeyPath);
            string sshPrivateKeyPassword = GetOptionalParameter(data, SshPrivateKeyPassword);

            // Set defaults
            int port = (!string.IsNullOrEmpty(serverPort) ? Int32.Parse(serverPort) : 21);

            cutOff = (!string.IsNullOrEmpty(cutOff) ? cutOff : "1.00:00:00"); // 1 day

            // Validate cutOffTimeSpan format
            TimeSpan cutOffTimeSpan;

            if (!TimeSpan.TryParse(cutOff, out cutOffTimeSpan))
            {
                var err = string.Format("Invalid cutOffTimeSpan format [{0}] specified.", cutOff);
                Logger.ErrorFormat("Error in FtpDownloadJob ({0}): {1}", jobName, err);
                throw new JobExecutionException(err);
            }

            try
            {
                if (new EncryptionFeatureToggle().FeatureEnabled)
                {
                    userName = AESGCM.SimpleDecrypt(userName, Convert.FromBase64String(ConfigurationManager.AppSettings["SchedulerEncryptionKey"]));

                    if (!string.IsNullOrEmpty(password))
                    {
                        password = AESGCM.SimpleDecrypt(password, Convert.FromBase64String(ConfigurationManager.AppSettings["SchedulerEncryptionKey"]));
                    }

                    if (!string.IsNullOrEmpty(sshPrivateKeyPassword))
                    {
                        sshPrivateKeyPassword = AESGCM.SimpleDecrypt(sshPrivateKeyPassword, Convert.FromBase64String(ConfigurationManager.AppSettings["SchedulerEncryptionKey"]));
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Warn("ConfigurationError executing FtpDownloadJob job.", ex);
            }

            // Get files
            try
            {
                using (var ftpLibrary = SchedulerContainer.Container.GetInstance <IFtpLibrary>())
                {
                    ftpLibrary.Connect(ftpHost, port, userName, password, sshPrivateKeyPath, sshPrivateKeyPassword);
                    ftpLibrary.GetFiles(remoteDirectoryPath, localDirectoryPath, fileExtensions, cutOffTimeSpan);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(string.Format("Error in FtpDownloadJob ({0}):", jobName), ex);
                throw new JobExecutionException(ex.Message, ex, false);
            }
        }