示例#1
0
        public SettingsManager()
        {
            _programSettingsPath = Path.Combine(ProgramManager.GetConfigPath(), _programSettingsFileName);
            _ssmFile             = new SSM_File(_programSettingsPath, SSM_File.Mode.SQLite);
            _ssm = new SSM(_ssmFile);

            InitSSM();
            UpdateSSM();
        }
示例#2
0
        static void Main(string[] args)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            for (int i = 0; i < args.Length; i++)
            {
                string strippedArg = args[i].ToLower();

                if (Directory.Exists(args[i]))
                {
                    _directory = args[i];
                }
                else if (File.Exists(args[i]))
                {
                    _directory = args[i];
                }

                strippedArg = strippedArg.TrimStart('-', '/', '\\');

                if (strippedArg == "verbose" || strippedArg == "v" || strippedArg == "developer" || strippedArg == "dev" || strippedArg == "debug")
                {
                    _verbose = true;
                }
                else if (strippedArg == "password" || strippedArg == "p" && !string.IsNullOrEmpty(args[i + 1]))
                {
                    _password = args[i + 1];
                }
                else if (string.IsNullOrEmpty(_passwordHint) && (strippedArg == "hint" || strippedArg == "passwordhint" || strippedArg == "h") && !string.IsNullOrEmpty(args[i + 1]))
                {
                    _passwordHint = args[i + 1];
                }
                else if (strippedArg == "purgetemp" || strippedArg == "deletetemp")
                {
                    _purgeTemp = true;
                }
                else if (strippedArg == "headless" || strippedArg == "cli" || strippedArg == "commandline")
                {
                    _headless = true;
                }
                else if (strippedArg == "showprogress" || strippedArg == "progress" || strippedArg == "prog")
                {
                    if (!string.IsNullOrEmpty(args[i + 1]) && UInt16.TryParse(args[i + 1], out _progressSleep))
                    {
                    }
                    _showProgress = true;
                }
                else if (strippedArg == "faesversion" || strippedArg == "faes" || strippedArg == "faesver")
                {
                    _getFaesVersion = true;
                }
                else if (strippedArg == "faesguiversion" || strippedArg == "faesguiver" || strippedArg == "faesgui" || strippedArg == "guiver" || strippedArg == "ver")
                {
                    _getVersion     = true;
                    _getFaesVersion = true;
                }
                else if (string.IsNullOrEmpty(_compressionMethod) && (strippedArg == "compression" || strippedArg == "compressionmethod" || strippedArg == "c") && !string.IsNullOrEmpty(args[i + 1]))
                {
                    _compressionMethod = args[i + 1].ToUpper();
                }
                else if ((strippedArg == "level" || strippedArg == "compressionlevel" || strippedArg == "l") && !string.IsNullOrEmpty(args[i + 1]))
                {
                    Int32.TryParse(args[i + 1], out _compressionLevel);
                }
                else if (strippedArg == "overwrite" || strippedArg == "overwriteduplicates" || strippedArg == "o")
                {
                    _overwriteDuplicates = true;
                }
                else if (strippedArg == "preserveoriginal" || strippedArg == "original" || strippedArg == "po")
                {
                    _deleteOriginalFile = false;
                }
                else if (strippedArg == "genfullinstallconfig")
                {
                    _genFullInstallConfig = true;
                }
                else if (strippedArg == "associatefiletypes" || strippedArg == "filetypes")
                {
                    _associateFileTypes = true;
                }
                else if (strippedArg == "startmenushortcuts" || strippedArg == "startmenu")
                {
                    _startMenuShortcuts = true;
                }
                else if (strippedArg == "contextmenus" || strippedArg == "context")
                {
                    _contextMenus = true;
                }
                else if (strippedArg == "installbranch" && !string.IsNullOrEmpty(args[i + 1]))
                {
                    _installBranch = args[i + 1];
                }
                else if (strippedArg == "peek" || strippedArg == "filepeek")
                {
                    _doFilePeek = true;
                }

                _strippedArgs.Add(strippedArg);
            }
            FileAES_Utilities.SetVerboseLogging(_verbose);
            SSM.SetVerboseLogging(_verbose);

            try
            {
                if (File.Exists("FAES-Updater.exe"))
                {
                    File.Delete("FAES-Updater.exe");
                }
            }
            catch
            {
                // ignored
            }

            if (_purgeTemp)
            {
                FileAES_Utilities.PurgeTempFolder();
            }

            if (_getVersion)
            {
                Console.WriteLine("Current FileAES Version: {0}", GetVersion());
                Console.WriteLine("Current FileAES Build Date: {0}", GetBuildDateFormatted());
            }

            if (_getFaesVersion)
            {
                Console.WriteLine("Current FAES Version: {0}", FileAES_Utilities.GetVersion());
            }

            if (!string.IsNullOrEmpty(_directory) && !string.IsNullOrEmpty(_password) && _headless)
            {
                faesFile = new FAES_File(_directory);

                Console.WriteLine("FileAES-GUI (FileAES) only has basic command-line support. Use FileAES-CLI for improved command-line functionality.");

                try
                {
                    if (_compressionLevel < 0 || _compressionLevel > 9)
                    {
                        Console.WriteLine("You have not specified a valid compression level! Please choose a value between 0 and 9.");
                    }
                    else
                    {
                        if (faesFile.IsFileEncryptable())
                        {
                            FileAES_Encrypt encrypt = new FileAES_Encrypt(faesFile, _password, _passwordHint, Optimise.Balanced, null, _deleteOriginalFile, _overwriteDuplicates);

                            if (!string.IsNullOrEmpty(_compressionMethod))
                            {
                                switch (_compressionMethod)
                                {
                                case "ZIP":
                                    encrypt.SetCompressionMode(CompressionMode.ZIP, _compressionLevel);
                                    break;

                                case "TAR":
                                    encrypt.SetCompressionMode(CompressionMode.TAR, _compressionLevel);
                                    break;

                                case "LZMA":
                                    encrypt.SetCompressionMode(CompressionMode.LZMA, _compressionLevel);
                                    break;

                                case "GZIP":
                                    encrypt.SetCompressionMode(CompressionMode.GZIP, _compressionLevel);
                                    break;

                                case "LGYZIP":
                                case "LEGACYZIP":
                                case "LEGACY":
                                    encrypt.SetCompressionMode(CompressionMode.LGYZIP, _compressionLevel);
                                    break;

                                default:
                                    Console.WriteLine("Unknown Compression Method: {0}", _compressionMethod);
                                    return;
                                }
                            }

                            Thread progressThread = new Thread(() =>
                            {
                                while (_showProgress)
                                {
                                    ushort percentComplete = Convert.ToUInt16(encrypt.GetEncryptionPercentComplete());
                                    Console.WriteLine(_verbose ? "[INFO] Progress: {0}%" : "Progress: {0}%", percentComplete);
                                    Thread.Sleep(_progressSleep);
                                }
                            });

                            Thread eThread = new Thread(() =>
                            {
                                try
                                {
                                    if (encrypt.EncryptFile())
                                    {
                                        if (_showProgress)
                                        {
                                            Console.WriteLine(_verbose ? "[INFO] Progress: 100%" : "Progress: 100%");
                                        }

                                        Console.WriteLine("Encryption on {0} succeeded!", faesFile.getFaesType().ToLower());
                                    }
                                    else
                                    {
                                        Console.WriteLine("Encryption on {0} failed!", faesFile.getFaesType().ToLower());
                                    }
                                }
                                catch (Exception e)
                                {
                                    progressThread.Abort();
                                    HandleException(e);
                                }
                            });

                            if (_showProgress)
                            {
                                progressThread.Start();
                            }
                            eThread.Start();

                            while (eThread.ThreadState == ThreadState.Running)
                            {
                            }

                            progressThread.Abort();
                        }
                        else
                        {
                            FileAES_Decrypt decrypt = new FileAES_Decrypt(faesFile, _password, _deleteOriginalFile, _overwriteDuplicates);

                            Thread progressThread = new Thread(() =>
                            {
                                while (_showProgress)
                                {
                                    ushort percentComplete = Convert.ToUInt16(decrypt.GetDecryptionPercentComplete());

                                    Console.WriteLine(_verbose ? "[INFO] Progress: {0}%" : "Progress: {0}%", percentComplete);
                                    Thread.Sleep(_progressSleep);
                                }
                            });

                            Thread dThread = new Thread(() =>
                            {
                                try
                                {
                                    if (decrypt.DecryptFile())
                                    {
                                        if (_showProgress)
                                        {
                                            Console.WriteLine(_verbose ? "[INFO] Progress: 100%" : "Progress: 100%");
                                        }

                                        Console.WriteLine("Decryption on {0} succeeded!", faesFile.getFaesType().ToLower());
                                    }
                                    else
                                    {
                                        Console.WriteLine("Decryption on {0} failed!", faesFile.getFaesType().ToLower());
                                        Console.WriteLine("Ensure that you entered the correct password!");
                                        Console.WriteLine("Password Hint: {0}", faesFile.GetPasswordHint());
                                    }
                                }
                                catch (Exception e)
                                {
                                    progressThread.Abort();
                                    HandleException(e);
                                }
                            });

                            if (_showProgress)
                            {
                                progressThread.Start();
                            }
                            dThread.Start();

                            while (dThread.ThreadState == ThreadState.Running)
                            {
                            }

                            progressThread.Abort();
                        }
                    }
                }
                catch (Exception e)
                {
                    HandleException(e);
                }
            }
            else if (_genFullInstallConfig)
            {
                programManager = new ProgramManager(ProgramManager.InstallType.FullInstall);
                programManager.SetBranch(_installBranch);
                programManager.SetAssociateFileTypes(_associateFileTypes);
                programManager.SetStartMenuShortcuts(_startMenuShortcuts);
                programManager.SetContextMenus(_contextMenus);

                Application.Exit();
            }
            else
            {
                programManager = new ProgramManager();
                if (!FileAES_Utilities.GetVerboseLogging())
                {
                    FileAES_Utilities.SetVerboseLogging(programManager.GetDevMode());
                }

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                if (!string.IsNullOrEmpty(_directory))
                {
                    faesFile = new FAES_File(_directory);

                    if (faesFile.IsFileEncryptable())
                    {
                        Application.Run(new EncryptForm(faesFile));
                    }
                    else if (faesFile.IsFileDecryptable())
                    {
                        if (_doFilePeek && IsFileValidForPeek(faesFile))
                        {
                            Application.Run(new PeekForm(faesFile));
                        }
                        else
                        {
                            Application.Run(new DecryptForm(faesFile));
                        }
                    }
                }
                else
                {
                    Application.Run(new MainForm());
                }
            }
        }