From 541581aa18e643e1189d317cb267470f1d22988d Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Apr 30 2017 15:27:34 +0000 Subject: [PATCH 1/13] Add something in the UI indicating that the project is private Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/templates/repo_master.html b/pagure/templates/repo_master.html index 4a1580c..734dc0b 100644 --- a/pagure/templates/repo_master.html +++ b/pagure/templates/repo_master.html @@ -14,6 +14,10 @@ repo=repo.name, username=username, namespace=repo.namespace)}}"> + {% if repo.private %} + + {% endif %} {% if repo.is_fork -%} {{ repo.user.user }}/{{ From 2a81d6d4578ac4cbdc746684aae5c62d0696b38f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Apr 30 2017 15:27:34 +0000 Subject: [PATCH 2/13] Namespace private project when they are created This way there are much less chances to reveal a private project by trying to brute force the new project API/code path (which would deny creating a project if there is already one of the same name but is private) Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 6753843..da0d929 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1280,6 +1280,9 @@ def new_project(session, user, name, blacklist, allowed_prefix, allowed_prefix.append(user) if not namespace: namespace = user + if private: + allowed_prefix.append(user) + namespace = user if namespace and namespace not in allowed_prefix: raise pagure.exceptions.PagureException( @@ -1819,6 +1822,7 @@ def fork_project(session, user, repo, gitfolder, name=repo.name, namespace=repo.namespace, description=repo.description, + private=repo.private, user_id=user_obj.id, parent_id=repo.id, is_fork=True, diff --git a/pagure/templates/new_project.html b/pagure/templates/new_project.html index 8ffb023..fc45aa3 100644 --- a/pagure/templates/new_project.html +++ b/pagure/templates/new_project.html @@ -35,3 +35,24 @@ {% endblock %} + + +{% if config.get('PRIVATE_PROJECTS', False) %} +{% block jscripts %} +{{ super() }} + +{% endblock %} +{% endif %} diff --git a/pagure/ui/app.py b/pagure/ui/app.py index 563180b..9bce789 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -450,6 +450,9 @@ def new_project(): private = False if pagure.APP.config.get('PRIVATE_PROJECTS', False): private = form.private.data + # Though it's not need for new_project() it fixes the redirect after + if private: + namespace=flask.g.fas_user.username try: pagure.lib.new_project( From 6efa0892b1a00c531a24e43a1c258de54453850d Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Apr 30 2017 15:27:34 +0000 Subject: [PATCH 3/13] Allow private project to be made public but not the other way around Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/templates/settings.html b/pagure/templates/settings.html index 7da9140..7b7d0de 100644 --- a/pagure/templates/settings.html +++ b/pagure/templates/settings.html @@ -41,7 +41,7 @@ tags for project (separated by commas) - {% if config.get('PRIVATE_PROJECTS', False) %} + {% if config.get('PRIVATE_PROJECTS', False) and repo.private %}