pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python-gitlab/python-gitlab/commit/35f9cb800c8b0d1473f3b6e113ff5c5a83874b7a

mous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-5efd63e783ac04bb.css" /> Merge pull request #1181 from python-gitlab/feat/delete-user-identities · python-gitlab/python-gitlab@35f9cb8 · GitHub
Skip to content

Commit 35f9cb8

Browse files
authored
Merge pull request #1181 from python-gitlab/feat/delete-user-identities
feat(api): add support for user identity provider deletion
2 parents 49a0032 + e78e121 commit 35f9cb8

4 files changed

Lines changed: 53 additions & 0 deletions

File tree

docs/gl_objects/users.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ Set an external identity for a user::
8080
user.extern_uid = '3'
8181
user.save()
8282

83+
Delete an external identity by provider name::
84+
85+
user.identityproviders.delete('oauth2_generic')
86+
8387
User custom attributes
8488
======================
8589

gitlab/tests/objects/test_users.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,19 @@ def resp_get_user_status():
9595
yield rsps
9696

9797

98+
@pytest.fixture
99+
def resp_delete_user_identity(no_content):
100+
with responses.RequestsMock() as rsps:
101+
rsps.add(
102+
method=responses.DELETE,
103+
url="http://localhost/api/v4/users/1/identities/test_provider",
104+
json=no_content,
105+
content_type="application/json",
106+
status=204,
107+
)
108+
yield rsps
109+
110+
98111
def test_get_user(gl, resp_get_user):
99112
user = gl.users.get(1)
100113
assert isinstance(user, User)
@@ -118,3 +131,7 @@ def test_user_status(user, resp_get_user_status):
118131
def test_user_activate_deactivate(user, resp_activate):
119132
user.activate()
120133
user.deactivate()
134+
135+
136+
def test_delete_user_identity(user, resp_delete_user_identity):
137+
user.identityproviders.delete("test_provider")

gitlab/v4/objects/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,17 @@ class UserStatusManager(GetWithoutIdMixin, RESTManager):
217217
_from_parent_attrs = {"user_id": "id"}
218218

219219

220+
class UserIdentityProviderManager(DeleteMixin, RESTManager):
221+
"""Manager for user identities.
222+
223+
This manager does not actually manage objects but enables
224+
functionality for deletion of user identities by provider.
225+
"""
226+
227+
_path = "/users/%(user_id)s/identities"
228+
_from_parent_attrs = {"user_id": "id"}
229+
230+
220231
class UserImpersonationToken(ObjectDeleteMixin, RESTObject):
221232
pass
222233

@@ -320,6 +331,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
320331
("emails", "UserEmailManager"),
321332
("events", "UserEventManager"),
322333
("gpgkeys", "UserGPGKeyManager"),
334+
("identityproviders", "UserIdentityProviderManager"),
323335
("impersonationtokens", "UserImpersonationTokenManager"),
324336
("keys", "UserKeyManager"),
325337
("memberships", "UserMembershipManager"),

tools/functional/api/test_users.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
"""
2+
GitLab API:
3+
https://docs.gitlab.com/ee/api/users.html
4+
https://docs.gitlab.com/ee/api/users.html#delete-authentication-identity-from-user
5+
"""
6+
7+
8+
def test_user_identities(gl, user):
9+
provider = "test_provider"
10+
11+
user.provider = provider
12+
user.extern_uid = "1"
13+
user.save()
14+
15+
assert provider in [item["provider"] for item in user.identities]
16+
17+
user.identityproviders.delete(provider)
18+
user = gl.users.get(user.id)
19+
20+
assert provider not in [item["provider"] for item in user.identities]

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy