diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2020-09-07 23:37:54 +0200 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2020-09-07 23:39:14 +0200 |
commit | e78e121575deb7b5ce490b2293caa290860fc3e9 (patch) | |
tree | 9824031089ecedcd672c5d9b9910bf2f2323e4fb | |
parent | 49a0032f44a76cdcf17dd45da4b23e24a6b9572c (diff) | |
download | gitlab-feat/delete-user-identities.tar.gz |
feat(api): add support for user identity provider deletionfeat/delete-user-identities
-rw-r--r-- | docs/gl_objects/users.rst | 4 | ||||
-rw-r--r-- | gitlab/tests/objects/test_users.py | 17 | ||||
-rw-r--r-- | gitlab/v4/objects/__init__.py | 12 | ||||
-rw-r--r-- | tools/functional/api/test_users.py | 20 |
4 files changed, 53 insertions, 0 deletions
diff --git a/docs/gl_objects/users.rst b/docs/gl_objects/users.rst index 5b1cf3d..9f2d42c 100644 --- a/docs/gl_objects/users.rst +++ b/docs/gl_objects/users.rst @@ -80,6 +80,10 @@ Set an external identity for a user:: user.extern_uid = '3' user.save() +Delete an external identity by provider name:: + + user.identityproviders.delete('oauth2_generic') + User custom attributes ====================== diff --git a/gitlab/tests/objects/test_users.py b/gitlab/tests/objects/test_users.py index ec282cf..f84e877 100644 --- a/gitlab/tests/objects/test_users.py +++ b/gitlab/tests/objects/test_users.py @@ -95,6 +95,19 @@ def resp_get_user_status(): yield rsps +@pytest.fixture +def resp_delete_user_identity(no_content): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.DELETE, + url="http://localhost/api/v4/users/1/identities/test_provider", + json=no_content, + content_type="application/json", + status=204, + ) + yield rsps + + def test_get_user(gl, resp_get_user): user = gl.users.get(1) assert isinstance(user, User) @@ -118,3 +131,7 @@ def test_user_status(user, resp_get_user_status): def test_user_activate_deactivate(user, resp_activate): user.activate() user.deactivate() + + +def test_delete_user_identity(user, resp_delete_user_identity): + user.identityproviders.delete("test_provider") diff --git a/gitlab/v4/objects/__init__.py b/gitlab/v4/objects/__init__.py index f9a2c25..7dd8757 100644 --- a/gitlab/v4/objects/__init__.py +++ b/gitlab/v4/objects/__init__.py @@ -217,6 +217,17 @@ class UserStatusManager(GetWithoutIdMixin, RESTManager): _from_parent_attrs = {"user_id": "id"} +class UserIdentityProviderManager(DeleteMixin, RESTManager): + """Manager for user identities. + + This manager does not actually manage objects but enables + functionality for deletion of user identities by provider. + """ + + _path = "/users/%(user_id)s/identities" + _from_parent_attrs = {"user_id": "id"} + + class UserImpersonationToken(ObjectDeleteMixin, RESTObject): pass @@ -320,6 +331,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject): ("emails", "UserEmailManager"), ("events", "UserEventManager"), ("gpgkeys", "UserGPGKeyManager"), + ("identityproviders", "UserIdentityProviderManager"), ("impersonationtokens", "UserImpersonationTokenManager"), ("keys", "UserKeyManager"), ("memberships", "UserMembershipManager"), diff --git a/tools/functional/api/test_users.py b/tools/functional/api/test_users.py new file mode 100644 index 0000000..f70da4a --- /dev/null +++ b/tools/functional/api/test_users.py @@ -0,0 +1,20 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/users.html +https://docs.gitlab.com/ee/api/users.html#delete-authentication-identity-from-user +""" + + +def test_user_identities(gl, user): + provider = "test_provider" + + user.provider = provider + user.extern_uid = "1" + user.save() + + assert provider in [item["provider"] for item in user.identities] + + user.identityproviders.delete(provider) + user = gl.users.get(user.id) + + assert provider not in [item["provider"] for item in user.identities] |