Colin Watson has proposed merging 
lp:~cjwatson/launchpad/delete-ssh-key-text-type into lp:launchpad.

Commit message:
Weaken type of key_text in person.deleteSSHKeysFromSSO so that more existing 
keys can be deleted.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/delete-ssh-key-text-type/+merge/352210
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~cjwatson/launchpad/delete-ssh-key-text-type into lp:launchpad.
=== modified file 'lib/lp/registry/browser/tests/test_person_webservice.py'
--- lib/lp/registry/browser/tests/test_person_webservice.py	2018-02-24 09:11:39 +0000
+++ lib/lp/registry/browser/tests/test_person_webservice.py	2018-08-02 16:35:09 +0000
@@ -3,6 +3,8 @@
 
 __metaclass__ = type
 
+import textwrap
+
 from storm.store import Store
 from zope.component import getUtility
 from zope.security.management import endInteraction
@@ -12,7 +14,10 @@
     IPersonSet,
     TeamMembershipStatus,
     )
-from lp.registry.interfaces.ssh import SSHKeyType
+from lp.registry.interfaces.ssh import (
+    ISSHKeySet,
+    SSHKeyType,
+    )
 from lp.registry.interfaces.teammembership import ITeamMembershipSet
 from lp.services.identity.interfaces.account import (
     AccountStatus,
@@ -668,6 +673,34 @@
         self.assertEqual(200, response.status)
         self.assertEqual(1, person.sshkeys.count())
 
+    def test_deleteSSHKeyFromSSO_allows_newlines(self):
+        # Adding these should normally be forbidden, but we want users to be
+        # able to delete existing rows.
+        with admin_logged_in():
+            person = removeSecurityProxy(self.factory.makePerson())
+            kind, data, comment = self.factory.makeSSHKeyText().split(" ", 2)
+            key_text = "%s %s %s\n" % (kind, textwrap.fill(data), comment)
+            key = getUtility(ISSHKeySet).new(person, key_text, check_key=False)
+            openid_id = person.account.openid_identifiers.any().identifier
+        response = self.deleteSSHKeyFromSSO(
+            openid_id, key.getFullKeyText())
+
+        self.assertEqual(200, response.status)
+        self.assertEqual(0, person.sshkeys.count())
+
+    def test_deleteSSHKeyFromSSO_allows_newlines_dry_run(self):
+        with admin_logged_in():
+            person = removeSecurityProxy(self.factory.makePerson())
+            kind, data, comment = self.factory.makeSSHKeyText().split(" ", 2)
+            key_text = "%s %s %s\n" % (kind, textwrap.fill(data), comment)
+            key = getUtility(ISSHKeySet).new(person, key_text, check_key=False)
+            openid_id = person.account.openid_identifiers.any().identifier
+        response = self.deleteSSHKeyFromSSO(
+            openid_id, key.getFullKeyText(), dry_run=True)
+
+        self.assertEqual(200, response.status)
+        self.assertEqual(1, person.sshkeys.count())
+
     def test_deleteSSHKeyFromSSO_is_restricted(self, dry_run=False):
         with admin_logged_in():
             target = self.factory.makePerson()

=== modified file 'lib/lp/registry/interfaces/person.py'
--- lib/lp/registry/interfaces/person.py	2018-05-14 10:59:35 +0000
+++ lib/lp/registry/interfaces/person.py	2018-08-02 16:35:09 +0000
@@ -2352,8 +2352,9 @@
     @operation_parameters(
         openid_identifier=TextLine(
             title=_("OpenID identifier suffix"), required=True),
-        key_text=TextLine(
-            title=_("SSH key text"), required=True),
+        # This is more liberal than the type for adding keys, in order to
+        # avoid existing keys being undeleteable.
+        key_text=Text(title=_("SSH key text"), required=True),
         dry_run=Bool(_("Don't save changes")))
     @export_write_operation()
     @operation_for_version("devel")

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : launchpad-reviewers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to