From a4ad17749b58b5c9696acace6d3aced372051284 Mon Sep 17 00:00:00 2001 From: Parker Berberian Date: Tue, 29 Jan 2019 12:05:05 -0500 Subject: Fixed PTL Checks First, this commit correctly parses the gerrit urls and can redirect itself to the raw info file if the user provides the html rendered one. This commit also fixes the way it checks the user against the found PTLs. The returned data changed format when support was added for sub-PTLs and the checks were never updated. Change-Id: I5801d207ec823c718a5beb5d5e78ee5780ec65e0 Signed-off-by: Parker Berberian --- src/workflow/models.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/workflow/models.py b/src/workflow/models.py index 4e79546..beaaee4 100644 --- a/src/workflow/models.py +++ b/src/workflow/models.py @@ -61,15 +61,25 @@ class BookingAuthManager(): def parse_gerrit_url(self, url): project_leads = [] try: - parts = url.split("/") + halfs = url.split("?") + parts = halfs[0].split("/") + args = halfs[1].split(";") if "http" in parts[0]: # the url include http(s):// parts = parts[2:] - if "f=INFO.yaml" not in parts[-1].split(";"): + if "f=INFO.yaml" not in args: return None if "gerrit.opnfv.org" not in parts[0]: return None + try: + i = args.index("a=blob") + args[i] = "a=blob_plain" + except ValueError: + pass + # recreate url + halfs[1] = ";".join(args) + halfs[0] = "/".join(parts) # now to download and parse file - url = "https://" + "/".join(parts) + url = "https://" + "?".join(halfs) info_file = requests.get(url, timeout=15).text info_parsed = yaml.load(info_file) ptl = info_parsed.get('project_lead') @@ -138,8 +148,11 @@ class BookingAuthManager(): return True # admin override for this user if repo.BOOKING_INFO_FILE not in repo.el: return False # INFO file not provided - ptl_info = self.parse_url(repo.BOOKING_INFO_FILE) - return ptl_info and ptl_info == booking.owner.userprofile.email_addr + ptl_info = self.parse_url(repo.el.get(repo.BOOKING_INFO_FILE)) + for ptl in ptl_info: + if ptl['email'] == booking.owner.userprofile.email_addr: + return True + return False class WorkflowStep(object): -- cgit 1.2.3-korg