diff options
-rw-r--r-- | docs/gl_objects/users.py | 71 | ||||
-rw-r--r-- | docs/gl_objects/users.rst | 218 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 24 | ||||
-rw-r--r-- | tools/python_test_v4.py | 47 |
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) |