This commit is contained in:
2024-09-28 17:37:29 +02:00
parent 8dfafa9404
commit fb4d566007
64 changed files with 32325 additions and 573 deletions
+3 -2
View File
@@ -6,11 +6,12 @@ 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)
# FIX: This is only for debugging first, this should *never* be used in production
queryset.update(public_key=None, private_key=None)
@admin.register(UserSettings)
class UserSettingsAdmin(admin.ModelAdmin):
list_display = ("user", "k356_key")
list_display = ("user",)
actions = [remove_key]
@@ -0,0 +1,23 @@
# Generated by Django 5.1.1 on 2024-09-28 04:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("users", "0002_usersettings_custom_identifier"),
]
operations = [
migrations.AddField(
model_name="usersettings",
name="private_key",
field=models.TextField(max_length=2048, null=True),
),
migrations.AddField(
model_name="usersettings",
name="public_key",
field=models.TextField(max_length=2048, null=True),
),
]
@@ -0,0 +1,21 @@
# Generated by Django 5.1.1 on 2024-09-28 06:34
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("users", "0003_usersettings_private_key_usersettings_public_key"),
]
operations = [
migrations.RemoveField(
model_name="usersettings",
name="k356_key",
),
migrations.RemoveField(
model_name="usersettings",
name="k356_key_fingerprint",
),
]
@@ -0,0 +1,28 @@
# Generated by Django 5.1.1 on 2024-09-28 07:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("users", "0004_remove_usersettings_k356_key_and_more"),
]
operations = [
migrations.AlterField(
model_name="usersettings",
name="custom_identifier",
field=models.TextField(blank=True, max_length=2048, null=True),
),
migrations.AlterField(
model_name="usersettings",
name="description",
field=models.TextField(blank=True, max_length=2048, null=True),
),
migrations.AlterField(
model_name="usersettings",
name="name",
field=models.TextField(blank=True, max_length=2048, null=True),
),
]
+5 -3
View File
@@ -1,6 +1,7 @@
from uuid import uuid4
from django.contrib.auth import get_user_model
from django.db import models
from app.utils.models import BaseModel
@@ -10,5 +11,6 @@ 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)
# The private and public key are wrapped with the AES key from the front-end
public_key = models.TextField(max_length=2048, null=True)
private_key = models.TextField(max_length=2048, null=True)
+2
View File
@@ -3,8 +3,10 @@ from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
path("keys", views.keys, name="keys"),
path("k356/validate", views.k356_validate, name="k356.validate"),
]
+33 -4
View File
@@ -1,10 +1,12 @@
import json
from django.contrib.auth.decorators import login_required
from django.utils.translation import gettext as _
from django.http import JsonResponse
from django.utils.translation import gettext as _
login_required()
import json
@login_required
def k356_validate(request):
us = request.user.setting
@@ -36,7 +38,7 @@ def k356_validate(request):
return JsonResponse(
{
"ok": True
"ok": True,
}
)
@@ -46,3 +48,30 @@ def k356_validate(request):
"fingerprint": us.k356_key_fingerprint,
}
)
@login_required
def keys(request):
us = request.user.setting
if request.method == "POST":
try:
data = json.loads(request.body)
except Exception:
return JsonResponse({"error": "INVALID_DATA"}, status=401)
if us.private_key and not request.GET("force", "false") == "true":
return JsonResponse({"error": "KEY_EXISTS"}, status=401)
us.private_key = data.get("privateKey", None)
us.public_key = data.get("publicKey", None)
us.save()
return JsonResponse(
{
"privateKey": us.private_key,
"publicKey": us.public_key,
}
)