V0.1
This commit is contained in:
+3
-2
@@ -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),
|
||||
),
|
||||
]
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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,
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user