diff --git a/pagure/default_config.py b/pagure/default_config.py index 39faad0..bc6c762 100644 --- a/pagure/default_config.py +++ b/pagure/default_config.py @@ -184,6 +184,9 @@ BLACKLISTED_PROJECTS = [ 'static', 'pv', 'releases', 'new', 'api', 'settings', 'logout', 'login', 'users', 'groups', 'projects', 'ssh_info'] +# List of prefix allowed in project names +ALLOWED_PREFIX = [] + ACLS = { 'issue_create': 'Create a new ticket against this project', 'issue_change_status': 'Change the status of a ticket of this project', diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 5c7e22b..45cc9ff 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -951,7 +951,7 @@ def add_pull_request_flag(session, request, username, percent, comment, url, return 'Flag %s' % action -def new_project(session, user, name, blacklist, +def new_project(session, user, name, blacklist, allowed_prefix, gitfolder, docfolder, ticketfolder, requestfolder, description=None, url=None, avatar_email=None, parent_id=None): @@ -963,7 +963,14 @@ def new_project(session, user, name, blacklist, 'conflicts in URLs with pagure itself' % name ) - second_part = name.partition('/')[2] + user_obj = __get_user(session, user) + allowed_prefix += [user] + [grp.name for grp in user_obj.groups] + + first_part, _, second_part = name.partition('/') + if first_part not in allowed_prefix: + raise pagure.exceptions.PagureException( + 'Your project name may not start with `forks/`.' + ) if len(second_part) == 40: raise pagure.exceptions.PagureException( 'Your project name cannot have exactly 40 characters after ' @@ -976,8 +983,6 @@ def new_project(session, user, name, blacklist, 'The project repo "%s" already exists' % name ) - user_obj = __get_user(session, user) - project = model.Project( name=name, description=description if description else None, diff --git a/pagure/ui/app.py b/pagure/ui/app.py index 3612a28..c0a34ee 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -380,6 +380,7 @@ def new_project(): avatar_email=avatar_email, user=flask.g.fas_user.username, blacklist=APP.config['BLACKLISTED_PROJECTS'], + allowed_prefix=APP.config['ALLOWED_PREFIX'], gitfolder=APP.config['GIT_FOLDER'], docfolder=APP.config['DOCS_FOLDER'], ticketfolder=APP.config['TICKETS_FOLDER'],