Skip to content

Commit 6ea1de4

Browse files
committed
Allow users to unlink cards
1 parent e460b45 commit 6ea1de4

5 files changed

Lines changed: 29 additions & 1 deletion

File tree

app/api/v1/users.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ def get_me(
4949
return _me_user(user, db)
5050

5151

52+
@router.delete("/me/oidc", response_model=MessageResponse)
53+
def unlink_me_oidc(
54+
user: dict = Depends(require_session_user),
55+
db: Session = Depends(get_db),
56+
):
57+
"""Unlink the current OIDC account from its NFC card. The card record is kept."""
58+
db_user = _me_user(user, db)
59+
db_user.oidc_sub = None
60+
db.commit()
61+
return {"message": "Card unlinked successfully"}
62+
63+
5264
@router.get("/me/transactions", response_model=list[MeTransactionResponse])
5365
def get_me_transactions(
5466
limit: int = Query(default=50, ge=1, le=200),

app/web/locales/de.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@
262262
"me.sessions_title": "Maschinensitzungen",
263263
"me.sessions_empty": "Noch keine Maschinensitzungen.",
264264
"me.sessions_machine": "Maschine",
265+
"me.btn_unlink_card": "Karte trennen",
266+
"me.unlink_confirm": "NFC-Karte von diesem Konto trennen? Du musst danach eine neue Karte verknüpfen, um wieder auf dein Guthaben zuzugreifen.",
265267

266268
"connect.title_success": "Karte verknüpft",
267269
"connect.title_failure": "Verknüpfung fehlgeschlagen",

app/web/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@
262262
"me.sessions_title": "Machine Sessions",
263263
"me.sessions_empty": "No machine sessions yet.",
264264
"me.sessions_machine": "Machine",
265+
"me.btn_unlink_card": "Unlink card",
266+
"me.unlink_confirm": "Unlink your NFC card from this account? You will need to re-link a card to access your balance again.",
265267

266268
"connect.title_success": "Card Linked",
267269
"connect.title_failure": "Link Failed",

app/web/static/css/tailwind.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/web/templates/users/me.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
<div>
2020
<h1 class="text-2xl font-bold mb-1" x-text="profile.name || '—'"></h1>
2121
<p class="text-xs text-gray-400 font-mono">{{ _('me.card_id') }}: <span x-text="profile.id"></span></p>
22+
<button @click="unlinkCard()"
23+
class="mt-2 text-xs text-red-500 hover:underline">
24+
{{ _('me.btn_unlink_card') }}
25+
</button>
2226
</div>
2327
<div class="text-right">
2428
<div class="text-3xl font-bold tabular-nums"
@@ -303,6 +307,14 @@ <h2 class="font-semibold">{{ _('me.transactions_title') }}</h2>
303307
txLabel(type) {
304308
return _TX_LABELS[type] || type;
305309
},
310+
311+
async unlinkCard() {
312+
if (!confirm({{ _('me.unlink_confirm') | tojson }})) return;
313+
const r = await apiFetch('/api/v1/users/me/oidc', { method: 'DELETE' });
314+
if (r.ok) {
315+
this.profile = null;
316+
}
317+
},
306318
}
307319
}
308320
</script>

0 commit comments

Comments
 (0)