From 9cb4b2b3a8dc6da5c1dff6e352aaf49d20ea0334 Mon Sep 17 00:00:00 2001 From: Arthur-TRT Date: Tue, 17 May 2022 15:29:58 +0200 Subject: [PATCH] Refactoring 42Oauth --- src/accounts/admin.py | 7 ++++- .../migrations/0010_auto_20220517_1452.py | 31 +++++++++++++++++++ .../migrations/0011_migration_campus.py | 23 ++++++++++++++ src/accounts/models.py | 11 +++++++ src/accounts/views/connection.py | 14 ++++++--- 5 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 src/accounts/migrations/0010_auto_20220517_1452.py create mode 100644 src/accounts/migrations/0011_migration_campus.py diff --git a/src/accounts/admin.py b/src/accounts/admin.py index 0d9d800..03dfdfb 100644 --- a/src/accounts/admin.py +++ b/src/accounts/admin.py @@ -1,5 +1,6 @@ from .models import UserProfileInfo from django.contrib import admin +from .models import Campus #admin.site.register(UserProfileInfo) # Register your models here. @@ -9,4 +10,8 @@ class userprofile(admin.ModelAdmin): #list display list_display = ['user', 'score', 'last_submission_date', 'intra42_campus'] # search list - search_fields = ['score', 'user__username', 'intra42_campus'] \ No newline at end of file + search_fields = ['score', 'user__username', 'intra42_campus'] + +@admin.register(Campus) +class campus(admin.ModelAdmin): + list_display = ['name'] \ No newline at end of file diff --git a/src/accounts/migrations/0010_auto_20220517_1452.py b/src/accounts/migrations/0010_auto_20220517_1452.py new file mode 100644 index 0000000..0c0cd1d --- /dev/null +++ b/src/accounts/migrations/0010_auto_20220517_1452.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2.11 on 2022-05-17 12:52 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0009_auto_20220329_1339'), + ] + + operations = [ + migrations.CreateModel( + name='Campus', + fields=[ + ('id', models.IntegerField(primary_key=True, serialize=False, unique=True)), + ('name', models.CharField(max_length=50)), + ], + options={ + 'verbose_name': 'campus', + 'verbose_name_plural': 'campuses', + 'permissions': (('view_info', 'View user info'),), + }, + ), + migrations.AddField( + model_name='userprofileinfo', + name='cmapus', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='accounts.campus'), + ), + ] diff --git a/src/accounts/migrations/0011_migration_campus.py b/src/accounts/migrations/0011_migration_campus.py new file mode 100644 index 0000000..c84b7de --- /dev/null +++ b/src/accounts/migrations/0011_migration_campus.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.11 on 2022-05-17 12:54 + +from django.db import migrations +from accounts.models import UserProfileInfo +from accounts.models import Campus + +def migrate_campus(apps, schema_editor): + UserProfileInfo = apps.get_model('accounts', 'UserProfileInfo') + Campus = apps.get_model('accounts', 'Campus') + for user in UserProfileInfo.objects.all(): + if user.intra42_campus_id: + user.campus, created = Campus.objects.get_or_create(id=user.intra42_campus_id, name=user.intra42_campus) + user.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0010_auto_20220517_1452'), + ] + + operations = [ + migrations.RunPython(migrate_campus), + ] diff --git a/src/accounts/models.py b/src/accounts/models.py index 99cf388..5408b21 100644 --- a/src/accounts/models.py +++ b/src/accounts/models.py @@ -13,6 +13,7 @@ class UserProfileInfo(models.Model): token = models.CharField(max_length=200, blank=True) discord_id = models.CharField(max_length=20, null=True, blank=True, unique=True) intra42_id = models.CharField(max_length=20, null=True, blank=True, unique=True) + cmapus = models.ForeignKey('Campus', on_delete=models.DO_NOTHING, null=True, blank=True) intra42_campus = models.CharField(max_length=50, null=True, blank=True) intra42_campus_id = models.CharField(max_length=10, null=True, blank=True) member = models.BooleanField(default=False) @@ -26,4 +27,14 @@ class UserProfileInfo(models.Model): verbose_name_plural = 'profiles' permissions = (("view_info", "View user info"),) +class Campus(models.Model): + id = models.IntegerField(primary_key=True, unique=True) + name = models.CharField(max_length=50) + def __str__(self): + return self.name + class Meta: + verbose_name = 'campus' + verbose_name_plural = 'campuses' + permissions = (("view_info", "View user info"),) + # Create your models here. diff --git a/src/accounts/views/connection.py b/src/accounts/views/connection.py index d83c20b..b441b35 100644 --- a/src/accounts/views/connection.py +++ b/src/accounts/views/connection.py @@ -5,6 +5,8 @@ from django.views.defaults import bad_request from django.urls import reverse from django.shortcuts import redirect from django.contrib.sites.models import Site +from accounts.models import Campus +from django.db import IntegrityError import os oauth = OAuth() @@ -52,10 +54,12 @@ def authorize_intra42(request): intra42_campus = response['campus'][0]['name'] intra42_campus_id = response['campus'][0]['id'] request.user.userprofileinfo.intra42_id = intra42_id - request.user.userprofileinfo.intra42_campus = intra42_campus - request.user.userprofileinfo.intra42_campus_id = intra42_campus_id - request.user.userprofileinfo.save() - return redirect('accounts:edit') + request.user.userprofileinfo.campus, created = Campus.objects.get_or_create(id=intra42_campus_id, name=intra42_campus) + try: + request.user.userprofileinfo.save() + return redirect('accounts:edit') + except IntegrityError: + return redirect('accounts:edit') @login_required @require_POST @@ -64,6 +68,8 @@ def disconnect_intra42(request): return bad_request(request, "Already disconnected") request.user.userprofileinfo.intra42_id = None request.user.userprofileinfo.intra42_campus = None + request.user.userprofileinfo.intra42_campus_id = None + request.user.userprofileinfo.campus = None request.user.userprofileinfo.save() return redirect('accounts:edit') -- 2.40.1