From a6ac4c9ba50ff520b91fdeff5b40ae2b91f72c03 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Mon, 21 Dec 2020 19:54:15 +0100 Subject: [PATCH] #562 - added button to test connection if backup strategy is "git remote" --- .../budgetmaster/backup/GitHelper.java | 17 ++++++++++++++ .../settings/SettingsController.java | 14 ++++++++++++ .../resources/languages/base_de.properties | 1 + .../resources/languages/base_en.properties | 1 + src/main/resources/static/js/main.js | 1 - src/main/resources/static/js/settings.js | 22 +++++++++++++++++++ .../resources/templates/settings/settings.ftl | 2 +- .../templates/settings/settingsMacros.ftl | 4 ++++ 8 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/backup/GitHelper.java b/src/main/java/de/deadlocker8/budgetmaster/backup/GitHelper.java index 803f151c1..2d6214ccb 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/backup/GitHelper.java +++ b/src/main/java/de/deadlocker8/budgetmaster/backup/GitHelper.java @@ -12,6 +12,7 @@ import org.eclipse.jgit.transport.URIish; import java.io.IOException; import java.net.URISyntaxException; +import java.nio.file.Files; import java.nio.file.Path; public class GitHelper @@ -83,5 +84,21 @@ public class GitHelper pushCommand.setCredentialsProvider(credentialsProvider); pushCommand.call(); } + + public static boolean checkConnection(String uri, CredentialsProvider credentialsProvider) + { + try + { + final Path tempDirectory = Files.createTempDirectory("TestGitRepo"); + cloneRepository(uri, credentialsProvider, tempDirectory); + } + catch(GitAPIException | IOException e) + { + e.printStackTrace(); + return false; + } + + return true; + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java index a144a5c33..da04c1e39 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java @@ -21,6 +21,8 @@ import de.deadlocker8.budgetmaster.utils.Strings; import de.thecodelabs.utils.util.Localization; import de.thecodelabs.utils.util.RandomUtils; import de.thecodelabs.versionizer.UpdateItem; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -357,4 +359,16 @@ public class SettingsController extends BaseController settingsService.disableFirstUseBanner(); return "redirect:/"; } + + @PostMapping("/git/test") + public String testGit(@RequestParam(value = "autoBackupGitUrl") String autoBackupGitUrl, + @RequestParam(value = "autoBackupGitUserName") String autoBackupGitUserName, + @RequestParam(value = "autoBackupGitPassword") String autoBackupGitPassword) + { + final CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(autoBackupGitUserName, autoBackupGitPassword); + final boolean isValidConnection = GitHelper.checkConnection(autoBackupGitUrl, credentialsProvider); + + // TODO: return isValidConnection or json + return "1234"; + } } \ No newline at end of file diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index 713f5e387..53365a79e 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -211,6 +211,7 @@ settings.backup.auto.next=Nächste Ausführung settings.backup.auto.git.url=Adresse des Git-Servers settings.backup.auto.git.user.name=Git Nutzername settings.backup.auto.git.password=Git Passwort +settings.backup.auto.git.test=Verbindung testen settings.database.import=Importieren settings.database.export=Exportieren diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index 1f2543d5d..b7055ddc0 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -211,6 +211,7 @@ settings.backup.auto.next=Next execution settings.backup.auto.git.url=Git server address settings.backup.auto.git.user.name=Git user name settings.backup.auto.git.password=Git password +settings.backup.auto.git.test=Test connection settings.database.import=Import settings.database.export=Export diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js index d9ca05ab1..a87dd700b 100644 --- a/src/main/resources/static/js/main.js +++ b/src/main/resources/static/js/main.js @@ -69,7 +69,6 @@ function fetchAndShowWhatsNewModal(item, containerID) data: {}, success: function(data) { - $('#' + containerID).html(data); $(modalID).modal(); $(modalID).modal('open'); diff --git a/src/main/resources/static/js/settings.js b/src/main/resources/static/js/settings.js index 7c5db7f94..62be0a988 100644 --- a/src/main/resources/static/js/settings.js +++ b/src/main/resources/static/js/settings.js @@ -22,6 +22,28 @@ $(document).ready(function() onAutoBackupStrategyChange(this.selectedIndex); }); + $('#settings-backup-auto-git-test').click(function() + { + $.ajax({ + type: 'POST', + url: $('#settings-backup-auto-git-test').attr('data-url'), + data: { + '_csrf': document.getElementById('token').value, + 'autoBackupGitUrl': document.getElementById('settings-backup-auto-git-url').value, + 'autoBackupGitUserName': document.getElementById('settings-backup-auto-git-user-name').value, + 'autoBackupGitPassword': document.getElementById('settings-backup-auto-git-password').value, + }, + success: function(data) + { + M.toast({html: data}); + }, + error: function(data) + { + console.log(data); + } + }); + }); + let autoBackupDays = $('#settings-backup-auto-days'); if(autoBackupDays.length) { diff --git a/src/main/resources/templates/settings/settings.ftl b/src/main/resources/templates/settings/settings.ftl index c18c27de8..97c21d988 100644 --- a/src/main/resources/templates/settings/settings.ftl +++ b/src/main/resources/templates/settings/settings.ftl @@ -22,7 +22,7 @@ <div class="container"> <#import "../helpers/validation.ftl" as validation> <form name="Settings" action="<@s.url '/settings/save'/>" method="post" onsubmit="return validateForm()"> - <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" id="token"/> <input type="hidden" name="ID" value="${settings.getID()?c}"> <input type="hidden" name="lastBackupReminderDate" value="${dateService.getLongDateString(settings.getLastBackupReminderDate())}"> <input type="hidden" name="installedVersionCode" value="${settings.getInstalledVersionCode()}"> diff --git a/src/main/resources/templates/settings/settingsMacros.ftl b/src/main/resources/templates/settings/settingsMacros.ftl index d3fb137eb..e8f11e9a1 100644 --- a/src/main/resources/templates/settings/settingsMacros.ftl +++ b/src/main/resources/templates/settings/settingsMacros.ftl @@ -239,5 +239,9 @@ <input id="settings-backup-auto-git-password" name="autoBackupGitPassword" type="text" <@validation.validation "autoBackupGitPassword"/> value="•••••"> <label for="settings-backup-auto-git-password">${locale.getString("settings.backup.auto.git.password")}</label> </div> + + <div class="col s12 m12 l8 offset-l2"> + <a id="settings-backup-auto-git-test" data-url="<@s.url '/settings/git/test'/>" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">send</i>${locale.getString("settings.backup.auto.git.test")}</a> + </div> </div> </#macro> \ No newline at end of file -- GitLab