diff --git a/src/org/bytedream/cryptogx/Settings.java b/src/org/bytedream/cryptogx/Settings.java
deleted file mode 100644
index 3410040..0000000
--- a/src/org/bytedream/cryptogx/Settings.java
+++ /dev/null
@@ -1,739 +0,0 @@
-package org.bytedream.cryptoGX;
-
-import javafx.application.Platform;
-import javafx.collections.FXCollections;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
-import javafx.scene.control.*;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import javafx.scene.input.KeyCode;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.VBox;
-import javafx.stage.*;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import java.io.*;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.spec.InvalidKeySpecException;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-
-import static org.bytedream.cryptogx.Main.*;
-
-/**
- *
Class for the user configuration / settings
- *
- * @since 1.12.0
- */
-public class Settings {
-
- private static double addSettingsGUIX, addSettingsGUIY;
-
- private static final HashSet protectedSettingsNames = new HashSet<>(Arrays.asList("cryptoGX", "settings"));
-
- /**
- * Shows a GUI where the user can save settings, which can load later
- *
- * @param rootWindow from which this GUI will get called
- * @param userSetting
- * @throws IOException
- *
- * @since 1.11.0
- */
- public static void addSettingGUI(Window rootWindow, Map userSetting) throws IOException {
- Map newSettingItems = new HashMap<>();
-
- Stage rootStage = new Stage();
- rootStage.initOwner(rootWindow);
- Parent addSettingsRoot = FXMLLoader.load(Settings.class.getResource("resources/addSettingsGUI.fxml"));
- rootStage.initStyle(StageStyle.UNDECORATED);
- rootStage.initModality(Modality.WINDOW_MODAL);
- rootStage.setResizable(false);
- rootStage.setTitle("cryptoGX");
- Scene scene = new Scene(addSettingsRoot, 320, 605);
-
- rootStage.setScene(scene);
-
- scene.setOnMouseDragged(event -> {
- rootStage.setX(event.getScreenX() + addSettingsGUIX);
- rootStage.setY(event.getScreenY() + addSettingsGUIY);
- });
- scene.setOnMousePressed(event -> {
- addSettingsGUIX = scene.getX() - event.getSceneX();
- addSettingsGUIY = scene.getY() - event.getSceneY();
- });
-
- Thread thread = new Thread(() -> {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- Platform.runLater(() -> {
- MenuBar menuBar = (MenuBar) addSettingsRoot.lookup("#menuBar");
- menuBar.setOnMouseDragged(event -> {
- rootStage.setX(event.getScreenX() + addSettingsGUIX);
- rootStage.setY(event.getScreenY() + addSettingsGUIY);
- });
- menuBar.setOnMousePressed(event -> {
- addSettingsGUIX = menuBar.getLayoutX() - event.getSceneX();
- addSettingsGUIY = menuBar.getLayoutY() - event.getSceneY();
- });
-
- ImageView closeButton = (ImageView) addSettingsRoot.lookup("#closeButton");
- closeButton.setOnMouseClicked(event -> rootStage.close());
-
- TextField settingsNameEntry = (TextField) addSettingsRoot.lookup("#settingsNameEntry");
-
- TextField textKeyEntry = (TextField) addSettingsRoot.lookup("#textKeyEntry");
- textKeyEntry.setText(userSetting.get("textKey"));
- TextField textSaltEntry = (TextField) addSettingsRoot.lookup("#textSaltEntry");
- textSaltEntry.setText(userSetting.get("textSalt"));
- ComboBox textAlgorithmBox = (ComboBox) addSettingsRoot.lookup("#textAlgorithmComboBox");
- textAlgorithmBox.setItems(FXCollections.observableArrayList(Utils.algorithms.keySet()));
- textAlgorithmBox.setValue(userSetting.get("textAlgorithm"));
-
- TextField fileEnDecryptKeyEntry = (TextField) addSettingsRoot.lookup("#fileEnDecryptKeyEntry");
- fileEnDecryptKeyEntry.setText(userSetting.get("fileEnDecryptKey"));
- TextField fileEnDecryptSaltEntry = (TextField) addSettingsRoot.lookup("#fileEnDecryptSaltEntry");
- fileEnDecryptSaltEntry.setText(userSetting.get("fileEnDecryptSalt"));
- ComboBox fileEnDecryptAlgorithmBox = (ComboBox) addSettingsRoot.lookup("#fileEnDecryptAlgorithmComboBox");
- fileEnDecryptAlgorithmBox.setItems(FXCollections.observableArrayList(Utils.algorithms.keySet()));
- fileEnDecryptAlgorithmBox.setValue(userSetting.get("fileEnDecryptAlgorithm"));
-
- TextField fileDeleteIterationEntry = (TextField) addSettingsRoot.lookup("#fileDeleteIterationsEntry");
- fileDeleteIterationEntry.setText(userSetting.get("fileDeleteIterations"));
- fileDeleteIterationEntry.textProperty().addListener((observable, oldValue, newValue) -> {
- if (!newValue.matches("[0-9]*")) {
- fileDeleteIterationEntry.setText(oldValue);
- }
- });
-
- TextField fileOutputPathEntry = (TextField) addSettingsRoot.lookup("#fileOutputPathEntry");
- fileOutputPathEntry.setText(userSetting.get("fileOutputPath"));
- Button fileOutputPathButton = (Button) addSettingsRoot.lookup("#fileOutputPathButton");
- fileOutputPathButton.setOnAction(event -> {
- DirectoryChooser directoryChooser = new DirectoryChooser();
- File directory = directoryChooser.showDialog(rootWindow.getScene().getWindow());
- try {
- fileOutputPathEntry.setText(directory.getAbsolutePath());
- } catch (NullPointerException e) {
- e.printStackTrace();
- }
- });
- CheckBox removeFromFileBoxCheckBox = (CheckBox) addSettingsRoot.lookup("#removeFromFileBoxCheckBox");
- removeFromFileBoxCheckBox.setSelected(Boolean.parseBoolean(userSetting.get("removeFromFileBox")));
- CheckBox limitNumberOfThreadsCheckBox = (CheckBox) addSettingsRoot.lookup("#limitNumberOfThreadsCheckBox");
- limitNumberOfThreadsCheckBox.setSelected(Boolean.parseBoolean(userSetting.get("limitNumberOfThreads")));
-
- PasswordField hiddenPasswordEntry = (PasswordField) addSettingsRoot.lookup("#hiddenPasswordEntry");
- TextField visiblePasswordEntry = (TextField) addSettingsRoot.lookup("#visiblePasswordEntry");
- CheckBox showPassword = (CheckBox) addSettingsRoot.lookup("#showPassword");
-
- showPassword.setOnAction(event -> {
- if (showPassword.isSelected()) {
- visiblePasswordEntry.setText(hiddenPasswordEntry.getText());
- visiblePasswordEntry.setVisible(true);
- hiddenPasswordEntry.setVisible(false);
- } else {
- hiddenPasswordEntry.setText(visiblePasswordEntry.getText());
- hiddenPasswordEntry.setVisible(true);
- visiblePasswordEntry.setVisible(false);
- }
- });
- CheckBox encryptSettings = (CheckBox) addSettingsRoot.lookup("#encryptSettings");
- encryptSettings.setOnAction(event -> {
- if (encryptSettings.isSelected()) {
- hiddenPasswordEntry.setDisable(false);
- visiblePasswordEntry.setDisable(false);
- showPassword.setDisable(false);
- } else {
- hiddenPasswordEntry.setDisable(true);
- visiblePasswordEntry.setDisable(true);
- showPassword.setDisable(true);
- }
- });
- Button saveButton = (Button) addSettingsRoot.lookup("#saveButton");
- saveButton.setOnAction(event -> {
- if (settingsNameEntry.getText().trim().isEmpty()) {
- warningAlert("Add a name for the setting");
- } else if (protectedSettingsNames.contains(settingsNameEntry.getText())) {
- warningAlert("Please choose another name for this setting");
- } else if (settingsNameEntry.getText().trim().contains(" ")) {
- warningAlert("Setting name must not contain free space");
- } else if (encryptSettings.isSelected()) {
- try {
- EnDecrypt.AES encrypt;
- if (!hiddenPasswordEntry.isDisabled() && !hiddenPasswordEntry.getText().trim().isEmpty()) {
- encrypt = new EnDecrypt.AES(hiddenPasswordEntry.getText(), new byte[16]);
- } else if (!visiblePasswordEntry.getText().trim().isEmpty()) {
- encrypt = new EnDecrypt.AES(visiblePasswordEntry.getText(), new byte[16]);
- } else {
- throw new InvalidKeyException("The key must not be empty");
- }
-
- newSettingItems.put("encrypted", "true");
-
- newSettingItems.put("textKey", encrypt.encrypt(textKeyEntry.getText()));
- newSettingItems.put("textSalt", encrypt.encrypt(textSaltEntry.getText()));
- newSettingItems.put("textAlgorithm", encrypt.encrypt(textAlgorithmBox.getSelectionModel().getSelectedItem().toString()));
-
- newSettingItems.put("fileEnDecryptKey", encrypt.encrypt(fileEnDecryptKeyEntry.getText()));
- newSettingItems.put("fileEnDecryptSalt", encrypt.encrypt(fileEnDecryptSaltEntry.getText()));
- newSettingItems.put("fileEnDecryptAlgorithm", encrypt.encrypt(fileEnDecryptAlgorithmBox.getSelectionModel().getSelectedItem().toString()));
-
- newSettingItems.put("fileDeleteIterations", encrypt.encrypt(fileDeleteIterationEntry.getText()));
-
- newSettingItems.put("fileOutputPath", encrypt.encrypt(fileOutputPathEntry.getText()));
- newSettingItems.put("removeFromFileBox", encrypt.encrypt(String.valueOf(removeFromFileBoxCheckBox.isSelected())));
- newSettingItems.put("limitNumberOfThreads", encrypt.encrypt(String.valueOf(limitNumberOfThreadsCheckBox.isSelected())));
-
- if (!config.isFile()) {
- try {
- if (!config.createNewFile()) {
- warningAlert("Couldn't create config file");
- } else {
- addSetting(config, settingsNameEntry.getText().trim(), newSettingItems);
- }
- } catch (IOException e) {
- e.printStackTrace();
- errorAlert("Couldn't create config file", e.getMessage());
- }
- } else {
- addSetting(config, settingsNameEntry.getText().trim(), newSettingItems);
- }
-
- rootStage.close();
- } catch (InvalidKeyException e) {
- warningAlert("The key must not be empty");
- } catch (NoSuchPaddingException | NoSuchAlgorithmException | IllegalBlockSizeException | BadPaddingException | InvalidKeySpecException e) {
- e.printStackTrace();
- }
- } else {
- newSettingItems.put("textKey", textKeyEntry.getText());
- newSettingItems.put("textSalt", textSaltEntry.getText());
- newSettingItems.put("textAlgorithm", textAlgorithmBox.getSelectionModel().getSelectedItem().toString());
-
- newSettingItems.put("fileEnDecryptKey", fileEnDecryptKeyEntry.getText());
- newSettingItems.put("fileEnDecryptSalt", fileEnDecryptSaltEntry.getText());
- newSettingItems.put("fileEnDecryptAlgorithm", fileEnDecryptAlgorithmBox.getSelectionModel().getSelectedItem().toString());
-
- newSettingItems.put("fileDeleteIterations", fileDeleteIterationEntry.getText());
-
- newSettingItems.put("fileOutputPath", fileOutputPathEntry.getText());
- newSettingItems.put("removeFromFileBox", String.valueOf(removeFromFileBoxCheckBox.isSelected()));
- newSettingItems.put("limitNumberOfThreads", String.valueOf(limitNumberOfThreadsCheckBox.isSelected()));
-
- if (!config.isFile()) {
- try {
- if (!config.createNewFile()) {
- warningAlert("Couldn't create config file");
- } else {
- addSetting(config, settingsNameEntry.getText().trim(), newSettingItems);
- }
- } catch (IOException e) {
- e.printStackTrace();
- errorAlert("Couldn't create config file", e.getMessage());
- }
- } else {
- addSetting(config, settingsNameEntry.getText().trim(), newSettingItems);
- }
-
- rootStage.close();
- }
- });
- });
- });
-
- thread.start();
-
- rootStage.showAndWait();
- }
-
- /**
- * Shows a GUI where the user can export settings to a extra file
- *
- * @param rootWindow from which this GUI will get called
- * @throws IOException
- *
- * @since 1.11.0
- */
- public static void exportSettingsGUI(Window rootWindow) throws IOException {
- Stage rootStage = new Stage();
- rootStage.initOwner(rootWindow);
- Parent exportSettingsRoot = FXMLLoader.load(Settings.class.getResource("resources/exportSettingsGUI.fxml"));
- rootStage.initStyle(StageStyle.UNDECORATED);
- rootStage.initModality(Modality.WINDOW_MODAL);
- rootStage.setResizable(false);
- rootStage.setTitle("cryptoGX");
- Scene scene = new Scene(exportSettingsRoot, 254, 253);
-
- rootStage.setScene(scene);
-
- scene.setOnMouseDragged(event -> {
- rootStage.setX(event.getScreenX() + addSettingsGUIX);
- rootStage.setY(event.getScreenY() + addSettingsGUIY);
- });
- scene.setOnMousePressed(event -> {
- addSettingsGUIX = scene.getX() - event.getSceneX();
- addSettingsGUIY = scene.getY() - event.getSceneY();
- });
-
- Thread thread = new Thread(() -> {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- MenuBar menuBar = (MenuBar) exportSettingsRoot.lookup("#menuBar");
- menuBar.setOnMouseDragged(event -> {
- rootStage.setX(event.getScreenX() + addSettingsGUIX);
- rootStage.setY(event.getScreenY() + addSettingsGUIY);
- });
- menuBar.setOnMousePressed(event -> {
- addSettingsGUIX = menuBar.getLayoutX() - event.getSceneX();
- addSettingsGUIY = menuBar.getLayoutY() - event.getSceneY();
- });
- ImageView closeButton = (ImageView) exportSettingsRoot.lookup("#closeButton");
- closeButton.setOnMouseClicked(event -> rootStage.close());
-
- VBox settingsBox = (VBox) exportSettingsRoot.lookup("#settingsBox");
- Platform.runLater(() -> readSettings(config).keySet().forEach(s -> {
- CheckBox newCheckBox = new CheckBox();
- newCheckBox.setText(s);
- settingsBox.getChildren().add(newCheckBox);
- }));
-
- Button exportButton = (Button) exportSettingsRoot.lookup("#exportButton");
- exportButton.setOnAction(event -> {
- FileChooser fileChooser = new FileChooser();
- fileChooser.setTitle("Export settings");
- fileChooser.setInitialFileName("settings.config");
- fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Config files", "*.config"),
- new FileChooser.ExtensionFilter("All files", "*.*"));
- File file = fileChooser.showSaveDialog(exportSettingsRoot.getScene().getWindow());
- if (file != null) {
- TreeMap> writeInfos = new TreeMap<>();
- TreeMap> settings = readSettings(config);
- for (int i=0; iShows a GUI where the user can load saved settings
- *
- * @param rootWindow from which this GUI will get called
- * @return the settings that the user has chosen
- * @throws IOException
- *
- * @since 1.11.0
- */
- public static TreeMap> loadSettingsGUI(Window rootWindow) throws IOException {
- Button[] outerLoadButton = new Button[1];
- HashMap setting = new HashMap<>();
- TreeMap> settingItems = readSettings(config);
- TreeMap> returnItems = new TreeMap<>();
-
- Stage rootStage = new Stage();
- rootStage.initOwner(rootWindow);
- AnchorPane loadSettingsRoot = FXMLLoader.load(Settings.class.getResource("resources/loadSettingsGUI.fxml"));
- rootStage.initStyle(StageStyle.UNDECORATED);
- rootStage.initModality(Modality.WINDOW_MODAL);
- rootStage.setResizable(false);
- rootStage.setTitle("cryptoGX");
- rootStage.getIcons().add(new Image(Settings.class.getResource("resources/cryptoGX.png").toExternalForm()));
- Scene scene = new Scene(loadSettingsRoot, 242, 235);
-
- scene.setOnMouseDragged(event -> {
- rootStage.setX(event.getScreenX() + addSettingsGUIX);
- rootStage.setY(event.getScreenY() + addSettingsGUIY);
- });
- scene.setOnMousePressed(event -> {
- addSettingsGUIX = scene.getX() - event.getSceneX();
- addSettingsGUIY = scene.getY() - event.getSceneY();
- });
-
- scene.setOnKeyReleased(event -> {
- if (event.getCode() == KeyCode.ENTER) {
- outerLoadButton[0].fire();
- }
- });
-
- Thread thread = new Thread(() -> {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Platform.runLater(() -> {
- MenuBar menuBar = (MenuBar) loadSettingsRoot.lookup("#menuBar");
- menuBar.setOnMouseDragged(event -> {
- rootStage.setX(event.getScreenX() + addSettingsGUIX);
- rootStage.setY(event.getScreenY() + addSettingsGUIY);
- });
- menuBar.setOnMousePressed(event -> {
- addSettingsGUIX = menuBar.getLayoutX() - event.getSceneX();
- addSettingsGUIY = menuBar.getLayoutY() - event.getSceneY();
- });
-
- ImageView closeButton = (ImageView) loadSettingsRoot.lookup("#closeButton");
- if (settingItems.isEmpty()) {
- rootStage.close();
- }
-
- closeButton.setOnMouseClicked(event -> {
- setting.put("textKey", configDefaultTextKey);
- setting.put("textSalt", configDefaultTextSalt);
- setting.put("textAlgorithm", configDefaultTextAlgorithm);
-
- setting.put("fileEnDecryptKey", configDefaultFileEnDecryptKey);
- setting.put("fileEnDecryptSalt", configDefaultFileEnDecryptSalt);
- setting.put("fileEnDecryptAlgorithm", configDefaultFileEnDecryptAlgorithm);
-
- setting.put("fileDeleteIterations", String.valueOf(configDefaultFileDeleteIterations));
-
- setting.put("fileOutputPath", configDefaultFileOutputPath);
- setting.put("removeFromFileBox", String.valueOf(configDefaultRemoveFileFromFileBox));
- setting.put("limitNumberOfThreads", String.valueOf(configDefaultLimitNumberOfThreads));
-
- returnItems.put("default", setting);
-
- rootStage.close();
- });
-
- PasswordField keyHideEntry = (PasswordField) loadSettingsRoot.lookup("#passwordEntryHide");
- TextField keyShowEntry = (TextField) loadSettingsRoot.lookup("#passwordEntryShow");
-
- CheckBox showPassword = (CheckBox) loadSettingsRoot.lookup("#showPassword");
- showPassword.setOnAction(event -> {
- if (showPassword.isSelected()) {
- keyShowEntry.setText(keyHideEntry.getText());
- keyShowEntry.setVisible(true);
- keyHideEntry.setVisible(false);
- } else {
- keyHideEntry.setText(keyShowEntry.getText());
- keyHideEntry.setVisible(true);
- keyShowEntry.setVisible(false);
- }
- });
-
- ComboBox settingsBox = (ComboBox) loadSettingsRoot.lookup("#settingsBox");
- settingsBox.setItems(FXCollections.observableArrayList(settingItems.keySet()));
- settingsBox.setValue(settingItems.firstKey());
- if (!Boolean.parseBoolean(settingItems.firstEntry().getValue().get("encrypted").trim())) {
- keyHideEntry.clear();
- keyHideEntry.setDisable(true);
- keyShowEntry.setDisable(true);
- showPassword.setDisable(true);
- }
- settingsBox.setOnAction(event -> {
- try {
- if (!Boolean.parseBoolean(settingItems.get(settingsBox.getSelectionModel().getSelectedItem().toString()).get("encrypted").trim())) {
- keyHideEntry.clear();
- keyHideEntry.setDisable(true);
- keyShowEntry.clear();
- keyShowEntry.setDisable(true);
- showPassword.setDisable(true);
- } else {
- keyHideEntry.clear();
- keyHideEntry.setDisable(false);
- keyShowEntry.clear();
- keyShowEntry.setDisable(false);
- showPassword.setDisable(false);
- }
- } catch (NullPointerException e) {
- //get called when delete button is pressed
- }
- });
-
- Button loadButton = (Button) loadSettingsRoot.lookup("#loadButton");
- loadButton.setOnAction(event -> {
- String settingName = settingsBox.getSelectionModel().getSelectedItem().toString();
- Map selectedSetting = settingItems.get(settingName);
- if (keyHideEntry.isDisabled() && showPassword.isDisabled() && showPassword.isDisabled()) {
- setting.put("textKey", selectedSetting.get("textKey"));
- setting.put("textSalt", selectedSetting.get("textSalt"));
- setting.put("textAlgorithm", selectedSetting.get("textAlgorithm"));
-
- setting.put("fileEnDecryptKey", selectedSetting.get("fileEnDecryptKey"));
- setting.put("fileEnDecryptSalt", selectedSetting.get("fileEnDecryptSalt"));
- setting.put("fileEnDecryptAlgorithm", selectedSetting.get("fileEnDecryptAlgorithm"));
-
- setting.put("fileDeleteIterations", selectedSetting.get("fileDeleteIterations"));
-
- setting.put("fileOutputPath", selectedSetting.get("fileOutputPath"));
- setting.put("removeFromFileBox", selectedSetting.get("removeFromFileBox"));
- setting.put("limitNumberOfThreads", selectedSetting.get("limitNumberOfThreads"));
-
- returnItems.put(settingsBox.getSelectionModel().getSelectedItem().toString(), setting);
-
- rootStage.close();
- } else {
- EnDecrypt.AES decryptSetting;
- if (keyHideEntry.isVisible()) {
- decryptSetting = new EnDecrypt.AES(keyHideEntry.getText(), new byte[16]);
- } else {
- decryptSetting = new EnDecrypt.AES(keyShowEntry.getText(), new byte[16]);
- }
- try {
- Map selectedEncryptedSetting = settingItems.get(settingName);
- setting.put("textKey", decryptSetting.decrypt(selectedEncryptedSetting.get("textKey")));
- setting.put("textSalt", decryptSetting.decrypt(selectedEncryptedSetting.get("textSalt")));
- setting.put("textAlgorithm", decryptSetting.decrypt(selectedEncryptedSetting.get("textAlgorithm")));
-
- setting.put("fileEnDecryptKey", decryptSetting.decrypt(selectedEncryptedSetting.get("fileEnDecryptKey")));
- setting.put("fileEnDecryptSalt", decryptSetting.decrypt(selectedEncryptedSetting.get("fileEnDecryptSalt")));
- setting.put("fileEnDecryptAlgorithm", decryptSetting.decrypt(selectedEncryptedSetting.get("fileEnDecryptAlgorithm")));
-
- setting.put("fileDeleteIterations", String.valueOf(Integer.parseInt(decryptSetting.decrypt(selectedEncryptedSetting.get("fileDeleteIterations")))));
-
- setting.put("fileOutputPath", decryptSetting.decrypt(selectedEncryptedSetting.get("fileOutputPath")));
- setting.put("removeFromFileBox", decryptSetting.decrypt(selectedEncryptedSetting.get("removeFromFileBox")));
- setting.put("limitNumberOfThreads", decryptSetting.decrypt(selectedEncryptedSetting.get("limitNumberOfThreads")));
-
- returnItems.put(settingsBox.getSelectionModel().getSelectedItem().toString(), setting);
-
- rootStage.close();
- } catch (InvalidKeyException e) {
- warningAlert("Wrong key is given");
- } catch (NoSuchPaddingException | NoSuchAlgorithmException | IllegalBlockSizeException | BadPaddingException | InvalidKeySpecException e) {
- e.printStackTrace();
- warningAlert("Wrong key is given or the config wasn't\nsaved correctly");
- }
- }
- });
- outerLoadButton[0] = loadButton;
-
- Button deleteButton = (Button) loadSettingsRoot.lookup("#deleteButton");
- deleteButton.setOnAction(event -> {
- AtomicReference deleteQuestionX = new AtomicReference<>((double) 0);
- AtomicReference deleteQuestionY = new AtomicReference<>((double) 0);
- Alert deleteQuestion = new Alert(Alert.AlertType.CONFIRMATION, "Delete " + settingsBox.getSelectionModel().getSelectedItem().toString() + "?", ButtonType.OK, ButtonType.CANCEL);
- deleteQuestion.initStyle(StageStyle.UNDECORATED);
- deleteQuestion.setTitle("Confirmation");
- ((Stage) deleteQuestion.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Settings.class.getResource("resources/cryptoGX.png").toExternalForm()));
-
- Scene window = deleteQuestion.getDialogPane().getScene();
-
- window.setOnMouseDragged(dragEvent -> {
- deleteQuestion.setX(dragEvent.getScreenX() + deleteQuestionX.get());
- deleteQuestion.setY(dragEvent.getScreenY() + deleteQuestionY.get());
- });
- window.setOnMousePressed(pressEvent -> {
- deleteQuestionX.set(window.getX() - pressEvent.getSceneX());
- deleteQuestionY.set(window.getY() - pressEvent.getSceneY());
- });
-
- Optional result = deleteQuestion.showAndWait();
- if (result.get() == ButtonType.OK) {
- if (settingItems.size() - 1 <= 0) {
- for (int i = 0; i < 100; i++) {
- if (config.isFile()) {
- try {
- SecureDelete.deleteFile(config, 5, new byte[64]);
- isConfig = false;
- rootStage.close();
- break;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- rootStage.close();
- } else if (deleteSetting(config, settingsBox.getSelectionModel().getSelectedItem().toString())) {
- settingItems.remove(settingsBox.getSelectionModel().getSelectedItem().toString());
-
- settingsBox.setItems(FXCollections.observableArrayList(settingItems.keySet()));
- settingsBox.setValue(settingItems.firstKey());
- } else {
- warningAlert("Couldn't delete setting '" + settingsBox.getSelectionModel().getSelectedItem().toString() + "'");
- }
- }
- });
- });
- });
-
- thread.start();
-
- rootStage.setScene(scene);
- rootStage.showAndWait();
-
- return returnItems;
- }
-
- /**
- * Shows a GUI where the user can save the current settings
- *
- * @param settingName name of the new setting
- * @param newSetting is the new setting key value pair
- *
- * @since 1.12.0
- */
- public static void addSetting(File file, String settingName, Map newSetting) {
- TreeMap> settings = readSettings(file);
- settings.put(settingName, newSetting);
- writeSettings(file, settings);
- }
-
- /**
- * Deletes a saved setting
- *
- * @param settingName of the setting
- * @return if the setting could be found
- *
- * @since 1.12.0
- */
- public static boolean deleteSetting(File file, String settingName) {
- StringBuilder newConfig = new StringBuilder();
- boolean delete = false;
- boolean found = false;
-
- try {
- BufferedReader configReader = new BufferedReader(new FileReader(file));
-
- String line;
-
- while ((line = configReader.readLine()) != null) {
- line = line.trim();
-
- if (line.startsWith("[") && line.endsWith("]")) {
- if (line.replace("[", "").replace("]", "").split(" ")[0].equals(settingName)) {
- delete = true;
- found = true;
- } else if (delete) {
- delete = false;
- newConfig.append(line).append("\n");
- } else {
- newConfig.append(line).append("\n");
- }
- } else if (!delete) {
- newConfig.append(line).append("\n");
- }
- }
-
- configReader.close();
-
- BufferedWriter configFile = new BufferedWriter(new FileWriter(file));
- configFile.write(newConfig.toString());
- configFile.newLine();
-
- configFile.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return found;
- }
-
- /**
- * Reads all settings saved in a file>
- *
- * @param file from which the settings should be read from
- * @return the settings
- *
- * @since 1.12.0
- */
- public static TreeMap> readSettings(File file) {
- TreeMap> returnMap = new TreeMap<>();
- String settingName = null;
- Map settingValues = new HashMap<>();
-
- try {
- BufferedReader configReader = new BufferedReader(new FileReader(file));
-
- String line;
-
- while ((line = configReader.readLine()) != null) {
-
- if (line.isEmpty()) {
- continue;
- } else if (line.startsWith("[") && line.endsWith("]")) {
- if (settingName != null) {
- returnMap.put(settingName, settingValues);
- settingValues = new HashMap<>();
- }
- String[] newSetting = line.replace("[", "").replace("]", "").split(" ");
- settingName = newSetting[0].trim();
- String[] encoded = newSetting[1].split("=");
- settingValues.put("encrypted", encoded[1]);
- } else {
- String[] keyValue = line.split("=");
- try {
- settingValues.put(keyValue[0], keyValue[1]);
- } catch (IndexOutOfBoundsException e) {
- settingValues.put(keyValue[0], "");
- }
- }
- }
-
- if (settingName != null) {
- returnMap.put(settingName, settingValues);
- }
-
- configReader.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- warningAlert("Couldn't find file '" + file.getAbsolutePath() + "'"); // this should never raise
- } catch (IOException e) {
- e.printStackTrace();
- errorAlert("An IO Exception occurred", e.getMessage());
- }
-
- return returnMap;
- }
-
- /**
- * Writes settings (could be more than one) to a file
- *
- * @param file where the settings should be written in
- * @param settings of the user
- *
- * @since 1.12.0
- */
- public static void writeSettings(File file, TreeMap> settings) {
- try {
- BufferedWriter configWriter = new BufferedWriter(new FileWriter(file));
-
- for (Map.Entry> settingElement: settings.entrySet()) {
- configWriter.write("[" + settingElement.getKey() + " encrypted=" + Boolean.parseBoolean(settingElement.getValue().get("encrypted")) + "]");
- configWriter.newLine();
- for (Map.Entry entry : settingElement.getValue().entrySet()) {
- String key = entry.getKey();
- if (!key.equals("encrypted")) {
- configWriter.write(entry.getKey() + "=" + entry.getValue());
- configWriter.newLine();
- }
- }
- }
- configWriter.newLine();
-
- configWriter.close();
- } catch (IOException e) {
- e.printStackTrace();
- errorAlert("An error occurred while saving the settings", e.getMessage());
- }
- }
-
-}