Skip to content

Commit

Permalink
Implement user login entry creation based on (access) tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
tuomas777 authored and juyrjola committed Jul 5, 2018
1 parent cbc328a commit c38d013
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 0 deletions.
1 change: 1 addition & 0 deletions requirements.in
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ social-auth-app-django
requests
jwcrypto
Pillow
django-crequest
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ django-appconf==1.0.2
django-bootstrap3==10.0.1
django-compressor==2.2
django-cors-headers==2.2.0
django-crequest==2018.5.11
django-helusers==0.4.2
django-multiselectfield==0.1.8
django-npm==1.0.0
Expand Down
2 changes: 2 additions & 0 deletions tunnistamo/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
'corsheaders',
'helsinki_theme',
'bootstrap3',
'crequest',

'helusers',

Expand All @@ -74,6 +75,7 @@
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'crequest.middleware.CrequestMiddleware',
)

AUTHENTICATION_BACKENDS = (
Expand Down
37 changes: 37 additions & 0 deletions users/signals.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
from allauth.account.signals import user_logged_in as allauth_user_logged_in
from crequest.middleware import CrequestMiddleware
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils import timezone
from oauth2_provider.models import AccessToken
from oidc_provider.models import Token

from services.models import Service
from users.models import UserLoginEntry


@receiver(allauth_user_logged_in)
Expand All @@ -20,3 +27,33 @@ def handle_allauth_login(sender, request, user, **kwargs):
request.session.set_expiry(delta.total_seconds())
else:
request.session.set_expiry(3600)


@receiver(post_save, sender=AccessToken)
def handle_oauth2_access_token_save(sender, instance, **kwargs):
request = CrequestMiddleware.get_request()

if not (request and instance.application):
return

try:
service = Service.objects.get(application=instance.application)
except Service.DoesNotExist:
return

UserLoginEntry.objects.create_from_request(request, service, user=instance.user)


@receiver(post_save, sender=Token)
def handle_oidc_token_save(sender, instance, **kwargs):
request = CrequestMiddleware.get_request()

if not request:
return

try:
service = Service.objects.get(client=instance.client)
except Service.DoesNotExist:
return

UserLoginEntry.objects.create_from_request(request, service, user=instance.user)

0 comments on commit c38d013

Please sign in to comment.