diff --git a/pagure/default_config.py b/pagure/default_config.py index ba22e33..24db249 100644 --- a/pagure/default_config.py +++ b/pagure/default_config.py @@ -89,6 +89,10 @@ SHOW_PROJECTS_INDEX = ['repos', 'myrepos', 'myforks'] GIT_URL_SSH = 'ssh://git@localhost.localdomain/' GIT_URL_GIT = 'git://localhost.localdomain/' +# Set to True if git ssh URLs should be displayed even if user +# doesn't have SSH key uploaded +ALWAYS_RENDER_SSH_CLONE_URL = False + # Default queue names for the different services WEBHOOK_CELERY_QUEUE = 'pagure_webhook' LOGCOM_CELERY_QUEUE = 'pagure_logcom' diff --git a/pagure/flask_app.py b/pagure/flask_app.py index ef29267..f83c266 100644 --- a/pagure/flask_app.py +++ b/pagure/flask_app.py @@ -111,6 +111,22 @@ def create_app(config=None): os.path.join(app.root_path, 'static'), ] + @app.context_processor + def context_processor(): + def user_can_clone_ssh(username): + ssh_keys = '' + if flask.g.authenticated: + ssh_keys = pagure.lib.search_user( + flask.g.session, + username=flask.g.fas_user.username + ).public_ssh_key or '' + if not (pagure_config.get('ALWAYS_RENDER_SSH_CLONE_URL') + or ssh_keys.strip()): + return False + return True + + return {'user_can_clone_ssh': user_can_clone_ssh} + auth = pagure_config.get('PAGURE_AUTH', None) if auth in ['fas', 'openid']: # Only import and set flask_fas_openid if it is needed diff --git a/pagure/templates/repo_master.html b/pagure/templates/repo_master.html index e817f5f..64516c4 100644 --- a/pagure/templates/repo_master.html +++ b/pagure/templates/repo_master.html @@ -1,5 +1,24 @@ {% extends "master.html" %} +{% macro print_ssh_url(repo, git_url_ssh, current_user) %} + {% if not user_can_clone_ssh(current_user) %} + + You need to upload SSH key to be able to clone over SSH + + {% elif repo.read_only %} + The permissions on this repository are being updated. + Cloning over SSH is disabled. + {% else %} +