[#6894] Sanitize trailing slashes on base_url when generating hook
Signed-off-by: Cory Johns <cjohns@slashdotmedia.com>
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 252210e..b0f567e 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -498,6 +498,13 @@
def url(self):
return self.app_config.url()
+ def refresh_url(self):
+ return '/'.join([
+ tg.config.get('base_url', 'http://localhost:8080').rstrip('/'),
+ 'auth/refresh_repo',
+ self.url().lstrip('/'),
+ ])
+
def shorthand_id(self):
return self.name
diff --git a/Allura/allura/tests/model/test_repo.py b/Allura/allura/tests/model/test_repo.py
index a2a66ff..f0bf936 100644
--- a/Allura/allura/tests/model/test_repo.py
+++ b/Allura/allura/tests/model/test_repo.py
@@ -95,6 +95,36 @@
self.assertEqual(run.parent_commit_ids, [])
+class RepoTestBase(unittest.TestCase):
+ def setUp(self):
+ setup_basic_test()
+
+ @mock.patch('allura.model.repository.Repository.url')
+ def test_refresh_url(self, url):
+ url.return_value = '/p/test/repo'
+ c.app = mock.Mock(**{'config._id': 'deadbeef'})
+ repo = M.repository.Repository()
+ cases = [
+ [
+ None,
+ 'http://localhost:8080/auth/refresh_repo/p/test/repo',
+ ],
+ [
+ 'https://somewhere.com',
+ 'https://somewhere.com/auth/refresh_repo/p/test/repo',
+ ],
+ [
+ 'http://somewhere.com/',
+ 'http://somewhere.com/auth/refresh_repo/p/test/repo',
+ ]]
+ for base_url, result in cases:
+ values = {}
+ if base_url:
+ values['base_url'] = base_url
+ with mock.patch.dict(config, values, clear=True):
+ self.assertEqual(result, repo.refresh_url())
+
+
class TestLastCommit(unittest.TestCase):
def setUp(self):
setup_basic_test()
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index ae9f63e..9debcc9 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -417,8 +417,7 @@
def _setup_hooks(self, source_path=None):
'Set up the git post-commit hook'
text = self.post_receive_template.substitute(
- url=tg.config.get('base_url', 'http://localhost:8080')
- + '/auth/refresh_repo' + self._repo.url())
+ url=self._repo.refresh_url())
fn = os.path.join(self._repo.fs_path, self._repo.name, 'hooks', 'post-receive')
with open(fn, 'w') as fp:
fp.write(text)
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index f4d0ac0..a547913 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -630,8 +630,7 @@
# setup a post-commit hook to notify Allura of changes to the repo
# the hook should also call the user-defined post-commit-user hook
text = self.post_receive_template.substitute(
- url=tg.config.get('base_url', 'http://localhost:8080')
- + '/auth/refresh_repo' + self._repo.url())
+ url=self._repo.refresh_url())
fn = os.path.join(self._repo.fs_path, self._repo.name, 'hooks', 'post-commit')
with open(fn, 'wb') as fp:
fp.write(text)