Skip to content

Commit 8d6d08e

Browse files
committed
Merge branch 'gh_1698' into 'passkey'
Integrate 2FA methods into a single web UI #1698 Open See merge request gh/20c/django-security-keys!4
2 parents 4a715da + c89b1d3 commit 8d6d08e

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/django_security_keys/urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@
1919
path(
2020
"decommission-form/", views.remove_security_key_form, name="decommission-form"
2121
),
22+
path("update-security-key/", views.update_security_key, name="update-security-key"),
2223
]

src/django_security_keys/views.py

+31
Original file line numberDiff line numberDiff line change
@@ -295,3 +295,34 @@ def remove_security_key_form(
295295
remove_security_key(request, **kwargs)
296296

297297
return redirect(reverse("security-keys:manage-keys"))
298+
299+
300+
@login_required
301+
@transaction.atomic
302+
def update_security_key(request: WSGIRequest, **kwargs: Any) -> JsonResponse:
303+
"""
304+
Update a security key's passkey login status.
305+
306+
This requires the following POST data:
307+
- id (`int`): key id
308+
- passkey_login (`bool`): whether to enable passkey login
309+
310+
Returns a JSON response with the updated key's details
311+
"""
312+
id = request.POST.get("id")
313+
passkey_login = convert_to_bool(request.POST.get("passkey_login", False))
314+
315+
try:
316+
sec_key = request.user.webauthn_security_keys.get(pk=id)
317+
except SecurityKey.DoesNotExist:
318+
return JsonResponse({"non_field_errors": [_("Key not found")]}, status=404)
319+
320+
sec_key.passkey_login = passkey_login
321+
sec_key.save()
322+
323+
return JsonResponse({
324+
"status": "ok",
325+
"id": sec_key.id,
326+
"name": sec_key.name,
327+
"passkey_login": sec_key.passkey_login
328+
})

0 commit comments

Comments
 (0)