/// <summary>
        ///
        /// </summary>
        public static string ObfuscateFileName(string path, int passes = 8)
        {
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException(nameof(path));
            }
            if (!File.Exists(path))
            {
                throw new FileNotFoundException(path);
            }

            var dir = Path.GetDirectoryName(path);

            for (var i = 0; i < passes; i++)
            {
                var    rand = FileGeneratorHelper.GetRandomNameWithoutExtension();
                string currentPath;
                while (File.Exists(currentPath = Path.Combine(dir ?? string.Empty, rand)))
                {
                    rand = FileGeneratorHelper.GetRandomNameWithoutExtension();
                }

                File.Move(path, currentPath);
                path = currentPath;
            }
            return(path);
        }
        /// <summary>
        ///
        /// </summary>
        public static string ObfuscateDirectoryName(string path, int passes = 8)
        {
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException(nameof(path));
            }

            if (!Directory.Exists(path))
            {
                throw new DirectoryNotFoundException(path);
            }
            {
                var parent = Directory.GetParent(path).FullName;
                for (var i = 0; i < passes; i++)
                {
                    var    randName = FileGeneratorHelper.GetRandomNameWithoutExtension();
                    string combined;
                    while (Directory.Exists(combined = Path.Combine(parent, randName)))
                    {
                        randName = FileGeneratorHelper.GetRandomNameWithoutExtension();
                    }

                    Directory.Move(path, combined);
                    path = combined;
                }
                return(path);
            }
        }
        public ContainerizeFileTask(string filePath, ContainerizationSettingsModel settingsModel) : base(ResourceType.File, filePath)
        {
            InnerTask = new Task(() =>
            {
                if (Path.GetExtension(filePath).Equals(settingsModel.Extension))
                {
                    return;
                }

                ContainerHelper.ContainerizeFile(filePath, AesHelper.GetNewAesKey(), settingsModel.Password);
                var newPath = FileGeneratorHelper.GetValidFileNameForDirectory(
                    DirectoryHelper.GetDirectoryPath(filePath),
                    Path.GetFileNameWithoutExtension(filePath),
                    settingsModel.Extension);

                File.Move(filePath, newPath);

                Result.Value = new FileModel
                {
                    File    = Path.GetFileName(filePath),
                    Time    = DateTime.Now,
                    Secured = newPath
                };
            });
        }
        /// <summary>
        ///
        /// </summary>
        public static void SDeleteDriveWipe(char driveLetter, string tempDirectory = "", bool postDelete = true, int passes = 1, int bufferLength = BufferLength)
        {
            var drives = DriveInfo.GetDrives().Where(x => char.ToLower(x.Name[0], CultureInfo.CurrentCulture) == char.ToLower(driveLetter, CultureInfo.CurrentCulture)).ToList();

            if (!drives.Any())
            {
                throw new DriveNotFoundException(driveLetter.ToString());
            }

            var drive = drives.First();

            if (string.IsNullOrEmpty(tempDirectory))
            {
                throw new ArgumentNullException(nameof(tempDirectory));
            }
            if (!Directory.Exists(tempDirectory))
            {
                throw new DirectoryNotFoundException(tempDirectory);
            }
            if (char.ToLower(Path.GetPathRoot(tempDirectory)[0], CultureInfo.CurrentCulture) != char.ToLower(driveLetter, CultureInfo.CurrentCulture))
            {
                throw new DirectoryDoesNotExistOnDriveException($"{tempDirectory} - {driveLetter}");
            }

            var tmpFile = FileGeneratorHelper.CreateUniqueFilePathForDirectory(tempDirectory, FileGeneratorHelper.GetRandomExtension());

            FileGeneratorHelper.CreateDummyFile(tmpFile, drive.AvailableFreeSpace);
            WriteZeros(tmpFile, passes, bufferLength);
            Write255S(tmpFile, passes, bufferLength);
            WriteRandomData(tmpFile, passes, bufferLength);
            if (postDelete)
            {
                File.Delete(tmpFile);
            }
        }
        public static void DecontainerizeDirectoryFiles(FolderModel masterModel, string folderPath, ContainerizationSettingsModel settingsModel, bool includeSubFolders)
        {
            foreach (var filePath in Directory.GetFiles(folderPath).Where(x => Path.GetExtension(x).Equals(settingsModel.Extension)))
            {
                ContainerHelper.DecontainerizeFile(filePath, settingsModel.Password);

                var fileModel = folderPath.Equals(masterModel.Uri)
                    ? masterModel.FileModels.FirstOrDefault(x => x.Secured.Equals(filePath))
                    : GetFileModel(masterModel, file => file.Secured.Equals(filePath));

                var newPath = FileGeneratorHelper.GetValidFileNameForDirectory(
                    GetDirectoryPath(filePath),
                    Path.GetFileNameWithoutExtension(filePath),
                    fileModel != null ? Path.GetExtension(fileModel.File) : string.Empty);

                File.Move(filePath, newPath);
            }

            if (!includeSubFolders)
            {
                return;
            }

            foreach (var subFolderPath in Directory.GetDirectories(folderPath))
            {
                DecontainerizeDirectoryFiles(masterModel, subFolderPath, settingsModel, true);
            }
        }
예제 #6
0
        private async void ButtonGenerateAllFiles_Click(object sender, RoutedEventArgs e)
        {
            var ans = MessageBox.Show("Generation output could overwrite already existing files. Are you sure to continue?",
                                      "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);

            if (ans == MessageBoxResult.No)
            {
                return;
            }

            try
            {
                labelForButtonGenerateAllFiles.Visibility  = Visibility.Hidden;
                labelForProgBarGenerateAllFiles.Visibility = Visibility.Visible;
                buttonGenerateAllFiles.Visibility          = Visibility.Hidden;
                progBarGenerateAllFiles.Visibility         = Visibility.Visible;
                progBarGenerateAllFiles.Value = 0;


                // Write SQL file containing all generated scripts and stored procedures
                await Task.Run(() => FileGeneratorHelper.WriteSqlScriptsFileAsync(Model, GeneratorSettings,
                                                                                  (progress) => Dispatcher.Invoke(() => progBarGenerateAllFiles.Value = progress * 50 / 100)));

                progBarGenerateAllFiles.Value = 50;

                // Write C# file containing all generated entity classes
                await Task.Run(() => FileGeneratorHelper.WriteCsEntityClassesFileAsync(Model, GeneratorSettings,
                                                                                       (progress) => Dispatcher.Invoke(() => progBarGenerateAllFiles.Value = 50 + progress * 10 / 100)));

                progBarGenerateAllFiles.Value = 60;


                // Write C# file containing all generated Dapper repositories
                await Task.Run(() => FileGeneratorHelper.WriteCsRepositoryClassesFileAsync(Model, GeneratorSettings,
                                                                                           (progress) => Dispatcher.Invoke(() => progBarGenerateAllFiles.Value = 60 + progress * 40 / 100)));

                progBarGenerateAllFiles.Value = 100;

                MessageBox.Show("Generation completed.", "Success", MessageBoxButton.OK, MessageBoxImage.Information);

                labelForButtonGenerateAllFiles.Visibility  = Visibility.Visible;
                labelForProgBarGenerateAllFiles.Visibility = Visibility.Hidden;
                buttonGenerateAllFiles.Visibility          = Visibility.Visible;
                progBarGenerateAllFiles.Visibility         = Visibility.Hidden;
            }
            catch (Exception exc)
            {
                MessageBox.Show($"Error occurred: {exc.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        public DecontainerizeOtherFileTask(string path, string password) : base(ResourceType.File, path)
        {
            InnerTask = new Task(() =>
            {
                ContainerHelper.DecontainerizeFile(path, password);

                var newFilePath = FileGeneratorHelper.GetValidFileNameForDirectory(
                    DirectoryHelper.GetDirectoryPath(path),
                    Path.GetFileNameWithoutExtension(path),
                    string.Empty);

                File.Move(path, newFilePath);
            });
        }
예제 #8
0
        public OtpTransformTask(string filePath, string ext, string keyFilePath = "", bool encrypt = true) : base(ResourceType.File, filePath, keyFilePath)
        {
            InnerTask = new Task(() =>
            {
                string newFileName;

                if (encrypt)
                {
                    newFileName = FileGeneratorHelper.GetValidFileNameForDirectory(
                        DirectoryHelper.GetDirectoryPath(filePath),
                        Path.GetFileName(filePath),
                        ext);
                }
                else
                {
                    if (!filePath.EndsWith(ext, StringComparison.Ordinal))
                    {
                        throw new InvalidEncryptedFileException();
                    }
                    var name = filePath.RemoveLast(ext.Length);

                    newFileName = FileGeneratorHelper.GetValidFileNameForDirectory(
                        DirectoryHelper.GetDirectoryPath(name),
                        Path.GetFileName(name),
                        string.Empty);
                }

                if (newFileName == null)
                {
                    throw new NoSuitableNameFoundException();
                }

                File.Move(filePath, newFileName);

                if (string.IsNullOrEmpty(keyFilePath))
                {
                    OtpHelper.EncryptWithoutKey(newFileName);
                }
                else
                {
                    OtpHelper.Transform(newFileName, keyFilePath);
                }
            });
        }
예제 #9
0
        public DecontainerizeFileTask(string filePath, string password, bool removeAfter = false, bool openAfter = false) : base(ResourceType.File, filePath)
        {
            InnerTask = new Task(() =>
            {
                ContainerHelper.DecontainerizeFile(filePath, password);

                var path = FileGeneratorHelper.GetValidFileNameForDirectory(
                    DirectoryHelper.GetDirectoryPath(filePath),
                    Path.GetFileNameWithoutExtension(filePath),
                    string.Empty);

                File.Move(filePath, path);

                Result.Value = new DecontainerizeFileTaskResultModel
                {
                    Model       = path.ToFileModel(),
                    NewPath     = path,
                    DeleteAfter = removeAfter,
                    OpenAfter   = openAfter
                };
            });
        }
예제 #10
0
        public DecontainerizeFileTask(FileModel model, string password, bool removeAfter = false, bool openAfter = false) : base(ResourceType.File, model.Secured)
        {
            InnerTask = new Task(() =>
            {
                ContainerHelper.DecontainerizeFile(model.Secured, password);

                var path = FileGeneratorHelper.GetValidFileNameForDirectory(
                    DirectoryHelper.GetDirectoryPath(model.Secured),
                    Path.GetFileNameWithoutExtension(model.File),
                    Path.GetExtension(model.File));

                File.Move(model.Secured, path);

                Result.Value = new DecontainerizeFileTaskResultModel
                {
                    Model       = model,
                    NewPath     = path,
                    DeleteAfter = removeAfter,
                    OpenAfter   = openAfter
                };
            });
        }
        public BulkExportKeysTask(string folderPath, string sessionPassword, IEnumerable <FileModel> models, RSAParameters privateKey, string extension)
            : base(ResourceType.Folder, folderPath)
        {
            InnerTask = new Task(() =>
            {
                var key            = string.Empty;
                var keysNotCreated = new List <string>();
                var keyCreated     = false;

                foreach (var model in models)
                {
                    if (ContainerHelper.ValidateContainer(model.Secured, sessionPassword))
                    {
                        if (keyCreated)
                        {
                            continue;
                        }

                        var keyPath = FileGeneratorHelper.GetValidFileNameForDirectory(
                            folderPath,
                            Path.GetFileNameWithoutExtension(Path.GetRandomFileName()),
                            extension);

                        RsaKeyWriterHelper.SerializeTextToFile(privateKey, sessionPassword, keyPath);

                        key        = keyPath;
                        keyCreated = true;
                    }
                    else
                    {
                        keysNotCreated.Add(model.Secured);
                    }
                }

                Result.Value = new BulkExportKeysTaskResultModel {
                    KeyPath = key, NotCreated = keysNotCreated
                };
            });
        }
        public static IEnumerable <FileModel> EnumerateAndSecureFiles(string folderPath, ContainerizationSettingsModel settingsModel)
        {
            var fileModels = new List <FileModel>();

            foreach (var filePath in Directory.GetFiles(folderPath).Where(x => !Path.GetExtension(x).Equals(settingsModel.Extension)))
            {
                ContainerHelper.ContainerizeFile(filePath, AesHelper.GetNewAesKey(), settingsModel.Password);
                var newPath = FileGeneratorHelper.GetValidFileNameForDirectory(
                    GetDirectoryPath(filePath),
                    Path.GetFileNameWithoutExtension(filePath),
                    settingsModel.Extension);

                File.Move(filePath, newPath);

                fileModels.Add(new FileModel
                {
                    File    = Path.GetFileName(filePath),
                    Time    = DateTime.Now,
                    Secured = newPath
                });
            }

            return(fileModels);
        }