diff --git a/pagure/api/project.py b/pagure/api/project.py index 3f26404..a2a1acd 100644 --- a/pagure/api/project.py +++ b/pagure/api/project.py @@ -291,12 +291,13 @@ def api_new_project(): name = form.name.data description = form.description.data namespace = form.namespace.data - if namespace: - namespace = namespace.strip() url = form.url.data avatar_email = form.avatar_email.data create_readme = form.create_readme.data + if namespace: + namespace = namespace.strip() + try: message = pagure.lib.new_project( SESSION, @@ -316,6 +317,7 @@ def api_new_project(): userobj=user, prevent_40_chars=APP.config.get( 'OLD_VIEW_COMMIT_ENABLED', False), + user_ns=APP.config.get('USER_NAMESPACE', False), ) SESSION.commit() pagure.lib.git.generate_gitolite_acls() diff --git a/pagure/default_config.py b/pagure/default_config.py index 6dff333..a1c002d 100644 --- a/pagure/default_config.py +++ b/pagure/default_config.py @@ -229,3 +229,6 @@ BOOTSTRAP_URLS_JS = 'https://apps.fedoraproject.org/global/' \ # List of the type of CI service supported by this pagure instance PAGURE_CI_SERVICES = [] + +# Boolean to turn on project being by default in the user's namespace +USER_NAMESPACE = False diff --git a/pagure/forms.py b/pagure/forms.py index 85b1768..e5daf63 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -158,7 +158,8 @@ class ProjectForm(ProjectFormSimplified): self.namespace.choices = [ (namespace, namespace) for namespace in kwargs['namespaces'] ] - self.namespace.choices.insert(0, ('', '')) + if not pagure.APP.config.get('USER_NAMESPACE', False): + self.namespace.choices.insert(0, ('', '')) class IssueFormSimplied(PagureForm): diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 1553754..dbbe5c8 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1049,7 +1049,7 @@ def new_project(session, user, name, blacklist, allowed_prefix, gitfolder, docfolder, ticketfolder, requestfolder, description=None, url=None, avatar_email=None, parent_id=None, add_readme=False, userobj=None, - prevent_40_chars=False, namespace=None): + prevent_40_chars=False, namespace=None, user_ns=False): ''' Create a new project based on the information provided. ''' if name in blacklist or ( @@ -1061,6 +1061,10 @@ def new_project(session, user, name, blacklist, allowed_prefix, user_obj = get_user(session, user) allowed_prefix = allowed_prefix + [grp for grp in user_obj.groups] + if user_ns: + allowed_prefix.append(user) + if not namespace: + namespace = user if namespace and namespace not in allowed_prefix: raise pagure.exceptions.PagureException( diff --git a/pagure/ui/app.py b/pagure/ui/app.py index 587e054..302e70b 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -393,6 +393,8 @@ def new_project(): namespaces = APP.config['ALLOWED_PREFIX'][:] if user: namespaces.extend([grp for grp in user.groups]) + if APP.config.get('USER_NAMESPACE', False): + namespaces.insert(0, flask.g.fas_user.username) form = pagure.forms.ProjectForm(namespaces=namespaces) @@ -425,6 +427,7 @@ def new_project(): userobj=user, prevent_40_chars=APP.config.get( 'OLD_VIEW_COMMIT_ENABLED', False), + user_ns=APP.config.get('USER_NAMESPACE', False), ) SESSION.commit() pagure.lib.git.generate_gitolite_acls()