aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-11 19:27:27 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-11 19:27:27 +0200
commitd8885c8df17c60927cb8d1f77ce1745814c6d3b4 (patch)
treefafa41edfc7adcb25d6c46d4bbf2d0fba93ed010 /packages/meshbay-hub/src/meshbay_hub/static
parentedbff1768054afa80efda721cd1011b29c7fe355 (diff)
downloadmeshbay-d8885c8df17c60927cb8d1f77ce1745814c6d3b4.tar.gz
fix(hub): an administrator can erase an account that owns groups
An administrator's deletion answered 409 for any account owning a group, so an erasure ordered by an authority had to wait on the person it was about. It now deletes the account's groups with it, then pushes a signed revocation for the account and for each group to every connected node: an access token already issued stays valid on a node until it expires, and the revocation is what makes the nodes refuse the account and close the groups' sessions now. The action is written to the IP log, and the confirmation dialog says the groups go too, in all ten catalogues. The owner's own deletion is unchanged: refused while they own groups, which they can hand over first (CGU 3.4, privacy statement). Deleting a group had three partial cascades. The owner's route left email_verifications behind, and the cleanup of unhosted groups left notifications, invitations and reports - each an IntegrityError on PostgreSQL, invisible on SQLite, which does not enforce foreign keys by default. db/purge.py is now the one implementation: it finds every table referencing groups.id from the schema, deletes the group's rows and detaches content reports, which are evidence and outlive the group. test_group_purge.py turns foreign-key enforcement on for its connection, seeds every referencing table, and fails without the fix on all three routes. MESHBAY_DESIGN.md 7.7 states the rule, and now lists the device keys and swarm sources that e3c68b3 erases. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D9MCBBWSm9GhBESmqzJxNy
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/de.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/en.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/es.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/it.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js2
10 files changed, 10 insertions, 10 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
index 7eed742..a41eeee 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
@@ -510,7 +510,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Details',
'admin.btn_delete': 'Löschen',
- 'admin.delete_confirm': 'Das Konto „{user}“ löschen? Das lässt sich nicht '
+ 'admin.delete_confirm': 'Das Konto „{user}“ und alle seine Gruppen löschen? Das lässt sich nicht '
+ 'rückgängig machen. Die hochgeladenen Dateien bleiben auf den Nodes, die sie '
+ 'hosten, und jeder Node behält die gemerkte Identität, bis sein Betreiber sie '
+ 'entfernt. Sperren ist die umkehrbare Option.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
index 143f462..4561663 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
@@ -500,7 +500,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Details',
'admin.btn_delete': 'Delete',
- 'admin.delete_confirm': 'Delete the account "{user}"? This cannot be undone. '
+ 'admin.delete_confirm': 'Delete the account "{user}" and every group it owns? This cannot be undone. '
+ 'Files they uploaded stay on the nodes that host them, and each node keeps '
+ 'the identity it pinned until its operator unpins it. Suspending is the '
+ 'reversible option.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
index f35d05d..bbfcfa5 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
@@ -506,7 +506,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Detalles',
'admin.btn_delete': 'Eliminar',
- 'admin.delete_confirm': '¿Eliminar la cuenta «{user}»? Esta acción no se puede '
+ 'admin.delete_confirm': '¿Eliminar la cuenta «{user}» y todos sus grupos? Esta acción no se puede '
+ 'deshacer. Los archivos que subió permanecen en los nodes que los alojan, y cada '
+ 'node conserva la identidad que fijó hasta que su operador la retire. La '
+ 'suspensión es la opción reversible.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
index e8ac577..b5560fa 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
@@ -509,7 +509,7 @@ export default {
'admin.revoke_group_confirm': "Révoquer le groupe « {group} » ? Une révocation signée est envoyée à chaque node qui l'héberge, et c'est irréversible depuis cette page. Suspends-le plutôt si tu veux seulement le mettre en pause.",
'admin.btn_details': 'Détails',
'admin.btn_delete': 'Supprimer',
- 'admin.delete_confirm': 'Supprimer le compte « {user} » ? Cette action est '
+ 'admin.delete_confirm': 'Supprimer le compte « {user} » et tous les groupes qu’il possède ? Cette action est '
+ 'irréversible. Les fichiers qu’il a envoyés restent sur les nodes qui les '
+ 'hébergent, et chaque node conserve l’identité qu’il a épinglée jusqu’à ce '
+ 'que son opérateur la retire. La suspension est l’option réversible.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
index 76caa51..358e824 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
@@ -509,7 +509,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Dettagli',
'admin.btn_delete': 'Elimina',
- 'admin.delete_confirm': 'Eliminare l’account «{user}»? L’operazione non può essere '
+ 'admin.delete_confirm': 'Eliminare l’account «{user}» e tutti i gruppi che possiede? L’operazione non può essere '
+ 'annullata. I file che ha caricato restano sui node che li ospitano, e ogni node '
+ 'mantiene l’identità che ha fissato finché il suo operatore non la rimuove. La '
+ 'sospensione è l’opzione reversibile.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
index a6c39ee..e28635a 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
@@ -502,7 +502,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': '詳細',
'admin.btn_delete': '削除',
- 'admin.delete_confirm': 'アカウント「{user}」を削除しますか?この操作は取り消せません。'
+ 'admin.delete_confirm': 'アカウント「{user}」と、所有するすべてのグループを削除しますか?この操作は取り消せません。'
+ 'このユーザーがアップロードしたファイルは、それをホストする node に残り、'
+ '各 node は固定した識別情報を、その運営者が解除するまで保持します。'
+ '停止であれば元に戻せます。',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
index e4a7914..4d35bdc 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
@@ -510,7 +510,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Details',
'admin.btn_delete': 'Verwijderen',
- 'admin.delete_confirm': 'Het account "{user}" verwijderen? Dit kan niet ongedaan '
+ 'admin.delete_confirm': 'Het account "{user}" en al zijn groepen verwijderen? Dit kan niet ongedaan '
+ 'worden gemaakt. De bestanden die deze persoon heeft geüpload blijven op de nodes '
+ 'die ze hosten, en elke node houdt de vastgezette identiteit tot zijn beheerder '
+ 'die weghaalt. Schorsen is de omkeerbare optie.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
index d13e3ef..85015b0 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
@@ -522,7 +522,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Szczegóły',
'admin.btn_delete': 'Usuń',
- 'admin.delete_confirm': 'Usunąć konto „{user}”? Tej operacji nie da się cofnąć. '
+ 'admin.delete_confirm': 'Usunąć konto „{user}” i wszystkie jego grupy? Tej operacji nie da się cofnąć. '
+ 'Wysłane przez tę osobę pliki pozostaną na hostujących je nodes, a każdy node '
+ 'zachowa przypiętą tożsamość do czasu, aż jego operator ją odepnie. Zawieszenie '
+ 'jest opcją odwracalną.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
index 1b517bb..9b9e80c 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
@@ -508,7 +508,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Detalhes',
'admin.btn_delete': 'Excluir',
- 'admin.delete_confirm': 'Excluir a conta "{user}"? Esta ação não pode ser desfeita. '
+ 'admin.delete_confirm': 'Excluir a conta "{user}" e todos os grupos dela? Esta ação não pode ser desfeita. '
+ 'Os arquivos que essa pessoa enviou permanecem nos nodes que os hospedam, e cada '
+ 'node mantém a identidade que fixou até que o operador dele a remova. Suspender é '
+ 'a opção reversível.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
index 9922a2d..99872f2 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
@@ -494,7 +494,7 @@ export default {
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': '详情',
'admin.btn_delete': '删除',
- 'admin.delete_confirm': '删除账户“{user}”?此操作无法撤销。'
+ 'admin.delete_confirm': '删除账户“{user}”及其拥有的所有群组?此操作无法撤销。'
+ '该用户上传的文件仍留在托管它们的 node 上,每个 node 也会保留它固定的身份,'
+ '直到其运营者取消固定。停用是可撤销的选项。',
'admin.user_detail': '用户详情',