diff --git a/core/apps.py b/core/apps.py index 8115ae6..1513e0a 100644 --- a/core/apps.py +++ b/core/apps.py @@ -4,3 +4,6 @@ from django.apps import AppConfig class CoreConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'core' + + def ready(self): + from . import receivers \ No newline at end of file diff --git a/core/migrations/0006_authorizationlog.py b/core/migrations/0006_authorizationlog.py new file mode 100644 index 0000000..51c2573 --- /dev/null +++ b/core/migrations/0006_authorizationlog.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.15 on 2022-08-05 07:28 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('oidc_provider', '0027_auto_20220801_1333'), + ('core', '0005_profile_last_name'), + ] + + operations = [ + migrations.CreateModel( + name='AuthorizationLog', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('scope', models.TextField()), + ('granted', models.BooleanField()), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='oidc_provider.client')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/core/models/__init__.py b/core/models/__init__.py index a8eddd7..b08f344 100644 --- a/core/models/__init__.py +++ b/core/models/__init__.py @@ -1,2 +1,3 @@ from .auth import User -from .profile import Profile \ No newline at end of file +from .profile import Profile +from .logging import AuthorizationLog \ No newline at end of file diff --git a/core/models/logging.py b/core/models/logging.py new file mode 100644 index 0000000..e1ed748 --- /dev/null +++ b/core/models/logging.py @@ -0,0 +1,12 @@ +from django.db import models +from django.contrib.auth import get_user_model + +from oidc_provider.models import Client + + +class AuthorizationLog(models.Model): + user = models.ForeignKey(get_user_model(), models.CASCADE) + client = models.ForeignKey(Client, models.CASCADE) + scope = models.TextField() + granted = models.BooleanField() + timestamp = models.DateTimeField(auto_now_add=True) \ No newline at end of file diff --git a/core/receivers/__init__.py b/core/receivers/__init__.py new file mode 100644 index 0000000..6b63b75 --- /dev/null +++ b/core/receivers/__init__.py @@ -0,0 +1 @@ +from .oidc import user_accept_consent, user_decline_consent \ No newline at end of file diff --git a/core/receivers/oidc.py b/core/receivers/oidc.py new file mode 100644 index 0000000..040466c --- /dev/null +++ b/core/receivers/oidc.py @@ -0,0 +1,15 @@ +from django.dispatch import receiver + +from oidc_provider.signals import user_accept_consent, user_decline_consent + +from ..models import AuthorizationLog + + +@receiver(user_accept_consent) +def consent_granted(sender, **kwargs): + AuthorizationLog.objects.create(user=kwargs["user"], client=kwargs["client"], scope=kwargs["scope"], granted=True) + + +@receiver(user_decline_consent) +def consent_denied(sender, **kwargs): + AuthorizationLog.objects.create(user=kwargs["user"], client=kwargs["client"], scope=kwargs["scope"], granted=False) \ No newline at end of file