First commit

This commit is contained in:
2024-09-26 23:59:03 +02:00
commit f3116a6876
53 changed files with 1822 additions and 0 deletions
View File
+16
View File
@@ -0,0 +1,16 @@
from django.contrib import admin
from users.models import UserSettings
@admin.action(description="Remove the key from the users")
def remove_key(modeladmin, request, queryset):
queryset.update(k356_key=False, k356_key_fingerprint=None)
@admin.register(UserSettings)
class UserSettingsAdmin(admin.ModelAdmin):
list_display = ("user", "k356_key")
actions = [remove_key]
+6
View File
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class UsersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'users'
+34
View File
@@ -0,0 +1,34 @@
# Generated by Django 5.1.1 on 2024-09-25 17:40
import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='UserSettings',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('name', models.TextField(max_length=2048)),
('description', models.TextField(max_length=2048)),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_modified_at', models.DateTimeField(auto_now=True)),
('k356_key', models.BooleanField(default=False)),
('k356_key_fingerprint', models.CharField(null=True)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='setting', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]
@@ -0,0 +1,18 @@
# Generated by Django 5.1.1 on 2024-09-25 20:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='usersettings',
name='custom_identifier',
field=models.TextField(max_length=2048, null=True),
),
]
View File
+14
View File
@@ -0,0 +1,14 @@
from uuid import uuid4
from django.contrib.auth import get_user_model
from django.db import models
from app.utils.models import BaseModel
User = get_user_model()
class UserSettings(BaseModel):
user = models.OneToOneField(User, on_delete=models.PROTECT, related_name="setting")
k356_key = models.BooleanField(default=False)
k356_key_fingerprint = models.CharField(null=True)
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+10
View File
@@ -0,0 +1,10 @@
from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
path("k356/validate", views.k356_validate, name="k356.validate"),
]
+48
View File
@@ -0,0 +1,48 @@
import json
from django.contrib.auth.decorators import login_required
from django.utils.translation import gettext as _
from django.http import JsonResponse
login_required()
def k356_validate(request):
us = request.user.setting
if request.method == "POST":
try:
fingerprint = json.loads(request.body)["fingerprint"]
except Exception as e:
return JsonResponse(
{
"ok": False,
"error": str(e),
}
)
if us.k356_key_fingerprint:
if us.k356_key_fingerprint != fingerprint:
return JsonResponse(
{
"ok": False,
"error": _("Unable to verify key."),
}
)
else:
us.k356_key = True
us.k356_key_fingerprint = fingerprint
us.save()
return JsonResponse(
{
"ok": True
}
)
return JsonResponse(
{
"key": us.k356_key,
"fingerprint": us.k356_key_fingerprint,
}
)