summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2017-11-10 17:35:34 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2017-11-10 17:35:34 +0100
commit8fec612157e4c15f587c11efc98e7e339dfcff28 (patch)
treeb1b9452bfce982003324fca9fc92ecbc9c085770
parent700e84f3ea1a8e0f99775d02cd1a832d05d3ec8d (diff)
downloadgitlab-8fec612157e4c15f587c11efc98e7e339dfcff28.tar.gz
Add support for impersonation tokens API
Closes #363
-rw-r--r--docs/gl_objects/users.py19
-rw-r--r--docs/gl_objects/users.rst36
-rw-r--r--gitlab/v4/objects.py13
-rw-r--r--tools/python_test_v4.py13
4 files changed, 80 insertions, 1 deletions
diff --git a/docs/gl_objects/users.py b/docs/gl_objects/users.py
index da516e6..e452217 100644
--- a/docs/gl_objects/users.py
+++ b/docs/gl_objects/users.py
@@ -115,3 +115,22 @@ attr.delete()
# or
user.customeattributes.delete(attr_key)
# end ca delete
+
+# it list
+i_t = user.impersonationtokens.list(state='active')
+i_t = user.impersonationtokens.list(state='inactive')
+# end it list
+
+# it get
+i_t = user.impersonationtokens.get(i_t_id)
+# end it get
+
+# it create
+i_t = user.impersonationtokens.create({'name': 'token1', 'scopes': ['api']})
+# use the token to create a new gitlab connection
+user_gl = gitlab.Gitlab(gitlab_url, private_token=i_t.token)
+# end it create
+
+# it delete
+i_t.delete()
+# end it delete
diff --git a/docs/gl_objects/users.rst b/docs/gl_objects/users.rst
index 4e22491..19612dd 100644
--- a/docs/gl_objects/users.rst
+++ b/docs/gl_objects/users.rst
@@ -106,6 +106,42 @@ Delete a custom attribute for a user:
:start-after: # ca list
:end-before: # end ca list
+User impersonation tokens
+=========================
+
+References
+----------
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.UserImpersonationToken`
+ + :class:`gitlab.v4.objects.UserImpersonationTokenManager`
+ + :attr:`gitlab.v4.objects.User.impersontaiontokens`
+
+List impersonation tokens for a user:
+
+.. literalinclude:: users.py
+ :start-after: # it list
+ :end-before: # end it list
+
+Get an impersonation token for a user:
+
+.. literalinclude:: users.py
+ :start-after: # it get
+ :end-before: # end it get
+
+Create and use an impersonation token for a user:
+
+.. literalinclude:: users.py
+ :start-after: # it create
+ :end-before: # end it create
+
+Revoke (delete) an impersonation token for a user:
+
+.. literalinclude:: users.py
+ :start-after: # it list
+ :end-before: # end it list
+
Current User
============
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 9be0d05..de8ec07 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -175,6 +175,18 @@ class UserKeyManager(GetFromListMixin, CreateMixin, DeleteMixin, RESTManager):
_create_attrs = (('title', 'key'), tuple())
+class UserImpersonationToken(ObjectDeleteMixin, RESTObject):
+ pass
+
+
+class UserImpersonationTokenManager(NoUpdateMixin, RESTManager):
+ _path = '/users/%(user_id)s/impersonation_tokens'
+ _obj_cls = UserImpersonationToken
+ _from_parent_attrs = {'user_id': 'id'}
+ _create_attrs = (('name', 'scopes'), ('expires_at',))
+ _list_filters = ('state',)
+
+
class UserProject(RESTObject):
pass
@@ -198,6 +210,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
('customattributes', 'UserCustomAttributeManager'),
('emails', 'UserEmailManager'),
('gpgkeys', 'UserGPGKeyManager'),
+ ('impersonationtokens', 'UserImpersonationTokenManager'),
('keys', 'UserKeyManager'),
('projects', 'UserProjectManager'),
)
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index fa83228..7d769f3 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -145,6 +145,17 @@ assert(len(new_user.customattributes.list()) == 1)
attr.delete()
assert(len(new_user.customattributes.list()) == 0)
+# impersonation tokens
+user_token = new_user.impersonationtokens.create(
+ {'name': 'token1', 'scopes': ['api', 'read_user']})
+l = new_user.impersonationtokens.list(state='active')
+assert(len(l) == 1)
+user_token.delete()
+l = new_user.impersonationtokens.list(state='active')
+assert(len(l) == 0)
+l = new_user.impersonationtokens.list(state='inactive')
+assert(len(l) == 1)
+
new_user.delete()
foobar_user.delete()
assert(len(gl.users.list()) == 3)
@@ -485,7 +496,7 @@ except gitlab.GitlabMRClosedError:
p_b = admin_project.protectedbranches.create({'name': '*-stable'})
assert(p_b.name == '*-stable')
p_b = admin_project.protectedbranches.get('*-stable')
-# master is protected by default
+# master is protected by default when a branch has been created
assert(len(admin_project.protectedbranches.list()) == 2)
admin_project.protectedbranches.delete('master')
p_b.delete()