forked from 42CTF/website
Merge pull request 'Refactoring 42Oauth' (#48) from refactor/42OAuth into main
Reviewed-on: 42CTF/website#48
This commit is contained in:
commit
4213883774
|
@ -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.
|
||||
|
@ -10,3 +11,7 @@ class userprofile(admin.ModelAdmin):
|
|||
list_display = ['user', 'score', 'last_submission_date', 'intra42_campus']
|
||||
# search list
|
||||
search_fields = ['score', 'user__username', 'intra42_campus']
|
||||
|
||||
@admin.register(Campus)
|
||||
class campus(admin.ModelAdmin):
|
||||
list_display = ['name']
|
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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),
|
||||
]
|
|
@ -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.
|
||||
|
|
|
@ -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.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')
|
||||
|
||||
|
|
Loading…
Reference in New Issue