From 1e87ae21fee40466f6c5fd5f8be88ae7c8a4291e Mon Sep 17 00:00:00 2001 From: Slavek Kabrda Date: Jun 20 2018 13:31:12 +0000 Subject: Make _get_project respect CASE_SENSITIVE from settings instead of arg Fixes #3334 --- diff --git a/pagure/api/ci/jenkins.py b/pagure/api/ci/jenkins.py index caa0722..724506e 100644 --- a/pagure/api/ci/jenkins.py +++ b/pagure/api/ci/jenkins.py @@ -51,8 +51,7 @@ def jenkins_ci_notification( """ project = pagure.lib._get_project( - flask.g.session, repo, user=username, namespace=namespace, - case=pagure.config.config.get('CASE_SENSITIVE', False)) + flask.g.session, repo, user=username, namespace=namespace) flask.g.repo_locked = True flask.g.repo = project if not project: diff --git a/pagure/api/project.py b/pagure/api/project.py index 9690037..5ef3a90 100644 --- a/pagure/api/project.py +++ b/pagure/api/project.py @@ -870,8 +870,7 @@ def api_new_project(): result = task.get() project = pagure.lib._get_project( flask.g.session, name=result['repo'], - namespace=result['namespace'], - case=pagure_config.get('CASE_SENSITIVE', False)) + namespace=result['namespace']) output = {'message': 'Project "%s" created' % project.fullname} except pagure.exceptions.PagureException as err: raise pagure.exceptions.APIError( diff --git a/pagure/hooks/files/default_hook.py b/pagure/hooks/files/default_hook.py index 371c37d..6eea6a3 100755 --- a/pagure/hooks/files/default_hook.py +++ b/pagure/hooks/files/default_hook.py @@ -187,8 +187,7 @@ def run_as_post_receive_hook(): session = pagure.lib.create_session(_config['DB_URL']) project = pagure.lib._get_project( - session, repo, user=username, namespace=namespace, - case=_config.get('CASE_SENSITIVE', False)) + session, repo, user=username, namespace=namespace) for line in sys.stdin: if _config.get('HOOK_DEBUG', False): diff --git a/pagure/hooks/files/pagure_force_commit_hook.py b/pagure/hooks/files/pagure_force_commit_hook.py index daea5c8..4b04f81 100755 --- a/pagure/hooks/files/pagure_force_commit_hook.py +++ b/pagure/hooks/files/pagure_force_commit_hook.py @@ -36,8 +36,7 @@ def run_as_pre_receive_hook(): print('namspaces:', namespace) repo = pagure.lib._get_project( - session, reponame, user=username, namespace=namespace, - case=_config.get('CASE_SENSITIVE', False)) + session, reponame, user=username, namespace=namespace) if not repo: print('Unknown repo %s of username: %s in namespace %s' % ( diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index bab85f0..bafd551 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -2299,9 +2299,11 @@ def search_projects( return query.all() -def _get_project(session, name, user=None, namespace=None, case=False): +def _get_project(session, name, user=None, namespace=None): '''Get a project from the database ''' + case = pagure_config.get('CASE_SENSITIVE', False) + query = session.query( model.Project ) @@ -5054,7 +5056,6 @@ def get_authorized_project( ''' repo = pagure.lib._get_project( session, project_name, user, namespace, - case=pagure_config.get('CASE_SENSITIVE', False) ) if repo and repo.private and not pagure.utils.is_repo_user(repo): diff --git a/pagure/lib/git.py b/pagure/lib/git.py index b2322e1..57dd0df 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -395,8 +395,7 @@ def get_project_from_json(session, jsondata): project_user = user.username project = pagure.lib._get_project( - session, name, user=project_user, namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, name, user=project_user, namespace=namespace) if not project: parent = None @@ -436,8 +435,7 @@ def get_project_from_json(session, jsondata): session.commit() project = pagure.lib._get_project( - session, name, user=user.username, namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, name, user=user.username, namespace=namespace) tags = jsondata.get('tags', None) if tags: @@ -520,8 +518,7 @@ def update_ticket_from_git( """ repo = pagure.lib._get_project( - session, reponame, user=username, namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, reponame, user=username, namespace=namespace) if not repo: raise pagure.exceptions.PagureException( @@ -702,8 +699,7 @@ def update_request_from_git( """ repo = pagure.lib._get_project( - session, reponame, user=username, namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, reponame, user=username, namespace=namespace) if not repo: raise pagure.exceptions.PagureException( diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index fed12b9..7af40a5 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -128,8 +128,7 @@ def generate_gitolite_acls( project = None if name and name != -1: project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) elif name == -1: project = name @@ -179,8 +178,7 @@ def delete_project( """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) if not project: raise RuntimeError( @@ -263,8 +261,7 @@ def create_project(self, session, username, namespace, name, add_readme, """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name) with project.lock('WORKER'): userobj = pagure.lib.search_user(session, username=username) @@ -410,8 +407,7 @@ def update_git(self, session, name, namespace, user, depending on the argument specified. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) project_lock = 'WORKER' if ticketuid is not None: @@ -444,8 +440,7 @@ def clean_git(self, session, name, namespace, user, ticketuid): for tickets. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER_TICKET'): obj = pagure.lib.get_issue_by_uid(session, ticketuid) @@ -468,8 +463,7 @@ def update_file_in_git(self, session, name, namespace, user, branch, branchto, """ userobj = pagure.lib.search_user(session, username=username) project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER'): pagure.lib.git._update_file_in_git( @@ -486,8 +480,7 @@ def delete_branch(self, session, name, namespace, user, branchname): """ Delete a branch from a git repo. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER'): repo_obj = pygit2.Repository( @@ -526,12 +519,10 @@ def fork(self, session, name, namespace, user_owner, user_forker, """ repo_from = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user_owner, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user_owner) repo_to = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user_forker, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user_forker) with repo_to.lock('WORKER'): reponame = os.path.join(pagure_config['GIT_FOLDER'], repo_from.path) @@ -641,8 +632,7 @@ def refresh_remote_pr(self, session, name, namespace, user, requestid): pull-request. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) request = pagure.lib.search_pull_requests( session, project_id=project.id, requestid=requestid) @@ -669,8 +659,7 @@ def refresh_pr_cache(self, session, name, namespace, user): """ Refresh the merge status cached of pull-requests. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) pagure.lib.reset_status_pull_request(session, project) @@ -682,8 +671,7 @@ def merge_pull_request(self, session, name, namespace, user, requestid, """ Merge pull-request. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER'): request = pagure.lib.search_pull_requests( @@ -717,8 +705,7 @@ def add_file_to_git(self, session, name, namespace, user, user_attacher, """ Add a file to the specified git repo. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER'): issue = pagure.lib.get_issue_by_uid(session, issueuid) @@ -747,8 +734,7 @@ def project_dowait(self, session, name, namespace, user): assert pagure_config.get('ALLOW_PROJECT_DOWAIT', False) project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER'): time.sleep(10) @@ -764,8 +750,7 @@ def sync_pull_ref(self, session, name, namespace, user, requestid): allowing local checkout of the pull-request. """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) with project.lock('WORKER'): request = pagure.lib.search_pull_requests( diff --git a/pagure/lib/tasks_services.py b/pagure/lib/tasks_services.py index c93ab1c..9be97fb 100644 --- a/pagure/lib/tasks_services.py +++ b/pagure/lib/tasks_services.py @@ -126,8 +126,7 @@ def webhook_notification( """ project = pagure.lib._get_project( - session, namespace=namespace, name=name, user=user, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, namespace=namespace, name=name, user=user) if not project: session.close() @@ -172,8 +171,7 @@ def log_commit_send_notifications( name, username) project = pagure.lib._get_project( - session, name, user=username, namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, name, user=username, namespace=namespace) if not project: _log.info('No project found') @@ -246,8 +244,7 @@ def load_json_commits_to_db( name, username) project = pagure.lib._get_project( - session, name, user=username, namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)) + session, name, user=username, namespace=namespace) if not project: _log.info('LOADJSON: No project found') diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index 5de40dd..9b9a7b9 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -1082,8 +1082,7 @@ def fork_project(repo, username=None, namespace=None): if pagure.lib._get_project( flask.g.session, repo.name, user=flask.g.fas_user.username, - namespace=namespace, - case=pagure_config.get('CASE_SENSITIVE', False)): + namespace=namespace): return flask.redirect(flask.url_for( 'ui_ns.view_repo', repo=repo.name, @@ -1521,8 +1520,7 @@ def fork_edit_file( flask.abort(400) if pagure.lib._get_project( - flask.g.session, repo.name, user=flask.g.fas_user.username, - case=pagure_config.get('CASE_SENSITIVE', False)): + flask.g.session, repo.name, user=flask.g.fas_user.username): flask.flash('You had already forked this project') return flask.redirect(flask.url_for( 'ui_ns.edit_file', diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index 0b38fc3..2deebe2 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -619,6 +619,35 @@ class PagureFlaskApptests(tests.Modeltests): self.assertTrue(os.path.exists( os.path.join(self.path, 'repos', 'requests', '%s.git' % project))) + @patch.dict('pagure.config.config', {'CASE_SENSITIVE': True}) + def test_new_project_case_sensitive(self): + tests.create_projects(self.session) + tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True) + + output = self.app.get('/test') + self.assertEqual(output.status_code, 200) + + output = self.app.get('/TEST') + self.assertEqual(output.status_code, 404) + + user = tests.FakeUser() + user.username = 'foo' + with tests.user_set(self.app.application, user): + output = self.app.get('/new/') + self.assertEqual(output.status_code, 200) + + csrf_token = self.get_csrf(output=output) + data = { + 'description': 'TEST', + 'name': 'TEST', + 'csrf_token': csrf_token, + 'create_readme': True, + } + self.app.post('/new/', data=data, follow_redirects=True) + + output = self.app.get('/TEST') + self.assertEqual(output.status_code, 200) + @patch('pagure.ui.app.admin_session_timedout') def test_user_settings(self, ast): """ Test the user_settings endpoint. """