From 91c9c0b396ffaa9b9b88b888fc871597e7987fe5 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 31 2017 08:16:40 +0000 Subject: Add a configuration key to disable managing user's ssh key in pagure Some deployment may use a different system where the ssh keys are handled outside of pagure. With this configuration key you can turn off this part of pagure so it does not get in your way. Fixes #2465 Signed-off-by: Pierre-Yves Chibon --- diff --git a/doc/configuration.rst b/doc/configuration.rst index 8010ab9..117d08e 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -589,6 +589,17 @@ prevent users from deleting branches in their git repositories. Defaults to: ``True``. +======= +LOCAL_SSH_KEY +~~~~~~~~~~~~~ + +This configuration key allows to let pagure administrate the user's ssh keys +or have a third party tool do it for you. +In most cases, it will be fine to let pagure handle it. + +Defaults to ``True``. + + OLD_VIEW_COMMIT_ENABLED ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/pagure/default_config.py b/pagure/default_config.py index f69e788..5dd0813 100644 --- a/pagure/default_config.py +++ b/pagure/default_config.py @@ -68,6 +68,9 @@ PRIVATE_PROJECTS = False # Enable / Disable deleting branches in the UI ALLOW_DELETE_BRANCH = True +# Enable / Disable having pagure manage the user's ssh keys +LOCAL_SSH_KEY = True + # Enables / Disables showing all the projects by default on the front page SHOW_PROJECTS_INDEX = ['repos', 'myrepos', 'myforks'] diff --git a/pagure/templates/user_settings.html b/pagure/templates/user_settings.html index 23c044a..eabe980 100644 --- a/pagure/templates/user_settings.html +++ b/pagure/templates/user_settings.html @@ -98,6 +98,7 @@ + {% if config.get('LOCAL_SSH_KEY', True) %}
Authentication @@ -113,7 +114,7 @@
- + {% endif %}
diff --git a/pagure/ui/app.py b/pagure/ui/app.py index e20a2c3..4079ade 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -564,7 +564,7 @@ def user_settings(): user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.UserSettingsForm() - if form.validate_on_submit(): + if form.validate_on_submit() and APP.config.get('LOCAL_SSH_KEY', True): ssh_key = form.ssh_key.data try: diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index ef9b95b..35ff39b 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -514,6 +514,74 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get('/settings/') self.assertEqual(output.status_code, 302) + @patch.dict('pagure.APP.config', {'LOCAL_SSH_KEY': False}) + @patch('pagure.ui.app.admin_session_timedout') + def test_user_settings_no_local_ssh_key_ui(self, ast): + """ Test the ssh key field doesn't show when pagure is not managing + the ssh keys. """ + ast.return_value = False + self.test_new_project() + + user = tests.FakeUser(username = 'foo') + with tests.user_set(pagure.APP, user): + output = self.app.get('/settings/') + self.assertEqual(output.status_code, 200) + self.assertIn( + '
\n Basic Information\n' + '
', output.data) + self.assertNotIn( + '', output.data) + + @patch.dict('pagure.APP.config', {'LOCAL_SSH_KEY': False}) + @patch('pagure.ui.app.admin_session_timedout') + def test_user_settings_no_local_ssh_key(self, ast): + """ Test the user_settings endpoint when pagure is not managing the + ssh keys. """ + ast.return_value = False + self.test_new_project() + + user = tests.FakeUser(username = 'foo') + with tests.user_set(pagure.APP, user): + output = self.app.get('/settings/') + self.assertEqual(output.status_code, 200) + self.assertIn( + '
\n Basic Information\n' + '
', output.data) + self.assertNotIn( + '', output.data) + + # Before + user = pagure.lib.get_user(self.session, 'foo') + self.assertIsNone(user.public_ssh_key) + + csrf_token = self.get_csrf(output=output) + + data = { + 'ssh_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDUkub32fZnNI' + '1zJYs43vhhx3c6IcYo4yzhw1gQ37BLhrrNeS6x8l5PKX4J8ZP5' + '1XhViPaLbeOpl94Vm5VSCbLy0xtY9KwLhMkbKj7g6vvfxLm2sT' + 'Osb15j4jzIkUYYgIE7cHhZMCLWR6UA1c1HEzo6mewMDsvpQ9wk' + 'cDnAuXjK3Q==', + 'csrf_token': csrf_token + } + + output = self.app.post( + '/settings/', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertNotIn('Public ssh key updated', output.data) + self.assertIn( + '
\n Basic Information\n' + '
', output.data) + self.assertNotIn( + '