First commit
This commit is contained in:
@@ -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]
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class UsersConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'users'
|
||||
@@ -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),
|
||||
),
|
||||
]
|
||||
@@ -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)
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -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"),
|
||||
]
|
||||
@@ -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,
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user