From 5238b0ed7e832a2a77b167dae1639d0ed8c3b642 Mon Sep 17 00:00:00 2001 From: Christian Wiedemann-Gruber Date: Thu, 2 May 2019 10:53:17 +0200 Subject: [PATCH] Add verifySsl option #64 Allows to disable the ssl verification for remote repo --- pom.xml | 2 +- .../bitbucket/hook/MirrorBucketProcessor.java | 16 ++++++++++++++-- .../bitbucket/hook/MirrorRepositoryHook.java | 9 ++++++--- .../bitbucket/hook/MirrorSettings.java | 1 + .../resources/i18n/stash-hook-mirror.properties | 1 + .../resources/static/mirror-repository-hook.soy | 5 +++++ .../bitbucket/hook/MirrorRepositoryHookTest.java | 2 ++ 7 files changed, 30 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index cac7f27..fff463a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.englishtown stash-hook-mirror - 2.4.0-SNAPSHOT + 2.4.1-SNAPSHOT Englishtown diff --git a/src/main/java/com/englishtown/bitbucket/hook/MirrorBucketProcessor.java b/src/main/java/com/englishtown/bitbucket/hook/MirrorBucketProcessor.java index a48220a..cc15a1a 100644 --- a/src/main/java/com/englishtown/bitbucket/hook/MirrorBucketProcessor.java +++ b/src/main/java/com/englishtown/bitbucket/hook/MirrorBucketProcessor.java @@ -9,6 +9,7 @@ import com.atlassian.bitbucket.scm.ScmCommandBuilder; import com.atlassian.bitbucket.scm.ScmService; import com.atlassian.bitbucket.scm.git.command.GitCommandExitHandler; +import com.atlassian.bitbucket.scm.git.command.GitScmCommandBuilder; import com.atlassian.bitbucket.server.ApplicationPropertiesService; import com.atlassian.bitbucket.user.SecurityService; import com.google.common.base.Strings; @@ -88,13 +89,22 @@ private void runMirrorCommand(MirrorSettings settings, Repository repository) { // Call push command with the prune flag and refspecs for heads and tags // Do not use the mirror flag as pull-request refs are included - ScmCommandBuilder builder = scmService.createBuilder(repository) + ScmCommandBuilder obj = scmService.createBuilder(repository) .command("push") .argument("--prune") // this deletes locally deleted branches .argument(authenticatedUrl) .argument("--force"); - // Use an atomic transaction to have a consistent state + // Use GitBuilder to allow git settings to be passed + GitScmCommandBuilder builder = (GitScmCommandBuilder) obj; + + if (!settings.verifySsl) { + builder.withConfiguration("http.sslVerify", false); + } + + + + // Use an atomicw transaction to have a consistent state if (settings.atomic) { builder.argument("--atomic"); } @@ -116,6 +126,8 @@ private void runMirrorCommand(MirrorSettings settings, Repository repository) { builder.argument("+refs/notes/*:refs/notes/*"); } + + PasswordHandler passwordHandler = new PasswordHandler(settings.password, new GitCommandExitHandler(i18nService, repository)); diff --git a/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java b/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java index 643904d..f41fa2f 100644 --- a/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java +++ b/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java @@ -35,6 +35,7 @@ public class MirrorRepositoryHook implements PostRepositoryHook mirrorSettings = getMirrorSettings(settings, false, false, false); + List mirrorSettings = getMirrorSettings(settings, false, false, false, false); for (MirrorSettings ms : mirrorSettings) { if (!validate(ms, errors)) { ok = false; @@ -144,10 +145,10 @@ public Repository visit(@Nonnull RepositoryScope scope) { } private List getMirrorSettings(Settings settings) { - return getMirrorSettings(settings, true, true, true); + return getMirrorSettings(settings, true, true, true, true); } - private List getMirrorSettings(Settings settings, boolean defTags, boolean defNotes, boolean defAtomic) { + private List getMirrorSettings(Settings settings, boolean defTags, boolean defNotes, boolean defAtomic, boolean defVerifySsl) { Map allSettings = settings.asMap(); int count = 0; @@ -164,6 +165,7 @@ private List getMirrorSettings(Settings settings, boolean defTag ms.tags = (settings.getBoolean(SETTING_TAGS + suffix, defTags)); ms.notes = (settings.getBoolean(SETTING_NOTES + suffix, defNotes)); ms.atomic = (settings.getBoolean(SETTING_ATOMIC + suffix, defAtomic)); + ms.verifySsl = (settings.getBoolean(SETTING_VERIFY_SSL + suffix, defVerifySsl)); ms.suffix = String.valueOf(count++); results.add(ms); @@ -239,6 +241,7 @@ private void updateSettings(List mirrorSettings, Settings settin values.put(SETTING_TAGS + ms.suffix, ms.tags); values.put(SETTING_NOTES + ms.suffix, ms.notes); values.put(SETTING_ATOMIC + ms.suffix, ms.atomic); + values.put(SETTING_VERIFY_SSL + ms.suffix, ms.verifySsl); } // Unfortunately the settings are stored in an immutable map, so need to cheat with reflection diff --git a/src/main/java/com/englishtown/bitbucket/hook/MirrorSettings.java b/src/main/java/com/englishtown/bitbucket/hook/MirrorSettings.java index 7b873a5..196890b 100644 --- a/src/main/java/com/englishtown/bitbucket/hook/MirrorSettings.java +++ b/src/main/java/com/englishtown/bitbucket/hook/MirrorSettings.java @@ -12,4 +12,5 @@ class MirrorSettings implements Serializable { boolean tags; boolean notes; boolean atomic; + boolean verifySsl; } diff --git a/src/main/resources/i18n/stash-hook-mirror.properties b/src/main/resources/i18n/stash-hook-mirror.properties index b256001..1fa0a9c 100644 --- a/src/main/resources/i18n/stash-hook-mirror.properties +++ b/src/main/resources/i18n/stash-hook-mirror.properties @@ -17,3 +17,4 @@ mirror-repository-hook.refspec.description=The git refspec(s) to mirror (default mirror-repository-hook.tags.label=Tags (ie. +refs/tags/*:refs/tags/*) mirror-repository-hook.notes.label=Notes (ie. +refs/notes/*:refs/notes/*) mirror-repository-hook.atomic.label=Atomic +mirror-repository-hook.verifySsl.label=Verify SSL diff --git a/src/main/resources/static/mirror-repository-hook.soy b/src/main/resources/static/mirror-repository-hook.soy index 71026d3..ba0959c 100644 --- a/src/main/resources/static/mirror-repository-hook.soy +++ b/src/main/resources/static/mirror-repository-hook.soy @@ -98,6 +98,11 @@ 'id' : 'atomic' + $index, 'labelText': getText('mirror-repository-hook.atomic.label'), 'isChecked' : $config['atomic' + $index] != false + ], + [ + 'id' : 'verifySsl' + $index, + 'labelText': getText('mirror-repository-hook.verifySsl.label'), + 'isChecked' : $config['verifySsl' + $index] != false ] ] /} {/call} diff --git a/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java b/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java index 19ec275..d2f1a41 100644 --- a/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java +++ b/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java @@ -237,6 +237,7 @@ public void testValidateForProject() { verifyZeroInteractions(bucketedExecutor, errors, settings); } + private PostRepositoryHookContext buildContext() { Settings settings = defaultSettings(); @@ -266,6 +267,7 @@ private Settings defaultSettings() { when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_TAGS), eq(true))).thenReturn(true); when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_NOTES), eq(true))).thenReturn(true); when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_ATOMIC), eq(true))).thenReturn(true); + when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_VERIFY_SSL), eq(true))).thenReturn(true); return settings; }