From 43603d73591b759af2ff9d4d0b3425b340bcacf8 Mon Sep 17 00:00:00 2001 From: alexismdr Date: Fri, 28 Nov 2025 02:08:34 +0100 Subject: [PATCH 1/6] feat: aasa view json distribution * basic webcredentials config for password managers See https://developer.apple.com/documentation/xcode/supporting-associated-domains for ref --- note_kfet/views.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/note_kfet/views.py b/note_kfet/views.py index 9ea86d30..1e5e22ad 100644 --- a/note_kfet/views.py +++ b/note_kfet/views.py @@ -6,6 +6,7 @@ from django.urls import reverse from django.views.generic import RedirectView from note.models import Alias from permission.backends import PermissionBackend +from django.http import JsonResponse class IndexView(LoginRequiredMixin, RedirectView): @@ -28,3 +29,13 @@ class IndexView(LoginRequiredMixin, RedirectView): # Non-Kfet members will don't see the transfer page, but their profile page return reverse("member:user_detail", args=(user.pk,)) + +def apple_app_site_association(request): + data = { + "webcredentials": { + "apps": [ + "P5246D3AFQ.org.crans.bde.note" + ] + } + } + return JsonResponse(data) From de841c81433102a356afbb78d330c64c6ffbf92d Mon Sep 17 00:00:00 2001 From: alexismdr Date: Fri, 28 Nov 2025 02:11:10 +0100 Subject: [PATCH 2/6] feat: distribute aasa on .well-known/apple-app-site-association --- note_kfet/urls.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/note_kfet/urls.py b/note_kfet/urls.py index 733e3bb7..eedb9f0f 100644 --- a/note_kfet/urls.py +++ b/note_kfet/urls.py @@ -33,6 +33,9 @@ urlpatterns = [ path('accounts/', include('django.contrib.auth.urls')), path('api/', include('api.urls')), path('permission/', include('permission.urls')), + + # Apple App Site Association + path('.well-known/apple-app-site-association', apple_app_site_association), ] # During development, serve static and media files From 00176c3cef5f6c861c334152b60f7c688aebb0f6 Mon Sep 17 00:00:00 2001 From: alexismdr Date: Fri, 28 Nov 2025 09:13:32 +0100 Subject: [PATCH 3/6] fix: add aasa import in urls.py --- note_kfet/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/note_kfet/urls.py b/note_kfet/urls.py index eedb9f0f..0283debb 100644 --- a/note_kfet/urls.py +++ b/note_kfet/urls.py @@ -8,7 +8,7 @@ from django.views.defaults import bad_request, permission_denied, page_not_found from member.views import CustomLoginView from .admin import admin_site -from .views import IndexView +from .views import IndexView, apple_app_site_association urlpatterns = [ # Dev so redirect to something random From 68ea640736279a796c1c34517feca3849514c47d Mon Sep 17 00:00:00 2001 From: alexismdr Date: Tue, 9 Dec 2025 18:44:29 +0100 Subject: [PATCH 4/6] feat: add App Store app ID in env vars --- .env_example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env_example b/.env_example index da0b4efa..a2eb9922 100644 --- a/.env_example +++ b/.env_example @@ -24,3 +24,6 @@ WIKI_PASSWORD= # OIDC OIDC_RSA_PRIVATE_KEY=CHANGE_ME + +# App Store App ID +APP_STORE_APP_ID=P5246D3AFQ.org.crans.bde.note From f3289de5d8bd6482dd9af538de21c820e7e0a16f Mon Sep 17 00:00:00 2001 From: alexismdr Date: Tue, 9 Dec 2025 18:45:07 +0100 Subject: [PATCH 5/6] feat/fix: use env var instead of hardcoded --- note_kfet/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/note_kfet/views.py b/note_kfet/views.py index 1e5e22ad..f93c52c2 100644 --- a/note_kfet/views.py +++ b/note_kfet/views.py @@ -34,7 +34,7 @@ def apple_app_site_association(request): data = { "webcredentials": { "apps": [ - "P5246D3AFQ.org.crans.bde.note" + os.getenv("APP_STORE_APP_ID") ] } } From 1c891d67085c40de6d9bd2d5f51d47800bca5dbb Mon Sep 17 00:00:00 2001 From: alexismdr Date: Tue, 9 Dec 2025 18:51:10 +0100 Subject: [PATCH 6/6] fix: import os --- note_kfet/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/note_kfet/views.py b/note_kfet/views.py index f93c52c2..e8f9f019 100644 --- a/note_kfet/views.py +++ b/note_kfet/views.py @@ -7,6 +7,7 @@ from django.views.generic import RedirectView from note.models import Alias from permission.backends import PermissionBackend from django.http import JsonResponse +import os class IndexView(LoginRequiredMixin, RedirectView):