summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/gl_objects/users.py71
-rw-r--r--docs/gl_objects/users.rst218
-rw-r--r--gitlab/v4/objects.py24
-rw-r--r--tools/python_test_v4.py47
4 files changed, 222 insertions, 138 deletions
diff --git a/docs/gl_objects/users.py b/docs/gl_objects/users.py
index 798678d..c3618b9 100644
--- a/docs/gl_objects/users.py
+++ b/docs/gl_objects/users.py
@@ -36,37 +36,44 @@ user.unblock()
# end block
# key list
-keys = gl.user_keys.list(user_id=1)
-# or
keys = user.keys.list()
# end key list
# key get
-key = gl.user_keys.list(1, user_id=1)
-# or
key = user.keys.get(1)
# end key get
# key create
-k = gl.user_keys.create({'title': 'my_key',
- 'key': open('/home/me/.ssh/id_rsa.pub').read()},
- user_id=2)
-# or
k = user.keys.create({'title': 'my_key',
'key': open('/home/me/.ssh/id_rsa.pub').read()})
# end key create
# key delete
-gl.user_keys.delete(1, user_id=1)
-# or
user.keys.delete(1)
# or
key.delete()
# end key delete
-# email list
-emails = gl.user_emails.list(user_id=1)
+# gpgkey list
+gpgkeys = user.gpgkeys.list()
+# end gpgkey list
+
+# gpgkey get
+gpgkey = user.gpgkeys.get(1)
+# end gpgkey get
+
+# gpgkey create
+# get the key with `gpg --export -a GPG_KEY_ID`
+k = user.gpgkeys.create({'key': public_key_content})
+# end gpgkey create
+
+# gpgkey delete
+user.gpgkeys.delete(1)
# or
+gpgkey.delete()
+# end gpgkey delete
+
+# email list
emails = user.emails.list()
# end email list
@@ -77,14 +84,10 @@ email = user.emails.get(1)
# end email get
# email create
-k = gl.user_emails.create({'email': 'foo@bar.com'}, user_id=2)
-# or
k = user.emails.create({'email': 'foo@bar.com'})
# end email create
# email delete
-gl.user_emails.delete(1, user_id=1)
-# or
user.emails.delete(1)
# or
email.delete()
@@ -94,39 +97,3 @@ email.delete()
gl.auth()
current_user = gl.user
# end currentuser get
-
-# currentuser key list
-keys = gl.user.keys.list()
-# end currentuser key list
-
-# currentuser key get
-key = gl.user.keys.get(1)
-# end currentuser key get
-
-# currentuser key create
-key = gl.user.keys.create({'id': 'my_key', 'key': key_content})
-# end currentuser key create
-
-# currentuser key delete
-gl.user.keys.delete(1)
-# or
-key.delete()
-# end currentuser key delete
-
-# currentuser email list
-emails = gl.user.emails.list()
-# end currentuser email list
-
-# currentuser email get
-email = gl.user.emails.get(1)
-# end currentuser email get
-
-# currentuser email create
-email = gl.user.emails.create({'email': 'foo@bar.com'})
-# end currentuser email create
-
-# currentuser email delete
-gl.user.emails.delete(1)
-# or
-email.delete()
-# end currentuser email delete
diff --git a/docs/gl_objects/users.rst b/docs/gl_objects/users.rst
index 8df93b0..d5b2976 100644
--- a/docs/gl_objects/users.rst
+++ b/docs/gl_objects/users.rst
@@ -1,14 +1,32 @@
-#####
+######################
+Users and current user
+######################
+
+The Gitlab API exposes user-related method that can be manipulated by admins
+only.
+
+The currently logged-in user is also exposed.
+
Users
-#####
+=====
+
+References
+----------
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.User`
+ + :class:`gitlab.v4.objects.UserManager`
+ + :attr:`gitlab.Gitlab.users`
-Use :class:`~gitlab.objects.User` objects to manipulate repository branches.
+* v3 API:
-To create :class:`~gitlab.objects.User` objects use the
-:attr:`gitlab.Gitlab.users` manager.
+ + :class:`gitlab.v3.objects.User`
+ + :class:`gitlab.v3.objects.UserManager`
+ + :attr:`gitlab.Gitlab.users`
Examples
-========
+--------
Get the list of users:
@@ -52,14 +70,97 @@ Block/Unblock a user:
:start-after: # block
:end-before: # end block
+Current User
+============
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.CurrentUser`
+ + :class:`gitlab.v4.objects.CurrentUserManager`
+ + :attr:`gitlab.Gitlab.user`
+
+* v3 API:
+
+ + :class:`gitlab.v3.objects.CurrentUser`
+ + :class:`gitlab.v3.objects.CurrentUserManager`
+ + :attr:`gitlab.Gitlab.user`
+
+Examples
+--------
+
+Get the current user:
+
+.. literalinclude:: users.py
+ :start-after: # currentuser get
+ :end-before: # end currentuser get
+
+GPG keys
+========
+
+You can manipulate GPG keys for the current user and for the other users if you
+are admin.
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.CurrentUserGPGKey`
+ + :class:`gitlab.v4.objects.CurrentUserGPGKeyManager`
+ + :attr:`gitlab.v4.objects.CurrentUser.gpgkeys`
+ + :class:`gitlab.v4.objects.UserGPGKey`
+ + :class:`gitlab.v4.objects.UserGPGKeyManager`
+ + :attr:`gitlab.v4.objects.User.gpgkeys`
+
+Exemples
+--------
+
+List GPG keys for a user:
+
+.. literalinclude:: users.py
+ :start-after: # gpgkey list
+ :end-before: # end gpgkey list
+
+Get an GPG gpgkey for a user:
+
+.. literalinclude:: users.py
+ :start-after: # gpgkey get
+ :end-before: # end gpgkey get
+
+Create an GPG gpgkey for a user:
+
+.. literalinclude:: users.py
+ :start-after: # gpgkey create
+ :end-before: # end gpgkey create
+
+Delete an GPG gpgkey for a user:
+
+.. literalinclude:: users.py
+ :start-after: # gpgkey delete
+ :end-before: # end gpgkey delete
+
SSH keys
========
-Use the :class:`~gitlab.objects.UserKey` objects to manage user keys.
+You can manipulate SSH keys for the current user and for the other users if you
+are admin.
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.CurrentUserKey`
+ + :class:`gitlab.v4.objects.CurrentUserKeyManager`
+ + :attr:`gitlab.v4.objects.CurrentUser.keys`
+ + :class:`gitlab.v4.objects.UserKey`
+ + :class:`gitlab.v4.objects.UserKeyManager`
+ + :attr:`gitlab.v4.objects.User.keys`
-To create :class:`~gitlab.objects.UserKey` objects use the
-:attr:`User.keys <gitlab.objects.User.keys>` or :attr:`gitlab.Gitlab.user_keys`
-managers.
+* v3 API:
+
+ + :class:`gitlab.v3.objects.CurrentUserKey`
+ + :class:`gitlab.v3.objects.CurrentUserKeyManager`
+ + :attr:`gitlab.v3.objects.CurrentUser.keys`
+ + :attr:`gitlab.Gitlab.user.keys`
+ + :class:`gitlab.v3.objects.UserKey`
+ + :class:`gitlab.v3.objects.UserKeyManager`
+ + :attr:`gitlab.v3.objects.User.keys`
+ + :attr:`gitlab.Gitlab.user_keys`
Exemples
--------
@@ -91,10 +192,28 @@ Delete an SSH key for a user:
Emails
======
-Use the :class:`~gitlab.objects.UserEmail` objects to manage user emails.
+You can manipulate emails for the current user and for the other users if you
+are admin.
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.CurrentUserEmail`
+ + :class:`gitlab.v4.objects.CurrentUserEmailManager`
+ + :attr:`gitlab.v4.objects.CurrentUser.emails`
+ + :class:`gitlab.v4.objects.UserEmail`
+ + :class:`gitlab.v4.objects.UserEmailManager`
+ + :attr:`gitlab.v4.objects.User.emails`
-To create :class:`~gitlab.objects.UserEmail` objects use the :attr:`User.emails
-<gitlab.objects.User.emails>` or :attr:`gitlab.Gitlab.user_emails` managers.
+* v3 API:
+
+ + :class:`gitlab.v3.objects.CurrentUserEmail`
+ + :class:`gitlab.v3.objects.CurrentUserEmailManager`
+ + :attr:`gitlab.v3.objects.CurrentUser.emails`
+ + :attr:`gitlab.Gitlab.user.emails`
+ + :class:`gitlab.v3.objects.UserEmail`
+ + :class:`gitlab.v3.objects.UserEmailManager`
+ + :attr:`gitlab.v3.objects.User.emails`
+ + :attr:`gitlab.Gitlab.user_emails`
Exemples
--------
@@ -122,76 +241,3 @@ Delete an email for a user:
.. literalinclude:: users.py
:start-after: # email delete
:end-before: # end email delete
-
-Current User
-============
-
-Use the :class:`~gitlab.objects.CurrentUser` object to get information about
-the currently logged-in user.
-
-Use the :class:`~gitlab.objects.CurrentUserKey` objects to manage user keys.
-
-To create :class:`~gitlab.objects.CurrentUserKey` objects use the
-:attr:`gitlab.objects.CurrentUser.keys <CurrentUser.keys>` manager.
-
-Use the :class:`~gitlab.objects.CurrentUserEmail` objects to manage user emails.
-
-To create :class:`~gitlab.objects.CurrentUserEmail` objects use the
-:attr:`gitlab.objects.CurrentUser.emails <CurrentUser.emails>` manager.
-
-Examples
---------
-
-Get the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser get
- :end-before: # end currentuser get
-
-List the current user SSH keys:
-
-.. literalinclude:: users.py
- :start-after: # currentuser key list
- :end-before: # end currentuser key list
-
-Get a key for the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser key get
- :end-before: # end currentuser key get
-
-Create a key for the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser key create
- :end-before: # end currentuser key create
-
-Delete a key for the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser key delete
- :end-before: # end currentuser key delete
-
-List the current user emails:
-
-.. literalinclude:: users.py
- :start-after: # currentuser email list
- :end-before: # end currentuser email list
-
-Get an email for the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser email get
- :end-before: # end currentuser email get
-
-Create an email for the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser email create
- :end-before: # end currentuser email create
-
-Delete an email for the current user:
-
-.. literalinclude:: users.py
- :start-after: # currentuser email delete
- :end-before: # end currentuser email delete
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 535c23c..55eb004 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -123,6 +123,17 @@ class UserEmailManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager):
_create_attrs = (('email', ), tuple())
+class UserGPGKey(ObjectDeleteMixin, RESTObject):
+ pass
+
+
+class UserGPGKeyManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager):
+ _path = '/users/%(user_id)s/gpg_keys'
+ _obj_cls = UserGPGKey
+ _from_parent_attrs = {'user_id': 'id'}
+ _create_attrs = (('key',), tuple())
+
+
class UserKey(ObjectDeleteMixin, RESTObject):
pass
@@ -155,6 +166,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
_short_print_attr = 'username'
_managers = (
('emails', 'UserEmailManager'),
+ ('gpgkeys', 'UserGPGKeyManager'),
('keys', 'UserKeyManager'),
('projects', 'UserProjectManager'),
)
@@ -241,6 +253,17 @@ class CurrentUserEmailManager(RetrieveMixin, CreateMixin, DeleteMixin,
_create_attrs = (('email', ), tuple())
+class CurrentUserGPGKey(ObjectDeleteMixin, RESTObject):
+ pass
+
+
+class CurrentUserGPGKeyManager(RetrieveMixin, CreateMixin, DeleteMixin,
+ RESTManager):
+ _path = '/user/gpg_keys'
+ _obj_cls = CurrentUserGPGKey
+ _create_attrs = (('key',), tuple())
+
+
class CurrentUserKey(ObjectDeleteMixin, RESTObject):
_short_print_attr = 'title'
@@ -257,6 +280,7 @@ class CurrentUser(RESTObject):
_short_print_attr = 'username'
_managers = (
('emails', 'CurrentUserEmailManager'),
+ ('gpgkeys', 'CurrentUserGPGKeyManager'),
('keys', 'CurrentUserKeyManager'),
)
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index 1c1d4d3..8a8be68 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -20,6 +20,37 @@ DEPLOY_KEY = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFdRyjJQh+1niBpXqE2I8dzjG"
"rke9IepE7SPBT41C+YtUX4dfDZDmczM1cE0YL/krdUCfuZHMa4ZS2YyNd6slufc"
"vn bar@foo")
+GPG_KEY = '''-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFn5mzYBCADH6SDVPAp1zh/hxmTi0QplkOfExBACpuY6OhzNdIg+8/528b3g
+Y5YFR6T/HLv/PmeHskUj21end1C0PNG2T9dTx+2Vlh9ISsSG1kyF9T5fvMR3bE0x
+Dl6S489CXZrjPTS9SHk1kF+7dwjUxLJyxF9hPiSihFefDFu3NeOtG/u8vbC1mewQ
+ZyAYue+mqtqcCIFFoBz7wHKMWjIVSJSyTkXExu4OzpVvy3l2EikbvavI3qNz84b+
+Mgkv/kiBlNoCy3CVuPk99RYKZ3lX1vVtqQ0OgNGQvb4DjcpyjmbKyibuZwhDjIOh
+au6d1OyEbayTntd+dQ4j9EMSnEvm/0MJ4eXPABEBAAG0G0dpdGxhYlRlc3QxIDxm
+YWtlQGZha2UudGxkPokBNwQTAQgAIQUCWfmbNgIbAwULCQgHAgYVCAkKCwIEFgID
+AQIeAQIXgAAKCRBgxELHf8f3hF3yB/wNJlWPKY65UsB4Lo0hs1OxdxCDqXogSi0u
+6crDEIiyOte62pNZKzWy8TJcGZvznRTZ7t8hXgKFLz3PRMcl+vAiRC6quIDUj+2V
+eYfwaItd1lUfzvdCaC7Venf4TQ74f5vvNg/zoGwE6eRoSbjlLv9nqsxeA0rUBUQL
+LYikWhVMP3TrlfgfduYvh6mfgh57BDLJ9kJVpyfxxx9YLKZbaas9sPa6LgBtR555
+JziUxHmbEv8XCsUU8uoFeP1pImbNBplqE3wzJwzOMSmmch7iZzrAwfN7N2j3Wj0H
+B5kQddJ9dmB4BbU0IXGhWczvdpxboI2wdY8a1JypxOdePoph/43iuQENBFn5mzYB
+CADnTPY0Zf3d9zLjBNgIb3yDl94uOcKCq0twNmyjMhHzGqw+UMe9BScy34GL94Al
+xFRQoaL+7P8hGsnsNku29A/VDZivcI+uxTx4WQ7OLcn7V0bnHV4d76iky2ufbUt/
+GofthjDs1SonePO2N09sS4V4uK0d5N4BfCzzXgvg8etCLxNmC9BGt7AaKUUzKBO4
+2QvNNaC2C/8XEnOgNWYvR36ylAXAmo0sGFXUsBCTiq1fugS9pwtaS2JmaVpZZ3YT
+pMZlS0+SjC5BZYFqSmKCsA58oBRzCxQz57nR4h5VEflgD+Hy0HdW0UHETwz83E6/
+U0LL6YyvhwFr6KPq5GxinSvfABEBAAGJAR8EGAEIAAkFAln5mzYCGwwACgkQYMRC
+x3/H94SJgwgAlKQb10/xcL/epdDkR7vbiei7huGLBpRDb/L5fM8B5W77Qi8Xmuqj
+cCu1j99ZCA5hs/vwVn8j8iLSBGMC5gxcuaar/wtmiaEvT9fO/h6q4opG7NcuiJ8H
+wRj8ccJmRssNqDD913PLz7T40Ts62blhrEAlJozGVG/q7T3RAZcskOUHKeHfc2RI
+YzGsC/I9d7k6uxAv1L9Nm5F2HaAQDzhkdd16nKkGaPGR35cT1JLInkfl5cdm7ldN
+nxs4TLO3kZjUTgWKdhpgRNF5hwaz51ZjpebaRf/ZqRuNyX4lIRolDxzOn/+O1o8L
+qG2ZdhHHmSK2LaQLFiSprUkikStNU9BqSQ==
+=5OGa
+-----END PGP PUBLIC KEY BLOCK-----'''
+
+
# login/password authentication
gl = gitlab.Gitlab('http://localhost:8080', email=LOGIN, password=PASSWORD)
gl.auth()
@@ -80,6 +111,14 @@ assert len(gl.users.list(search='asdf')) == 0
foobar_user.bio = 'This is the user bio'
foobar_user.save()
+# GPG keys
+gkey = new_user.gpgkeys.create({'key': GPG_KEY})
+assert(len(new_user.gpgkeys.list()) == 1)
+# Seems broken on the gitlab side
+# gkey = new_user.gpgkeys.get(gkey.id)
+gkey.delete()
+assert(len(new_user.gpgkeys.list()) == 0)
+
# SSH keys
key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY})
assert(len(new_user.keys.list()) == 1)
@@ -102,6 +141,14 @@ assert(len(gl.user.emails.list()) == 1)
mail.delete()
assert(len(gl.user.emails.list()) == 0)
+# current user GPG keys
+gkey = gl.user.gpgkeys.create({'key': GPG_KEY})
+assert(len(gl.user.gpgkeys.list()) == 1)
+# Seems broken on the gitlab side
+gkey = gl.user.gpgkeys.get(gkey.id)
+gkey.delete()
+assert(len(gl.user.gpgkeys.list()) == 0)
+
# current user key
key = gl.user.keys.create({'title': 'testkey', 'key': SSH_KEY})
assert(len(gl.user.keys.list()) == 1)