#102 Validate the input submitted for bugzilla overrides and make tests work if pdc-client isn't installed
Merged 5 years ago by pingou. Opened 5 years ago by pingou.

file modified
+31
@@ -411,6 +411,25 @@ 

      """ Updates the default assignees of this package.

      """

  

+     def _validate_input(inputname):

+         """ Validate if the input is either an username or a group name. """

+         valid = False

+         if inputname.startswith("@"):

+             group = pagure.lib.query.search_groups(

+                 flask.g.session, group_name=inputname[1:]

+             )

+             if group:

+                 valid = True

+ 

+         else:

+             user_obj = pagure.lib.query.search_user(

+                 flask.g.session, username=inputname

+             )

+             if user_obj:

+                 valid = True

+ 

+         return valid

+ 

      repo = _get_repo(repo, namespace=namespace)

  

      is_site_admin = pagure.utils.is_admin()
@@ -426,10 +445,22 @@ 

          fedora_assignee = None

          if form.fedora_assignee.data:

              fedora_assignee = form.fedora_assignee.data.strip() or None

+             if fedora_assignee and not _validate_input(fedora_assignee):

+                 raise pagure.exceptions.APIError(

+                     400,

+                     error_code=APIERROR.EINVALIDREQ,

+                     errors=["Invalid user or group name as fedora_assignee"],

+                 )

  

          epel_assignee = None

          if form.epel_assignee.data:

              epel_assignee = form.epel_assignee.data.strip() or None

+             if epel_assignee and not _validate_input(epel_assignee):

+                 raise pagure.exceptions.APIError(

+                     400,

+                     error_code=APIERROR.EINVALIDREQ,

+                     errors=["Invalid user or group name as epel_assignee"],

+                 )

  

          try:

              if repo.bzoverride:

@@ -84,6 +84,46 @@ 

          data = json.loads(output.get_data(as_text=True))

          self.assertDictEqual(data, datainput)

  

+     def test_change_invalid_fedora_assignee(self):

+         """Test the bz endpoint when changing the Fedora assignee while keeping

+         the EPEL one.

+         """

+         headers = {"Authorization": "token aaabbbcccddd"}

+         datainput = {"epel_assignee": "foo", "fedora_assignee": "invalid"}

+         expected_result = {

+             "error": "Invalid or incomplete input submitted",

+             "error_code": "EINVALIDREQ",

+             "errors": ["Invalid user or group name as fedora_assignee"],

+         }

+         output = self.app.post(

+             "/_dg/bzoverrides/somenamespace/test3",

+             data=datainput,

+             headers=headers,

+         )

+         self.assertEqual(output.status_code, 400)

+         data = json.loads(output.get_data(as_text=True))

+         self.assertDictEqual(data, expected_result)

+ 

+     def test_change_invalid_fedora_group_assignee(self):

+         """Test the bz endpoint when changing the Fedora assignee while keeping

+         the EPEL one.

+         """

+         headers = {"Authorization": "token aaabbbcccddd"}

+         datainput = {"epel_assignee": "foo", "fedora_assignee": "@invalid"}

+         expected_result = {

+             "error": "Invalid or incomplete input submitted",

+             "error_code": "EINVALIDREQ",

+             "errors": ["Invalid user or group name as fedora_assignee"],

+         }

+         output = self.app.post(

+             "/_dg/bzoverrides/somenamespace/test3",

+             data=datainput,

+             headers=headers,

+         )

+         self.assertEqual(output.status_code, 400)

+         data = json.loads(output.get_data(as_text=True))

+         self.assertDictEqual(data, expected_result)

+ 

      def test_change_epel_assignee(self):

          """Test the bz endpoint when changing the EPEL assignee while keeping

          the Fedora one.
@@ -103,6 +143,46 @@ 

          data = json.loads(output.get_data(as_text=True))

          self.assertDictEqual(data, expected_result)

  

+     def test_change_invalid_epel_assignee(self):

+         """Test the bz endpoint when changing the EPEL assignee while keeping

+         the Fedora one.

+         """

+         headers = {"Authorization": "token aaabbbcccddd"}

+         datainput = {"epel_assignee": "invalid", "fedora_assignee": None}

+         expected_result = {

+             "error": "Invalid or incomplete input submitted",

+             "error_code": "EINVALIDREQ",

+             "errors": ["Invalid user or group name as epel_assignee"],

+         }

+         output = self.app.post(

+             "/_dg/bzoverrides/somenamespace/test3",

+             data=datainput,

+             headers=headers,

+         )

+         self.assertEqual(output.status_code, 400)

+         data = json.loads(output.get_data(as_text=True))

+         self.assertDictEqual(data, expected_result)

+ 

+     def test_change_invalid_epel_group_assignee(self):

+         """Test the bz endpoint when changing the EPEL assignee while keeping

+         the Fedora one.

+         """

+         headers = {"Authorization": "token aaabbbcccddd"}

+         datainput = {"epel_assignee": "@invalid", "fedora_assignee": None}

+         expected_result = {

+             "error": "Invalid or incomplete input submitted",

+             "error_code": "EINVALIDREQ",

+             "errors": ["Invalid user or group name as epel_assignee"],

+         }

+         output = self.app.post(

+             "/_dg/bzoverrides/somenamespace/test3",

+             data=datainput,

+             headers=headers,

+         )

+         self.assertEqual(output.status_code, 400)

+         data = json.loads(output.get_data(as_text=True))

+         self.assertDictEqual(data, expected_result)

+ 

      def test_reset_fedora_assignees(self):

          """Test the bz endpoint when resetting the Fedora assignee.

          """
@@ -189,7 +269,6 @@ 

          repo = pagure.lib.query.get_authorized_project(

              self.session, "test3", namespace="somenamespace",

          )

-         print(repo.bzoverride)

          self.assertIsNone(repo.bzoverride)

  

      def test_changing_assignees_logged_in_invalid_user(self):

@@ -55,13 +55,14 @@ 

  

      def decorator(func):

          def test_wrapper(*args, **kwargs):

-             with patch.object(dist_git_auth.PDCClient, "__getitem__"):

-                 with patch.object(

-                     dist_git_auth.PDCClient,

-                     "get_paged",

-                     side_effect=pdc_get_paged,

-                 ):

-                     return func(*args, **kwargs)

+             if dist_git_auth.PDCClient:

+                 with patch.object(dist_git_auth.PDCClient, "__getitem__"):

+                     with patch.object(

+                         dist_git_auth.PDCClient,

+                         "get_paged",

+                         side_effect=pdc_get_paged,

+                     ):

+                         return func(*args, **kwargs)

  

          return test_wrapper