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( + '