Skip to content

Instantly share code, notes, and snippets.

@ankitml
Created April 30, 2016 11:54
Show Gist options
  • Save ankitml/f88ec1fd8bbf2960edda61b296306046 to your computer and use it in GitHub Desktop.
Save ankitml/f88ec1fd8bbf2960edda61b296306046 to your computer and use it in GitHub Desktop.
3 def get_or_create_lti_user(tool_provider):
2 email = tool_provider.get_param('lis_person_contact_email_primary')
1 name = tool_provider.get_param('lis_person_name_full')
4 userid = tool_provider.get_param('user_id')
1 if userid is None or userid == "" :
2 raise InvalidLTIRequestError('USERID NOT SENT BY CANVAS')
3 if email is None or email == "":
4 raise InvalidLTIRequestError('EMAIL NOT SENT BY CANVAS')
5
6
7 role = get_role(tool_provider)
8 lti_username = hashlib.sha256(userid).hexdigest()[0:30]
9 try:
10 user = User.objects.get(username=lti_username)
11
12 except User.DoesNotExist:
13 print 'creating a new user'
14 email = email.rstrip('\x0e')
15 user = User.objects.create_user(lti_username, email)
16 user.first_name = name
17 user.set_unusable_password()
18 #profile = LTIProfile.objects.create(django_user=user, external_userid=userid, name=name, email=email, roles=role)
19 try:
20 profile = LTIProfile.objects.get(email=email)
21 except ObjectDoesNotExist:
22 canvas_pk = tool_provider.custom_params['custom_canvas_user_id']
23 profile = LTIProfile.objects.create(name=name,external_userid=userid,email=email, canvas_pk=canvas_pk, roles=role)
24 profile.roles = role
25 profile.django_user = user
26 profile.external_userid = userid
27 profile.save()
28
29 except User.MultipleObjectsReturned:
30 user = get_object_or_404(User, username=lti_username)
31
32 user.backend = 'django.contrib.auth.backends.ModelBackend'
33 user.save()
34 return user
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment