Skip to content

Commit 7c54ebb

Browse files
committed
Add security.services.get_user_for_membersuite_entity
1 parent d12f2fd commit 7c54ebb

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

membersuite_api_client/security/services.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import time
22

3-
from .models import PortalUser
3+
from django.contrib.auth.models import User
4+
5+
from .models import PortalUser, generate_username
46
from ..exceptions import LoginToPortalError, LogoutError
57
from ..utils import get_session_id
68

@@ -78,3 +80,41 @@ def logout(client):
7880
client.session_id = None
7981
else: # Failure . . .
8082
raise LogoutError(result=result)
83+
84+
85+
def get_user_for_membersuite_entity(membersuite_entity):
86+
"""Returns a User for `membersuite_entity`.
87+
88+
membersuite_entity is any MemberSuite object that has the fields
89+
membersuite_id, email_address, first_name, and last_name, e.g.,
90+
PortalUser or Individual.
91+
92+
"""
93+
user = None
94+
user_created = False
95+
96+
# First, try to match on username.
97+
user_username = generate_username(membersuite_entity)
98+
try:
99+
user = User.objects.get(username=user_username)
100+
except User.DoesNotExist:
101+
pass
102+
103+
# Next, try to match on email address.
104+
if not user:
105+
try:
106+
user = User.objects.filter(
107+
email=membersuite_entity.email_address)[0]
108+
except IndexError:
109+
pass
110+
111+
# No match? Create one.
112+
if not user:
113+
user = User.objects.create(
114+
username=user_username,
115+
email=membersuite_entity.email_address,
116+
first_name=membersuite_entity.first_name,
117+
last_name=membersuite_entity.last_name)
118+
user_created = True
119+
120+
return user, user_created

membersuite_api_client/tests/test_security.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def test_generate_username(self):
9090
"""
9191
self.portal_user.membersuite_id = "6faf90e4-fake-membersuite-id"
9292
self.assertEqual("ms-fake-membersuite-id",
93-
self.portal_user.generate_username())
93+
models.generate_username())
9494

9595
def test_get_individual(self):
9696
"""Does get_individual() work?

0 commit comments

Comments
 (0)