diff --git a/repoapi/models/jbi.py b/repoapi/models/jbi.py index 86796c0..39b8dba 100644 --- a/repoapi/models/jbi.py +++ b/repoapi/models/jbi.py @@ -18,7 +18,9 @@ from collections import OrderedDict from django.db import models from django.forms.models import model_to_dict +from django.conf import settings from repoapi.tasks import get_jbi_files +from urlparse import urlparse logger = logging.getLogger(__name__) workfront_re = re.compile(r"TT#(\d+)") @@ -164,6 +166,13 @@ class JenkinsBuildInfo(models.Model): ["param_release", "projectname", "tag"], ] + def is_job_url_allowed(self): + if self.job_url: + parsed = urlparse(self.job_url) + if parsed.netloc in settings.JBI_ALLOWED_HOSTS: + return True + return False + def __str__(self): return "%s:%d[%s]" % (self.jobname, self.buildnumber, self.tag) @@ -172,6 +181,7 @@ class JenkinsBuildInfo(models.Model): def jbi_manage(sender, **kwargs): if kwargs["created"]: instance = kwargs["instance"] - get_jbi_files.delay(instance.pk, - instance.jobname, - instance.buildnumber) + if instance.is_job_url_allowed(): + get_jbi_files.delay(instance.pk, + instance.jobname, + instance.buildnumber) diff --git a/repoapi/settings/prod.py b/repoapi/settings/prod.py index df1a6ea..683128a 100644 --- a/repoapi/settings/prod.py +++ b/repoapi/settings/prod.py @@ -72,3 +72,4 @@ JBI_BASEDIR = os.path.join(VAR_DIR, 'jbi_files') JBI_ARTIFACT_JOBS = [ 'release-tools-runner', ] +JBI_ALLOWED_HOSTS = ['jenkins.mgm.sipwise.com'] diff --git a/repoapi/settings/test.py b/repoapi/settings/test.py index 4441996..244021c 100644 --- a/repoapi/settings/test.py +++ b/repoapi/settings/test.py @@ -75,3 +75,4 @@ JBI_BASEDIR = os.path.join(RESULTS_DIR, 'jbi_files') JBI_ARTIFACT_JOBS = [ 'fake-release-tools-runner', ] +JBI_ALLOWED_HOSTS = ['jenkins-dev.mgm.sipwise.com'] diff --git a/repoapi/test/test_basic_model.py b/repoapi/test/test_basic_model.py index 4ff0615..5e9ae19 100644 --- a/repoapi/test/test_basic_model.py +++ b/repoapi/test/test_basic_model.py @@ -15,8 +15,11 @@ from django.test import TestCase from repoapi.models import JenkinsBuildInfo +from django.test import override_settings from repoapi.test.base import BaseTest +JBI_HOST = "https://%s/job/fake-gerrit/" + class JenkinsBuildInfoTestCase(BaseTest): @@ -36,3 +39,45 @@ class JenkinsBuildInfoTestCase(BaseTest): result='OK', param_release='release-mr4.0') self.assertIsNone(jbi.tag) + + @override_settings(JBI_ALLOWED_HOSTS=['jenkins-dev.local']) + def test_job_url_not_allowed(self): + base = "https://%s/job/fake-gerrit/" + job = JenkinsBuildInfo.objects.create( + projectname='fake', + jobname='fake-get-code', + buildnumber=1, + result='OK', + param_release='release-mr4.0') + self.assertFalse(job.is_job_url_allowed()) + job.job_url = JBI_HOST % 'jenkins.mgm.sipwise.com' + self.assertFalse(job.is_job_url_allowed()) + + @override_settings(JBI_ALLOWED_HOSTS=[]) + def test_job_url_not_allowed_empty(self): + base = "https://%s/job/fake-gerrit/" + job = JenkinsBuildInfo.objects.create( + projectname='fake', + jobname='fake-get-code', + buildnumber=1, + result='OK', + param_release='release-mr4.0') + self.assertFalse(job.is_job_url_allowed()) + job.job_url = JBI_HOST % 'jenkins.mgm.sipwise.com' + self.assertFalse(job.is_job_url_allowed()) + job.job_url = None + self.assertFalse(job.is_job_url_allowed()) + + @override_settings(JBI_ALLOWED_HOSTS=['jenkins-dev.local', + 'jenkins.local']) + def test_job_url_allowed(self): + job = JenkinsBuildInfo.objects.create( + projectname='fake', + jobname='fake-get-code', + job_url=JBI_HOST % 'jenkins-dev.local', + buildnumber=1, + result='OK', + param_release='release-mr4.0') + self.assertTrue(job.is_job_url_allowed()) + job.job_url = JBI_HOST % 'jenkins.local' + self.assertTrue(job.is_job_url_allowed()) diff --git a/repoapi/test/test_jbi_info.py b/repoapi/test/test_jbi_info.py index 78410d5..503ac7a 100644 --- a/repoapi/test/test_jbi_info.py +++ b/repoapi/test/test_jbi_info.py @@ -44,7 +44,9 @@ class TestJBICelery(BaseTest): 'jobname': "real-fake-gerrit", 'buildnumber': 1, 'result': "SUCCESS", - 'job_url': "https://jenkins.mgm.sipwise.com/job/real-fake-gerrit/", + 'job_url': + "https://jenkins-dev.mgm.sipwise.com/job" + "/real-fake-gerrit/", 'param_tag': "none", 'param_branch': "master", 'param_release': "none",