From d540f78c2b033ecfda75c66b4a7c38eb3c0009d2 Mon Sep 17 00:00:00 2001 From: Gapodo Date: Tue, 21 Nov 2023 02:31:42 +0100 Subject: [PATCH] strip teaforo --- shared/css/static/modal-settings.scss | 12 +- shared/html/templates.html | 20 - shared/i18n/de_google_translate.translation | 102 ----- shared/i18n/es_google_translate.translation | 102 ----- shared/i18n/fr_google_translate.translation | 102 ----- shared/i18n/hu_translate.translation | 112 ----- shared/i18n/nl_google_translate.translation | 132 ------ shared/i18n/pl_google_translate.translation | 102 ----- shared/i18n/pt_translate.translation | 102 ----- shared/i18n/ru_google_translate.translation | 102 ----- shared/i18n/ru_translate_vafin.translation | 9 - shared/i18n/tr_translate.translation | 102 ----- shared/js/SelectedClientInfo.ts | 18 - shared/js/main.tsx | 3 - shared/js/profiles/ConnectionProfile.ts | 46 +- shared/js/profiles/Identity.ts | 47 +-- .../profiles/identities/TeaForumIdentity.ts | 135 ------ .../js/profiles/identities/teaspeak-forum.ts | 399 ------------------ shared/js/settings.ts | 5 - shared/js/tree/Client.ts | 4 - .../js/ui/frames/side/ClientInfoRenderer.scss | 5 - .../js/ui/frames/side/ClientInfoRenderer.tsx | 39 -- shared/js/ui/modal/ModalClientInfo.ts | 25 -- shared/js/ui/modal/ModalSettings.tsx | 162 +------ 24 files changed, 39 insertions(+), 1848 deletions(-) delete mode 100644 shared/js/profiles/identities/TeaForumIdentity.ts delete mode 100644 shared/js/profiles/identities/teaspeak-forum.ts diff --git a/shared/css/static/modal-settings.scss b/shared/css/static/modal-settings.scss index 8d96b0c8..38ea844d 100644 --- a/shared/css/static/modal-settings.scss +++ b/shared/css/static/modal-settings.scss @@ -2042,16 +2042,6 @@ } } - .container-teaforo { - .container-valid, .container-invalid { - padding: 1em; - text-align: center; - - button { - margin-top: .5em; - } - } - } .container-highlight-dummy { margin-top: 1em; @@ -2164,7 +2154,7 @@ } } - .container-teamspeak, .container-teaforo, .container-nickname { + .container-teamspeak, .container-nickname { display: none; } diff --git a/shared/html/templates.html b/shared/html/templates.html index aa514f60..7dfaf707 100644 --- a/shared/html/templates.html +++ b/shared/html/templates.html @@ -103,7 +103,6 @@
{{tr "Identity" /}}
{{tr "Profiles" /}}
-
{{tr "TeaForo connection" /}}
@@ -417,7 +416,6 @@ @@ -453,16 +451,6 @@
-
-
- {{tr "You're using your forum account as identification" /}} -
- -
@@ -1970,14 +1958,6 @@
-
- - -
{{tr "Version" /}} diff --git a/shared/i18n/de_google_translate.translation b/shared/i18n/de_google_translate.translation index 5ddd0b0d..0ab0a879 100644 --- a/shared/i18n/de_google_translate.translation +++ b/shared/i18n/de_google_translate.translation @@ -14957,76 +14957,6 @@ "message": "failed to send logout request" } }, - { - "translated": "Keine TeaForo-Authentifizierung gefunden. TeaForo-Verbindungsstatus: Nicht verbunden", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - } - }, - { - "translated": "Fehler beim Initialisieren der TeaForo-Verbindung von lokalen Daten. Fehler: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - } - }, - { - "translated": "TeaForo-Daten sollten erneuert werden. Erneuerung wird ausgeführt.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data should be renewed. Executing renew." - } - }, - { - "translated": "TeaForo-Daten wurden erfolgreich erneuert.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data has been successfully renewed." - } - }, - { - "translated": "TeaForo-Daten konnten nicht erneuert werden. Neuer Login erforderlich.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. New login required." - } - }, - { - "translated": "TeaForo-Daten konnten nicht erneuert werden. Ein Fehler ist aufgetreten: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - } - }, - { - "translated": "TeaForo-Daten sind abgelaufen. TeaForo-Verbindung ist nicht verfügbar!", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - } - }, { "translated": "Fehler beim Dekodieren der Audiodaten für %o: %o", "flags": [ @@ -18917,17 +18847,6 @@ "message": "Identity" } }, - { - "translated": "TeaForo-Verbindung", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Deaktiviere Hintergründe innerhalb des Hostbanner", "flags": [ @@ -20537,17 +20456,6 @@ "message": "Database ID:" } }, - { - "translated": "TeaForo-Verbindung", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo Connection" - } - }, { "translated": "Zeitstempel erstellen:", "flags": [ @@ -26992,16 +26900,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "TeaForo-Daten erneuern.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/i18n/es_google_translate.translation b/shared/i18n/es_google_translate.translation index 057fc4c0..938727c2 100644 --- a/shared/i18n/es_google_translate.translation +++ b/shared/i18n/es_google_translate.translation @@ -13045,76 +13045,6 @@ "message": "failed to send logout request" } }, - { - "translated": "No se encontró la autenticación de TeaForo. Estado de conexión de TeaForo: desconectado", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - } - }, - { - "translated": "Error al inicializar la conexión TeaForo a partir de datos locales. Error: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - } - }, - { - "translated": "Los datos de TeaForo deben renovarse. Ejecutando renovar.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data should be renewed. Executing renew." - } - }, - { - "translated": "Los datos de TeaForo se han renovado con éxito.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data has been successfully renewed." - } - }, - { - "translated": "Error al renovar los datos de TeaForo. Nuevo inicio de sesión requerido.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. New login required." - } - }, - { - "translated": "Error al renovar los datos de TeaForo. Se produjo un error: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - } - }, - { - "translated": "Los datos de TeaForo han caducado. ¡La conexión TeaForo no está disponible!", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - } - }, { "translated": "Error al decodificar datos de audio para %o: %o", "flags": [ @@ -17016,17 +16946,6 @@ "message": "Identity" } }, - { - "translated": "Conexión TeaForo", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Backrounds deshabilitados dentro del hostbanner", "flags": [ @@ -18647,17 +18566,6 @@ "message": "Database ID:" } }, - { - "translated": "Conexión TeaForo", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo Connection" - } - }, { "translated": "Marca de tiempo de construcción:", "flags": [ @@ -25102,16 +25010,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "Renovando los datos de TeaForo.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/i18n/fr_google_translate.translation b/shared/i18n/fr_google_translate.translation index 038f02dd..cedf4415 100644 --- a/shared/i18n/fr_google_translate.translation +++ b/shared/i18n/fr_google_translate.translation @@ -13877,76 +13877,6 @@ "message": "failed to send logout request" } }, - { - "translated": "Aucune authentification TeaForo trouvée. Statut de connexion TeaForo: non connecté", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - } - }, - { - "translated": "Échec d'initialisation de la connexion TeaForo à partir de données locales. Erreur: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - } - }, - { - "translated": "Les données TeaForo doivent être renouvelées. Exécuter renouveler.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data should be renewed. Executing renew." - } - }, - { - "translated": "Les données TeaForo ont été renouvelées avec succès.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data has been successfully renewed." - } - }, - { - "translated": "Échec du renouvellement des données TeaForo. Nouvelle connexion requise.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. New login required." - } - }, - { - "translated": "Échec du renouvellement des données TeaForo. Une erreur est survenue: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - } - }, - { - "translated": "Les données TeaForo sont expirées. La connexion TeaForo n'est pas disponible!", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - } - }, { "translated": "Échec de décodage des données audio pour %o: %o", "flags": [ @@ -17837,17 +17767,6 @@ "message": "Identity" } }, - { - "translated": "Connexion TeaForo", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Backrounds handicapés dans le hostbanner", "flags": [ @@ -19457,17 +19376,6 @@ "message": "Database ID:" } }, - { - "translated": "Connexion TeaForo", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo Connection" - } - }, { "translated": "Construire l'horodatage:", "flags": [ @@ -25912,16 +25820,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "Renouvellement des données TeaForo.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/i18n/hu_translate.translation b/shared/i18n/hu_translate.translation index a3c467dd..97006ca4 100644 --- a/shared/i18n/hu_translate.translation +++ b/shared/i18n/hu_translate.translation @@ -6327,83 +6327,6 @@ "in-use-system" ] }, - { - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - }, - "translated": "Nem található a TeaForo hitelesítés. TeaForo kapcsolat állapota: nincs csatlakoztatva", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - }, - "translated": "Nem sikerült inicializálni a TeaForo kapcsolatot a helyi adatokból. Hiba: %o", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data should be renewed. Executing renew." - }, - "translated": "A TeaForo adatait meg kell újítani. Megújítás végrehajtása.", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data has been successfully renewed." - }, - "translated": "A TeaForo adatait sikeresen megújították.", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. New login required." - }, - "translated": "Nem sikerült megújítani a TeaForo adatait. Új bejelentkezés szükséges.", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - }, - "translated": "Nem sikerült megújítani a TeaForo adatait. Hiba történt: %o", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - }, - "translated": "A TeaForo adatok lejártak. A TeaForo kapcsolat nem érhető el!", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, { "key": { "message": "Manage bookmarks" @@ -21228,18 +21151,6 @@ "in-use-system" ] }, - { - "key": { - "message": "TeaForo connection" - }, - "translated": "TeaForo kapcsolat", - "flags": [ - "google-translated", - "human-verified", - "ui-visible", - "in-use-system" - ] - }, { "key": { "message": "Disabled backrounds within the hostbanner" @@ -26044,18 +25955,6 @@ "in-use-system" ] }, - { - "key": { - "message": "TeaForo Connection" - }, - "translated": "TeaForo kapcsolat", - "flags": [ - "google-translated", - "human-verified", - "ui-visible", - "in-use-system" - ] - }, { "key": { "message": "Version" @@ -29936,17 +29835,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "A TeaForo adatok megújítása.", - "flags": [ - "google-translated", - "human-verified", - "in-use-system" - ] - }, { "key": { "message": "Unmute headphones" diff --git a/shared/i18n/nl_google_translate.translation b/shared/i18n/nl_google_translate.translation index b956603e..56cb4b64 100644 --- a/shared/i18n/nl_google_translate.translation +++ b/shared/i18n/nl_google_translate.translation @@ -11161,116 +11161,6 @@ "in-use-system" ] }, - { - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - }, - "translated": "Geen TeaForo-authenticatie gevonden. TeaForo-verbindingsstatus: niet verbonden", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - }, - "translated": "Het initialiseren van TeaForo-verbinding op basis van lokale gegevens is mislukt. Fout:% o", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data should be renewed. Executing renew." - }, - "translated": "TeaForo-gegevens moeten worden vernieuwd. Verlenging uitvoeren.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data has been successfully renewed." - }, - "translated": "TeaForo-gegevens zijn met succes vernieuwd.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. New login required." - }, - "translated": "Kan TeaForo-gegevens niet vernieuwen. Nieuwe login vereist.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - }, - "translated": "Kan TeaForo-gegevens niet vernieuwen. Er is een fout opgetreden:% o", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - }, - "translated": "TeaForo-gegevens zijn verlopen. TeaForo-verbinding is niet beschikbaar!", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "TeaForo-gegevens vernieuwen.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data has been successfully renewed." - }, - "translated": "TeaForo-gegevens zijn met succes vernieuwd.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. New login required." - }, - "translated": "Kan TeaForo-gegevens niet vernieuwen. Nieuwe login vereist.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - }, - "translated": "Kan TeaForo-gegevens niet vernieuwen. Er is een fout opgetreden:% o", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Server Groups" @@ -24923,17 +24813,6 @@ "in-use-system" ] }, - { - "key": { - "message": "TeaForo connection" - }, - "translated": "TeaForo-verbinding", - "flags": [ - "google-translated", - "ui-visible", - "in-use-system" - ] - }, { "key": { "message": "Disabled backrounds within the hostbanner" @@ -28358,17 +28237,6 @@ "in-use-system" ] }, - { - "key": { - "message": "TeaForo Connection" - }, - "translated": "TeaForo-verbinding", - "flags": [ - "google-translated", - "ui-visible", - "in-use-system" - ] - }, { "key": { "message": "Version" diff --git a/shared/i18n/pl_google_translate.translation b/shared/i18n/pl_google_translate.translation index 4f4dffb0..d7644b7b 100644 --- a/shared/i18n/pl_google_translate.translation +++ b/shared/i18n/pl_google_translate.translation @@ -13877,76 +13877,6 @@ "message": "failed to send logout request" } }, - { - "translated": "Nie znaleziono uwierzytelnienia TeaForo. Status połączenia TeaForo: niepodłączony", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - } - }, - { - "translated": "Nie można zainicjować połączenia TeaForo z danych lokalnych. Błąd: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - } - }, - { - "translated": "Dane TeaForo powinny zostać odnowione. Wykonywanie odnowienia.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data should be renewed. Executing renew." - } - }, - { - "translated": "Dane TeaForo zostały pomyślnie odnowione.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data has been successfully renewed." - } - }, - { - "translated": "Nie udało się odnowić danych TeaForo. Wymagane nowe logowanie.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. New login required." - } - }, - { - "translated": "Nie udało się odnowić danych TeaForo. Wystąpił błąd: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - } - }, - { - "translated": "Dane TeaForo wygasły. Połączenie TeaForo nie jest dostępne!", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - } - }, { "translated": "Nie udało się zdekodować danych audio dla %o: %o", "flags": [ @@ -17837,17 +17767,6 @@ "message": "Identity" } }, - { - "translated": "Połączenie TeaForo", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Wyłączone backrounds w hostbanner", "flags": [ @@ -19457,17 +19376,6 @@ "message": "Database ID:" } }, - { - "translated": "Połączenie TeaForo", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo Connection" - } - }, { "translated": "Zbuduj znacznik czasu:", "flags": [ @@ -25922,16 +25830,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "Odnawianie danych TeaForo.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/i18n/pt_translate.translation b/shared/i18n/pt_translate.translation index a10eec6e..afe9ffbf 100644 --- a/shared/i18n/pt_translate.translation +++ b/shared/i18n/pt_translate.translation @@ -5745,76 +5745,6 @@ "in-use-system" ] }, - { - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - }, - "translated": "Nenhuma autenticação TeaForum encontrada. Status da conexão TeaForum: desconectado", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - }, - "translated": "Falha ao inicializar a conexão TeaForum a partir de dados locais. Erro: %o", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data should be renewed. Executing renew." - }, - "translated": "Os dados do TeaForum devem ser renovados. Executando renovar.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data has been successfully renewed." - }, - "translated": "Os dados do TeaForum foram renovados com sucesso.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. New login required." - }, - "translated": "Falha ao renovar os dados do TeaForum. Novo login necessário.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - }, - "translated": "Falha ao renovar os dados do TeaForum. Ocorreu um erro: %o", - "flags": [ - "google-translated", - "in-use-system" - ] - }, - { - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - }, - "translated": "Os dados do TeaForum expiraram. A conexão TeaForum não está disponível!", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Manage bookmarks" @@ -19294,17 +19224,6 @@ "in-use-system" ] }, - { - "key": { - "message": "TeaForo connection" - }, - "translated": "Conexão TeaForum", - "flags": [ - "google-translated", - "ui-visible", - "in-use-system" - ] - }, { "key": { "message": "Disabled backrounds within the hostbanner" @@ -23696,17 +23615,6 @@ "in-use-system" ] }, - { - "key": { - "message": "TeaForo Connection" - }, - "translated": "Conexão TeaForum", - "flags": [ - "google-translated", - "ui-visible", - "in-use-system" - ] - }, { "key": { "message": "Version" @@ -26956,16 +26864,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "Renovando dados do TeaForo.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/i18n/ru_google_translate.translation b/shared/i18n/ru_google_translate.translation index f464d16f..4c3d4734 100644 --- a/shared/i18n/ru_google_translate.translation +++ b/shared/i18n/ru_google_translate.translation @@ -13450,76 +13450,6 @@ "message": "failed to send logout request" } }, - { - "translated": "Аутентификация TeaForo не найдена. Состояние соединения TeaForo: не подключено", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - } - }, - { - "translated": "Не удалось инициализировать соединение TeaForo из локальных данных. Ошибка: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - } - }, - { - "translated": "Данные TeaForo должны быть обновлены. Выполнение возобновления.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data should be renewed. Executing renew." - } - }, - { - "translated": "Данные TeaForo были успешно обновлены.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data has been successfully renewed." - } - }, - { - "translated": "Не удалось обновить данные TeaForo. Требуется новый логин.", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. New login required." - } - }, - { - "translated": "Не удалось обновить данные TeaForo. Произошла ошибка: %o", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - } - }, - { - "translated": "Срок действия данных TeaForo истек. Соединение TeaForo недоступно!", - "flags": [ - "google-translate", - "in-use-system" - ], - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - } - }, { "translated": "Не удалось декодировать аудиоданные для %o: %o", "flags": [ @@ -17421,17 +17351,6 @@ "message": "Identity" } }, - { - "translated": "TeaForo соединение", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Отключенные фоны в hostbanner", "flags": [ @@ -19052,17 +18971,6 @@ "message": "Database ID:" } }, - { - "translated": "TeaForo Connection", - "flags": [ - "google-translate", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo Connection" - } - }, { "translated": "Отметка времени создания:", "flags": [ @@ -25507,16 +25415,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "Обновление данных TeaForo.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/i18n/ru_translate_vafin.translation b/shared/i18n/ru_translate_vafin.translation index 99cd7f1e..1cecd5a4 100644 --- a/shared/i18n/ru_translate_vafin.translation +++ b/shared/i18n/ru_translate_vafin.translation @@ -9324,15 +9324,6 @@ "message": "Sounds" } }, - { - "translated": "Аккаунт форума TeaSpeak", - "flags": [ - "google-translate" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Идентификация", "flags": [ diff --git a/shared/i18n/tr_translate.translation b/shared/i18n/tr_translate.translation index 258a7ecd..c5ef8f84 100644 --- a/shared/i18n/tr_translate.translation +++ b/shared/i18n/tr_translate.translation @@ -13877,76 +13877,6 @@ "message": "failed to send logout request" } }, - { - "translated": "TeaForo kimlik doğrulaması bulunamadı. TeaForo bağlantı durumu: bağlantısız", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "No TeaForo authentification found. TeaForo connection status: unconnected" - } - }, - { - "translated": "TeaForo bağlantısı yerel verilerden başlatılamadı. Hata: %o", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "Failed to initialize TeaForo connection from local data. Error: %o" - } - }, - { - "translated": "TeaForo verileri yenilenmelidir. Yenileme çalıştırılıyor.", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "TeaForo data should be renewed. Executing renew." - } - }, - { - "translated": "TeaForo verileri başarıyla yenilendi.", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "TeaForo data has been successfully renewed." - } - }, - { - "translated": "TeaForo verileri yenilenemedi. Yeni giriş gerekli.", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. New login required." - } - }, - { - "translated": "TeaForo verileri yenilenemedi. Bir hata oluştu: %o", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "Failed to renew TeaForo data. An error occurred: %o" - } - }, - { - "translated": "TeaForo verilerinin süresi doldu. TeaForo bağlantısı mevcut değil!", - "flags": [ - "human-modified", - "in-use-system" - ], - "key": { - "message": "TeaForo data is expired. TeaForo connection isn't available!" - } - }, { "translated": " %o için ses verileri kodu çözülemedi: %o", "flags": [ @@ -17837,17 +17767,6 @@ "message": "Identity" } }, - { - "translated": "TeaForo bağlantısı", - "flags": [ - "human-modified", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo connection" - } - }, { "translated": "Ana bilgisayardaki engelli artalanları", "flags": [ @@ -19457,17 +19376,6 @@ "message": "Database ID:" } }, - { - "translated": "TeaForo Bağlantısı", - "flags": [ - "human-modified", - "ui-visible", - "in-use-system" - ], - "key": { - "message": "TeaForo Connection" - } - }, { "translated": "Zaman damgası oluşturun:", "flags": [ @@ -25912,16 +25820,6 @@ "in-use-system" ] }, - { - "key": { - "message": "Renewing TeaForo data." - }, - "translated": "TeaForo verilerini yenileme.", - "flags": [ - "google-translated", - "in-use-system" - ] - }, { "key": { "message": "Set away on all servers" diff --git a/shared/js/SelectedClientInfo.ts b/shared/js/SelectedClientInfo.ts index 9cbde59a..c79f4b8a 100644 --- a/shared/js/SelectedClientInfo.ts +++ b/shared/js/SelectedClientInfo.ts @@ -166,11 +166,6 @@ export class SelectedClientInfo { }; this.events.fire("notify_cache_changed", { category: "version" }); } - - if('client_teaforo_flags' in event.updated_properties || 'client_teaforo_name' in event.updated_properties || 'client_teaforo_id' in event.updated_properties) { - this.updateForumAccount(client); - this.events.fire("notify_cache_changed", { category: "forum-account" }); - } })); events.push(client.events.on("notify_audio_level_changed", () => { @@ -209,18 +204,6 @@ export class SelectedClientInfo { } } - private updateForumAccount(client: ClientEntry) { - if(client.properties.client_teaforo_id) { - this.currentClientStatus.forumAccount = { - flags: client.properties.client_teaforo_flags, - nickname: client.properties.client_teaforo_name, - userId: client.properties.client_teaforo_id - }; - } else { - this.currentClientStatus.forumAccount = undefined; - } - } - private updateChannelGroup(client: ClientEntry) { this.currentClientStatus.channelGroup = client.properties.client_channel_group_id; this.currentClientStatus.channelGroupInheritedChannel = client.properties.client_channel_group_inherited_channel_id; @@ -259,6 +242,5 @@ export class SelectedClientInfo { this.updateCachedClientStatus(client); this.updateCachedCountry(client); this.updateCachedVolume(client); - this.updateForumAccount(client); } } \ No newline at end of file diff --git a/shared/js/main.tsx b/shared/js/main.tsx index 9f898c5f..7f240852 100644 --- a/shared/js/main.tsx +++ b/shared/js/main.tsx @@ -1,6 +1,5 @@ import * as loader from "tc-loader"; import {initializeI18N, tra} from "./i18n/localize"; -import * as fidentity from "./profiles/identities/TeaForumIdentity"; import * as global_ev_handler from "./events/ClientGlobalControlHandler"; import {AppParameters, settings, Settings, UrlParameterBuilder, UrlParameterParser} from "tc-shared/settings"; import {LogCategory, logDebug, logError, logInfo, logWarn} from "tc-shared/log"; @@ -387,8 +386,6 @@ function main() { server_connections.setActiveConnectionHandler(initialHandler); initialHandler.acquireInputHardware().then(() => {}); - /** Setup the XF forum identity **/ - fidentity.update_forum(); initializeKeyControl(); checkForUpdatedApp(); diff --git a/shared/js/profiles/ConnectionProfile.ts b/shared/js/profiles/ConnectionProfile.ts index 4caa5cdf..2bf3f531 100644 --- a/shared/js/profiles/ConnectionProfile.ts +++ b/shared/js/profiles/ConnectionProfile.ts @@ -1,18 +1,17 @@ -import {decode_identity, IdentitifyType, Identity} from "../profiles/Identity"; -import {guid} from "../crypto/uid"; -import {TeaForumIdentity} from "../profiles/identities/TeaForumIdentity"; -import {TeaSpeakIdentity} from "../profiles/identities/TeamSpeakIdentity"; -import {AbstractServerConnection} from "../connection/ConnectionBase"; -import {HandshakeIdentityHandler} from "../connection/HandshakeHandler"; -import {createErrorModal} from "../ui/elements/Modal"; -import {formatMessage} from "../ui/frames/chat"; +import { decode_identity, IdentitifyType, Identity } from "../profiles/Identity"; +import { guid } from "../crypto/uid"; +import { TeaSpeakIdentity } from "../profiles/identities/TeamSpeakIdentity"; +import { AbstractServerConnection } from "../connection/ConnectionBase"; +import { HandshakeIdentityHandler } from "../connection/HandshakeHandler"; +import { createErrorModal } from "../ui/elements/Modal"; +import { formatMessage } from "../ui/frames/chat"; import * as loader from "tc-loader"; -import {Stage} from "tc-loader"; -import {LogCategory, logDebug, logError} from "tc-shared/log"; -import {tr} from "tc-shared/i18n/localize"; -import {getStorageAdapter} from "tc-shared/StorageAdapter"; -import {ignorePromise} from "tc-shared/proto"; -import {assertMainApplication} from "tc-shared/ui/utils"; +import { Stage } from "tc-loader"; +import { LogCategory, logDebug, logError } from "tc-shared/log"; +import { tr } from "tc-shared/i18n/localize"; +import { getStorageAdapter } from "tc-shared/StorageAdapter"; +import { ignorePromise } from "tc-shared/proto"; +import { assertMainApplication } from "tc-shared/ui/utils"; /* * We're loading & saving profiles with the StorageAdapter. @@ -52,9 +51,7 @@ export class ConnectionProfile { if (current_type === undefined) return undefined; - if (current_type == IdentitifyType.TEAFORO) { - return TeaForumIdentity.identity(); - } else if (current_type == IdentitifyType.TEAMSPEAK || current_type == IdentitifyType.NICKNAME) { + if (current_type == IdentitifyType.TEAMSPEAK || current_type == IdentitifyType.NICKNAME) { return this.identities[IdentitifyType[current_type].toLowerCase()]; } @@ -144,7 +141,7 @@ async function loadConnectProfiles() { const profiles_json = await getStorageAdapter().get("profiles"); let profiles_data: ProfilesData = (() => { try { - return profiles_json ? JSON.parse(profiles_json) : {version: 0} as any; + return profiles_json ? JSON.parse(profiles_json) : { version: 0 } as any; } catch (error) { logError(LogCategory.IDENTITIES, tr("Invalid profile json! Resetting profiles :( (%o)"), profiles_json); createErrorModal(tr("Profile data invalid"), formatMessage(tr("The profile data is invalid.{:br:}This might cause data loss."))).open(); @@ -170,7 +167,7 @@ async function loadConnectProfiles() { } const defaultProfile = findConnectProfile("default"); - if (!defaultProfile) { //Create a default profile and teaforo profile + if (!defaultProfile) { //Create a default profile { const profile = createConnectProfile(tr("Default Profile"), "default"); profile.defaultPassword = ""; @@ -194,15 +191,6 @@ async function loadConnectProfiles() { } } - { /* forum identity (works only when connected to the forum) */ - const profile = createConnectProfile(tr("TeaSpeak Forum Profile"), "teaforo"); - profile.defaultPassword = ""; - profile.defaultUsername = ""; - - profile.setIdentity(IdentitifyType.TEAFORO, TeaForumIdentity.identity()); - profile.selectedIdentityType = IdentitifyType[IdentitifyType.TEAFORO]; - } - save(); } } @@ -280,7 +268,7 @@ export function delete_profile(profile: ConnectionProfile) { } window.addEventListener("beforeunload", event => { - if(requires_save()) { + if (requires_save()) { save(); } }); diff --git a/shared/js/profiles/Identity.ts b/shared/js/profiles/Identity.ts index 58a1b04d..a630c490 100644 --- a/shared/js/profiles/Identity.ts +++ b/shared/js/profiles/Identity.ts @@ -1,51 +1,46 @@ -import {AbstractServerConnection, ServerCommand} from "../connection/ConnectionBase"; -import {HandshakeIdentityHandler} from "../connection/HandshakeHandler"; -import {AbstractCommandHandler} from "../connection/AbstractCommandHandler"; -import {LogCategory, logError, logWarn} from "tc-shared/log"; -import {tr} from "tc-shared/i18n/localize"; +import { AbstractServerConnection, ServerCommand } from "../connection/ConnectionBase"; +import { HandshakeIdentityHandler } from "../connection/HandshakeHandler"; +import { AbstractCommandHandler } from "../connection/AbstractCommandHandler"; +import { LogCategory, logError, logWarn } from "tc-shared/log"; +import { tr } from "tc-shared/i18n/localize"; export enum IdentitifyType { - TEAFORO, TEAMSPEAK, NICKNAME } export interface Identity { - fallback_name(): string | undefined ; - uid() : string; - type() : IdentitifyType; + fallback_name(): string | undefined; + uid(): string; + type(): IdentitifyType; - valid() : boolean; + valid(): boolean; - encode?() : string; - decode(data: string) : Promise; + encode?(): string; + decode(data: string): Promise; - spawn_identity_handshake_handler(connection: AbstractServerConnection) : HandshakeIdentityHandler; + spawn_identity_handshake_handler(connection: AbstractServerConnection): HandshakeIdentityHandler; } /* avoid circular dependencies here */ -export async function decode_identity(type: IdentitifyType, data: string) : Promise { +export async function decode_identity(type: IdentitifyType, data: string): Promise { let identity: Identity; switch (type) { case IdentitifyType.NICKNAME: const nidentity = require("tc-shared/profiles/identities/NameIdentity"); identity = new nidentity.NameIdentity(); break; - case IdentitifyType.TEAFORO: - const fidentity = require("tc-shared/profiles/identities/TeaForumIdentity"); - identity = new fidentity.TeaForumIdentity(undefined); - break; case IdentitifyType.TEAMSPEAK: const tidentity = require("tc-shared/profiles/identities/TeamSpeakIdentity"); identity = new tidentity.TeaSpeakIdentity(undefined, undefined); break; } - if(!identity) + if (!identity) return undefined; try { await identity.decode(data) - } catch(error) { + } catch (error) { logError(LogCategory.IDENTITIES, tr("Failed to decode identity: %o"), error); return undefined; } @@ -60,10 +55,6 @@ export function create_identity(type: IdentitifyType) { const nidentity = require("tc-shared/profiles/identities/NameIdentity"); identity = new nidentity.NameIdentity(); break; - case IdentitifyType.TEAFORO: - const fidentity = require("tc-shared/profiles/identities/TeaForumIdentity"); - identity = new fidentity.TeaForumIdentity(undefined); - break; case IdentitifyType.TEAMSPEAK: const tidentity = require("tc-shared/profiles/identities/TeamSpeakIdentity"); identity = new tidentity.TeaSpeakIdentity(undefined, undefined); @@ -82,9 +73,9 @@ export class HandshakeCommandHandler handle_command(command: ServerCommand): boolean { - if(typeof this[command.command] === "function") { + if (typeof this[command.command] === "function") { this[command.command](command.arguments); - } else if(command.command == "error") { + } else if (command.command == "error") { return false; } else { logWarn(LogCategory.IDENTITIES, tr("Received unknown command while handshaking (%o)"), command); @@ -111,12 +102,12 @@ export abstract class AbstractHandshakeIdentityHandler implements HandshakeIdent abstract executeHandshake(); protected trigger_success() { - for(const callback of this.callbacks) + for (const callback of this.callbacks) callback(true); } protected trigger_fail(message: string) { - for(const callback of this.callbacks) + for (const callback of this.callbacks) callback(false, message); } } \ No newline at end of file diff --git a/shared/js/profiles/identities/TeaForumIdentity.ts b/shared/js/profiles/identities/TeaForumIdentity.ts deleted file mode 100644 index 177dfad7..00000000 --- a/shared/js/profiles/identities/TeaForumIdentity.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { - AbstractHandshakeIdentityHandler, - HandshakeCommandHandler, - IdentitifyType, - Identity -} from "../../profiles/Identity"; -import {LogCategory, logError} from "../../log"; -import {CommandResult} from "../../connection/ServerConnectionDeclaration"; -import {AbstractServerConnection} from "../../connection/ConnectionBase"; -import {HandshakeIdentityHandler} from "../../connection/HandshakeHandler"; -import * as forum from "./teaspeak-forum"; -import { tr } from "tc-shared/i18n/localize"; - -class TeaForumHandshakeHandler extends AbstractHandshakeIdentityHandler { - readonly identity: TeaForumIdentity; - handler: HandshakeCommandHandler; - - constructor(connection: AbstractServerConnection, identity: TeaForumIdentity) { - super(connection); - this.identity = identity; - this.handler = new HandshakeCommandHandler(connection, this); - this.handler["handshakeidentityproof"] = this.handle_proof.bind(this); - } - - executeHandshake() { - this.connection.getCommandHandler().registerHandler(this.handler); - this.connection.send_command("handshakebegin", { - intention: 0, - authentication_method: this.identity.type(), - data: this.identity.data().data_json() - }).catch(error => { - logError(LogCategory.IDENTITIES, tr("Failed to initialize TeaForum based handshake. Error: %o"), error); - - if(error instanceof CommandResult) - error = error.extra_message || error.message; - this.trigger_fail("failed to execute begin (" + error + ")"); - }); - } - - - private handle_proof(json) { - this.connection.send_command("handshakeindentityproof", { - proof: this.identity.data().data_sign() - }).catch(error => { - logError(LogCategory.IDENTITIES, tr("Failed to proof the identity. Error: %o"), error); - - if(error instanceof CommandResult) - error = error.extra_message || error.message; - this.trigger_fail("failed to execute proof (" + error + ")"); - }).then(() => this.trigger_success()); - } - - protected trigger_fail(message: string) { - this.connection.getCommandHandler().unregisterHandler(this.handler); - super.trigger_fail(message); - } - - protected trigger_success() { - this.connection.getCommandHandler().unregisterHandler(this.handler); - super.trigger_success(); - } -} - -export class TeaForumIdentity implements Identity { - private readonly identity_data: forum.Data; - - valid() : boolean { - return !!this.identity_data && !this.identity_data.is_expired(); - } - - constructor(data: forum.Data) { - this.identity_data = data; - } - - data() { - return this.identity_data; - } - - decode(data) : Promise { - data = JSON.parse(data); - if(data.version !== 1) - throw "invalid version"; - - return; - } - - encode() : string { - return JSON.stringify({ - version: 1 - }); - } - - spawn_identity_handshake_handler(connection: AbstractServerConnection) : HandshakeIdentityHandler { - return new TeaForumHandshakeHandler(connection, this); - } - - fallback_name(): string | undefined { - return this.identity_data ? this.identity_data.name() : undefined; - } - - type(): IdentitifyType { - return IdentitifyType.TEAFORO; - } - - uid(): string { - //FIXME: Real UID! - return "TeaForo#" + ((this.identity_data ? this.identity_data.name() : "Another TeaSpeak user")); - } - - public static identity() { - return static_identity; - } -} - -let static_identity: TeaForumIdentity; - -export function set_static_identity(identity: TeaForumIdentity) { - static_identity = identity; -} - -export function update_forum() { - if(forum.logged_in() && (!static_identity || static_identity.data() !== forum.data())) { - static_identity = new TeaForumIdentity(forum.data()); - } else { - static_identity = undefined; - } -} - -export function valid_static_forum_identity() : boolean { - return static_identity && static_identity.valid(); -} - -export function static_forum_identity() : TeaForumIdentity | undefined { - return static_identity; -} \ No newline at end of file diff --git a/shared/js/profiles/identities/teaspeak-forum.ts b/shared/js/profiles/identities/teaspeak-forum.ts deleted file mode 100644 index 899db2fb..00000000 --- a/shared/js/profiles/identities/teaspeak-forum.ts +++ /dev/null @@ -1,399 +0,0 @@ -import {settings, Settings} from "../../settings"; -import * as loader from "tc-loader"; -import * as fidentity from "./TeaForumIdentity"; -import {LogCategory, logDebug, logError, logInfo, logWarn} from "../../log"; -import {tr} from "tc-shared/i18n/localize"; -import {getStorageAdapter} from "tc-shared/StorageAdapter"; - -/* TODO: Properly redesign this whole system! */ - -declare global { - interface Window { - grecaptcha: GReCaptcha; - } -} - -interface GReCaptcha { - render(container: string | HTMLElement, parameters: { - sitekey: string; - theme?: "dark" | "light"; - size?: "compact" | "normal"; - - tabindex?: number; - - callback?: (token: string) => any; - "expired-callback"?: () => any; - "error-callback"?: (error: any) => any; - }) : string; /* widget_id */ - - reset(widget_id?: string); -} - -export namespace gcaptcha { - export async function initialize() { - if(typeof(window.grecaptcha) === "undefined") { - let script = document.createElement("script"); - script.async = true; - - let timeout; - const callback_name = "captcha_callback_" + Math.random().toString().replace(".", ""); - try { - await new Promise((resolve, reject) => { - script.onerror = reject; - window[callback_name] = resolve; - script.src = "https://www.google.com/recaptcha/api.js?onload=" + encodeURIComponent(callback_name) + "&render=explicit"; - - document.body.append(script); - timeout = setTimeout(() => reject("timeout"), 15000); - }); - } catch(error) { - script.remove(); - script = undefined; - - logError(LogCategory.GENERAL, tr("Failed to fetch recaptcha javascript source: %o"), error); - throw tr("failed to download source"); - } finally { - if(script) - script.onerror = undefined; - delete window[callback_name]; - timeout && clearTimeout(timeout); - } - } - - if(typeof(window.grecaptcha) === "undefined") { - throw tr("failed to load recaptcha"); - } - } - - export async function spawn(container: JQuery, key: string, callback_data: (token: string) => any) { - try { - await initialize(); - } catch(error) { - logError(LogCategory.GENERAL, tr("Failed to initialize G-Recaptcha. Error: %o"), error); - throw tr("initialisation failed"); - } - if(container.attr("captcha-uuid")) - window.grecaptcha.reset(container.attr("captcha-uuid")); - else { - container.attr("captcha-uuid", window.grecaptcha.render(container[0], { - "sitekey": key, - callback: callback_data - })); - } - } -} - -function getForumApiURL() { - return settings.getValue(Settings.KEY_TEAFORO_URL); -} - -export class Data { - readonly auth_key: string; - readonly raw: string; - readonly sign: string; - - parsed: { - user_id: number; - user_name: string; - - data_age: number; - - user_group_id: number; - - is_staff: boolean; - user_groups: number[]; - }; - - constructor(auth: string, raw: string, sign: string) { - this.auth_key = auth; - this.raw = raw; - this.sign = sign; - - this.parsed = JSON.parse(raw); - } - - - data_json() : string { return this.raw; } - data_sign() : string { return this.sign; } - - name() : string { return this.parsed.user_name; } - - user_id() { return this.parsed.user_id; } - user_group() { return this.parsed.user_group_id; } - - is_stuff() : boolean { return this.parsed.is_staff; } - is_premium() : boolean { return this.parsed.user_groups.indexOf(5) != -1; } - - data_age() : Date { return new Date(this.parsed.data_age); } - - is_expired() : boolean { return this.parsed.data_age + 48 * 60 * 60 * 1000 < Date.now(); } - should_renew() : boolean { return this.parsed.data_age + 24 * 60 * 60 * 1000 < Date.now(); } /* renew data all 24hrs */ -} -let forumData: Data | undefined; - -export function logged_in() : boolean { - return !!forumData && !forumData.is_expired(); -} - -export function data() : Data { return forumData; } - -export interface LoginResult { - status: "success" | "captcha" | "error"; - - error_message?: string; - captcha?: { - type: "gre-captcha" | "unknown"; - data: any; /* in case of gre-captcha it would be the side key */ - }; -} - -export async function login(username: string, password: string, captcha?: any) : Promise { - let response; - try { - response = await new Promise((resolve, reject) => { - $.ajax({ - url: getForumApiURL() + "?web-api/v1/login", - type: "POST", - cache: false, - data: { - username: username, - password: password, - remember: true, - "g-recaptcha-response": captcha - }, - - crossDomain: true, - - success: resolve, - error: (xhr, status, error) => { - logDebug(LogCategory.GENERAL, tr("Login request failed %o: %o"), status, error); - reject(tr("request failed")); - } - }) - }); - } catch(error) { - return { - status: "error", - error_message: tr("failed to send login request") - }; - } - - if(response["status"] !== "ok") { - logError(LogCategory.GENERAL, tr("Response status not okey. Error happend: %o"), response); - return { - status: "error", - error_message: (response["errors"] || [])[0] || tr("Unknown error") - }; - } - - if(!response["success"]) { - logError(LogCategory.GENERAL, tr("Login failed. Response %o"), response); - - let message = tr("failed to login"); - let captcha; - /* user/password wrong | and maybe captcha required */ - if(response["code"] == 1 || response["code"] == 3) - message = tr("Invalid username or password"); - if(response["code"] == 2 || response["code"] == 3) { - captcha = { - type: response["captcha"]["type"], - data: response["captcha"]["siteKey"] //TODO: Why so static here? - }; - if(response["code"] == 2) - message = tr("captcha required"); - } - - return { - status: typeof(captcha) !== "undefined" ? "captcha" : "error", - error_message: message, - captcha: captcha - }; - } - //document.cookie = "user_data=" + response["data"] + ";path=/"; - //document.cookie = "user_sign=" + response["sign"] + ";path=/"; - - try { - forumData = new Data(response["auth-key"], response["data"], response["sign"]); - const adapter = getStorageAdapter(); - await adapter.set("teaspeak-forum-data", response["data"]); - await adapter.set("teaspeak-forum-sign", response["sign"]); - await adapter.set("teaspeak-forum-auth", response["auth-key"]); - fidentity.update_forum(); - } catch(error) { - logError(LogCategory.GENERAL, tr("Failed to parse forum given data: %o"), error); - return { - status: "error", - error_message: tr("Failed to parse response data") - } - } - - return { - status: "success" - }; -} - -async function resetForumLocalData() { - const adapter = getStorageAdapter(); - await adapter.delete("teaspeak-forum-data"); - await adapter.delete("teaspeak-forum-sign"); - await adapter.delete("teaspeak-forum-auth"); -} - -export async function renew_data() : Promise<"success" | "login-required"> { - let response; - try { - response = await new Promise((resolve, reject) => { - $.ajax({ - url: getForumApiURL() + "?web-api/v1/renew-data", - type: "GET", - cache: false, - - crossDomain: true, - - data: { - "auth-key": forumData.auth_key - }, - - success: resolve, - error: (xhr, status, error) => { - logError(LogCategory.GENERAL, tr("Renew request failed %o: %o"), status, error); - reject(tr("request failed")); - } - }) - }); - } catch(error) { - throw tr("failed to send renew request"); - } - - if(response["status"] !== "ok") { - logError(LogCategory.GENERAL, tr("Response status not okey. Error happend: %o"), response); - throw (response["errors"] || [])[0] || tr("Unknown error"); - } - - if(!response["success"]) { - if(response["code"] == 1) { - return "login-required"; - } - throw "invalid error code (" + response["code"] + ")"; - } - if(!response["data"] || !response["sign"]) - throw tr("response missing data"); - - logDebug(LogCategory.GENERAL, tr("Renew succeeded. Parsing data.")); - - try { - forumData = new Data(forumData.auth_key, response["data"], response["sign"]); - await getStorageAdapter().set("teaspeak-forum-data", response["data"]); - await getStorageAdapter().set("teaspeak-forum-sign", response["sign"]); - fidentity.update_forum(); - } catch(error) { - logError(LogCategory.GENERAL, tr("Failed to parse forum given data: %o"), error); - throw tr("failed to parse data"); - } - - return "success"; -} - -export async function logout() : Promise { - if(!logged_in()) { - return; - } - - let response; - try { - response = await new Promise((resolve, reject) => { - $.ajax({ - url: getForumApiURL() + "?web-api/v1/logout", - type: "GET", - cache: false, - - crossDomain: true, - - data: { - "auth-key": forumData.auth_key - }, - - success: resolve, - error: (xhr, status, error) => { - logInfo(LogCategory.GENERAL, tr("Logout request failed %o: %o"), status, error); - reject(tr("request failed")); - } - }) - }); - } catch(error) { - throw tr("failed to send logout request"); - } - - if(response["status"] !== "ok") { - logError(LogCategory.GENERAL, tr("Response status not ok. Error happened: %o"), response); - throw (response["errors"] || [])[0] || tr("Unknown error"); - } - - if(!response["success"]) { - /* code 1 means not logged in, its an success */ - if(response["code"] != 1) { - throw "invalid error code (" + response["code"] + ")"; - } - } - - forumData = undefined; - await resetForumLocalData(); - fidentity.update_forum(); -} - -loader.register_task(loader.Stage.JAVASCRIPT_INITIALIZING, { - name: "TeaForo initialize", - priority: 10, - function: async () => { - const rawData = await getStorageAdapter().get("teaspeak-forum-data"); - const rawSign = await getStorageAdapter().get("teaspeak-forum-sign"); - const rawForumAuth = await getStorageAdapter().get("teaspeak-forum-auth"); - if(!rawData || !rawSign || !rawForumAuth) { - logInfo(LogCategory.GENERAL, tr("No TeaForo authentication found. TeaForo connection status: unconnected")); - return; - } - - try { - forumData = new Data(rawForumAuth, rawData, rawSign); - } catch(error) { - logError(LogCategory.GENERAL, tr("Failed to initialize TeaForo connection from local data. Error: %o"), error); - return; - } - if(forumData.should_renew()) { - logInfo(LogCategory.GENERAL, tr("TeaForo data should be renewed. Executing renew.")); - renew_data().then(async status => { - if(status === "success") { - logInfo(LogCategory.GENERAL, tr("TeaForo data has been successfully renewed.")); - } else { - logWarn(LogCategory.GENERAL, tr("Failed to renew TeaForo data. New login required.")); - await resetForumLocalData(); - } - }).catch(error => { - logWarn(LogCategory.GENERAL, tr("Failed to renew TeaForo data. An error occurred: %o"), error); - }); - return; - } - - if(forumData && forumData.is_expired()) { - logError(LogCategory.GENERAL, tr("TeaForo data is expired. TeaForo connection isn't available!")); - } - - - setInterval(() => { - /* if we don't have any _data object set we could not renew anything */ - if(forumData) { - logInfo(LogCategory.IDENTITIES, tr("Renewing TeaForo data.")); - renew_data().then(async status => { - if(status === "success") { - logInfo(LogCategory.IDENTITIES,tr("TeaForo data has been successfully renewed.")); - } else { - logWarn(LogCategory.IDENTITIES,tr("Failed to renew TeaForo data. New login required.")); - await resetForumLocalData(); - } - }).catch(error => { - logWarn(LogCategory.GENERAL, tr("Failed to renew TeaForo data. An error occurred: %o"), error); - }); - } - }, 24 * 60 * 60 * 1000); - } -}); \ No newline at end of file diff --git a/shared/js/settings.ts b/shared/js/settings.ts index d8ef500f..9b1f0223 100644 --- a/shared/js/settings.ts +++ b/shared/js/settings.ts @@ -572,11 +572,6 @@ export class Settings { valueType: "boolean", }; - static readonly KEY_TEAFORO_URL: ValuedRegistryKey = { - key: "teaforo_url", - defaultValue: "https://forum.teaspeak.de/", - valueType: "string", - }; static readonly KEY_FONT_SIZE: ValuedRegistryKey = { key: "font_size", diff --git a/shared/js/tree/Client.ts b/shared/js/tree/Client.ts index 96587b3a..1141e6e9 100644 --- a/shared/js/tree/Client.ts +++ b/shared/js/tree/Client.ts @@ -74,10 +74,6 @@ export class ClientProperties { client_output_muted: boolean = false; client_is_channel_commander: boolean = false; - client_teaforo_id: number = 0; - client_teaforo_name: string = ""; - client_teaforo_flags: number = 0; /* 0x01 := Banned | 0x02 := Stuff | 0x04 := Premium */ - /* not updated in view! */ client_month_bytes_uploaded: number = 0; diff --git a/shared/js/ui/frames/side/ClientInfoRenderer.scss b/shared/js/ui/frames/side/ClientInfoRenderer.scss index 38c52b21..70d59139 100644 --- a/shared/js/ui/frames/side/ClientInfoRenderer.scss +++ b/shared/js/ui/frames/side/ClientInfoRenderer.scss @@ -367,11 +367,6 @@ $bot_thumbnail_height: 9em; } } - &.clientTeaforoAccount { - a, a:visited { - color: #d9d9d9; - } - } } } diff --git a/shared/js/ui/frames/side/ClientInfoRenderer.tsx b/shared/js/ui/frames/side/ClientInfoRenderer.tsx index de584b33..18eda69a 100644 --- a/shared/js/ui/frames/side/ClientInfoRenderer.tsx +++ b/shared/js/ui/frames/side/ClientInfoRenderer.tsx @@ -248,44 +248,6 @@ const ClientVolume = React.memo(() => { ); }); -const ClientForumAccount = React.memo(() => { - const events = useContext(EventsContext); - const client = useContext(ClientContext); - const [ forum, setForum ] = useDependentState(() => { - if(client.type !== "none") { - events.fire("query_forum"); - } - - return undefined; - }, [ client.contextHash ]); - - events.reactUse("notify_forum", event => setForum(event.forum), undefined, []); - - if(!forum) { - return null; - } - - let text = forum.nickname; - if((forum.flags & 0x01) > 0) { - text += " (" + tr("Banned") + ")"; - } - - if((forum.flags & 0x02) > 0) { - text += " (" + tr("Stuff") + ")"; - } - - if((forum.flags & 0x04) > 0) { - text += " (" + tr("Premium") + ")"; - } - - - return ( - - TeaSpeak Forum account - {text} - - ); -}); const ClientVersion = React.memo(() => { const events = useContext(EventsContext); @@ -494,7 +456,6 @@ const ConnectedClientInfoBlock = () => { - diff --git a/shared/js/ui/modal/ModalClientInfo.ts b/shared/js/ui/modal/ModalClientInfo.ts index c49fcd4f..11bce758 100644 --- a/shared/js/ui/modal/ModalClientInfo.ts +++ b/shared/js/ui/modal/ModalClientInfo.ts @@ -147,31 +147,6 @@ function apply_basic_info(client: ClientEntry, tag: JQuery, modal: Modal, callba }); } - /* TeaForo */ - { - const container = tag.find(".property-teaforo .value").empty(); - - if (client.properties.client_teaforo_id) { - container.children().remove(); - - let text = client.properties.client_teaforo_name; - if ((client.properties.client_teaforo_flags & 0x01) > 0) - text += " (" + tr("Banned") + ")"; - if ((client.properties.client_teaforo_flags & 0x02) > 0) - text += " (" + tr("Stuff") + ")"; - if ((client.properties.client_teaforo_flags & 0x04) > 0) - text += " (" + tr("Premium") + ")"; - - $.spawn("a") - .attr("href", "https://forum.teaspeak.de/index.php?members/" + client.properties.client_teaforo_id) - .attr("target", "_blank") - .text(text) - .appendTo(container); - } else { - container.append($.spawn("a").text(tr("Not connected"))); - } - } - /* Version */ { const container = tag.find(".property-version"); diff --git a/shared/js/ui/modal/ModalSettings.tsx b/shared/js/ui/modal/ModalSettings.tsx index 8d837cff..87a2a594 100644 --- a/shared/js/ui/modal/ModalSettings.tsx +++ b/shared/js/ui/modal/ModalSettings.tsx @@ -6,7 +6,6 @@ import {manager, setSoundMasterVolume, Sound} from "tc-shared/audio/Sounds"; import * as profiles from "tc-shared/profiles/ConnectionProfile"; import {ConnectionProfile} from "tc-shared/profiles/ConnectionProfile"; import {IdentitifyType} from "tc-shared/profiles/Identity"; -import {TeaForumIdentity} from "tc-shared/profiles/identities/TeaForumIdentity"; import {TeaSpeakIdentity} from "tc-shared/profiles/identities/TeamSpeakIdentity"; import {NameIdentity} from "tc-shared/profiles/identities/NameIdentity"; import {LogCategory, logDebug, logError, logTrace, logWarn} from "tc-shared/log"; @@ -14,7 +13,6 @@ import * as i18n from "tc-shared/i18n/localize"; import {RepositoryTranslation, TranslationRepository} from "tc-shared/i18n/localize"; import {Registry} from "tc-shared/events"; import * as i18nc from "../../i18n/CountryFlag"; -import * as forum from "tc-shared/profiles/identities/teaspeak-forum"; import {formatMessage, set_icon_size} from "tc-shared/ui/frames/chat"; import {spawnTeamSpeakIdentityImport, spawnTeamSpeakIdentityImprove} from "tc-shared/ui/modal/ModalIdentity"; import {getAudioBackend, OutputDevice} from "tc-shared/audio/Player"; @@ -32,12 +30,8 @@ type ProfileInfoEvent = { id: string, name: string, nickname: string, - identity_type: "teaforo" | "teamspeak" | "nickname", + identity_type: "teamspeak" | "nickname", - identity_forum?: { - valid: boolean, - fallback_name: string - }, identity_nickname?: { name: string, fallback_name: string @@ -71,7 +65,7 @@ export interface SettingProfileEvents { "select-identity-type": { profile_id: string, - identity_type: "teamspeak" | "teaforo" | "nickname" | "unset" + identity_type: "teamspeak" | "nickname" | "unset" }, "query-profile-validity": { profile_id: string }, @@ -232,7 +226,6 @@ export function spawnSettingsModal(default_page?: string): Modal { settings_audio_speaker(modal.htmlTag.find(".right .container.audio-speaker"), modal); settings_audio_sounds(modal.htmlTag.find(".right .container.audio-sounds"), modal); const update_profiles = settings_identity_profiles(modal.htmlTag.find(".right .container.identity-profiles"), modal); - settings_identity_forum(modal.htmlTag.find(".right .container.identity-forum"), modal, update_profiles as any); modal.close_listener.push(() => { if (profiles.requires_save()) @@ -880,7 +873,6 @@ export namespace modal_settings { }); const build_profile_info = (profile: ConnectionProfile) => { - const forum_data = profile.selectedIdentity(IdentitifyType.TEAFORO) as TeaForumIdentity; const teamspeak_data = profile.selectedIdentity(IdentitifyType.TEAMSPEAK) as TeaSpeakIdentity; const nickname_data = profile.selectedIdentity(IdentitifyType.NICKNAME) as NameIdentity; @@ -889,10 +881,6 @@ export namespace modal_settings { name: profile.profileName, nickname: profile.defaultUsername, identity_type: profile.selectedIdentityType as any, - identity_forum: !forum_data ? undefined : { - valid: forum_data.valid(), - fallback_name: forum_data.fallback_name() - }, identity_nickname: !nickname_data ? undefined : { name: nickname_data.name(), fallback_name: nickname_data.fallback_name() @@ -1465,7 +1453,6 @@ export namespace modal_settings { if (event.status === "success") { current_identity_type = event.info.identity_type; fallback_names["nickname"] = event.info.identity_nickname ? event.info.identity_nickname.fallback_name : undefined; - fallback_names["teaforo"] = event.info.identity_forum ? event.info.identity_forum.fallback_name : undefined; fallback_names["teamspeak"] = event.info.identity_teamspeak ? event.info.identity_teamspeak.fallback_name : undefined; last_name = event.info.nickname; @@ -1722,37 +1709,6 @@ export namespace modal_settings { button_improve.on('click', event => event_registry.fire("improve-identity-teamspeak-level", {profile_id: current_profile})); } - /* special info TeaSpeak - Forum */ - { - const container_settings = container.find(".container-teaforo"); - const container_valid = container_settings.find(".container-valid"); - const container_invalid = container_settings.find(".container-invalid"); - - const button_setup = container_settings.find(".button-setup"); - - event_registry.on("select-identity-type", event => { - if (event.profile_id !== current_profile) return; - - container_settings.toggle(event.identity_type === "teaforo"); - }); - - event_registry.on("query-profile", event => { - container_valid.toggle(false); - container_invalid.toggle(false); - }); - - event_registry.on("query-profile-result", event => { - if (event.profile_id !== current_profile) return; - - const valid = event.status === "success" && event.info.identity_forum && event.info.identity_forum.valid; - container_valid.toggle(!!valid); - container_invalid.toggle(!valid); - }); - - button_setup.on('click', event => event_registry.fire_react("setup-forum-connection")); - button_setup.toggle(settings.forum_setuppable); - } - /* special info nickname */ { const container_settings = container.find(".container-nickname"); @@ -1927,117 +1883,3 @@ export namespace modal_settings { event_registry.fire("select-identity-type", {profile_id: "default", identity_type: undefined}); } } - -function settings_identity_forum(container: JQuery, modal: Modal, update_profiles: () => any) { - const containers_connected = container.find(".show-connected"); - const containers_disconnected = container.find(".show-disconnected"); - - const update_state = () => { - const logged_in = forum.logged_in(); - containers_connected.toggle(logged_in); - containers_disconnected.toggle(!logged_in); - - if (logged_in) { - container.find(".forum-username").text(forum.data().name()); - container.find(".forum-premium").text(forum.data().is_premium() ? tr("Yes") : tr("No")); - } - }; - - /* login */ - { - const button_login = container.find(".button-login"); - const input_username = container.find(".input-username"); - const input_password = container.find(".input-password"); - const container_error = container.find(".container-login .container-error"); - - const container_captcha_g = container.find(".g-recaptcha"); - let captcha: boolean | string = false; - - const update_button_state = () => { - let enabled = true; - enabled = enabled && !!input_password.val(); - enabled = enabled && !!input_username.val(); - enabled = enabled && (typeof (captcha) === "boolean" ? !captcha : !!captcha); - button_login.prop("disabled", !enabled); - }; - - /* username */ - input_username.on('change keyup', update_button_state); - - /* password */ - input_password.on('change keyup', update_button_state); - - button_login.on('click', event => { - input_username.prop("disabled", true); - input_password.prop("disabled", true); - button_login.prop("disabled", true); - container_error.removeClass("shown"); - - forum.login(input_username.val() as string, input_password.val() as string, typeof (captcha) === "string" ? captcha : undefined).then(state => { - captcha = false; - - logTrace(LogCategory.GENERAL, tr("Forum login result: %o"), state); - if (state.status === "success") { - update_state(); - update_profiles(); - return; - } - - setTimeout(() => { - if (!!state.error_message) /* clear password if we have an error */ - input_password.val(""); - input_password.focus(); - update_button_state(); - }, 0); - if (state.status === "captcha") { - //TODO Works currently only with localhost! - button_login.hide(); - container_error.text(state.error_message || tr("Captcha required")).addClass("shown"); - - captcha = ""; - - logDebug(LogCategory.GENERAL, tr("Showing captcha for site-key: %o"), state.captcha.data); - forum.gcaptcha.spawn(container_captcha_g, state.captcha.data, token => { - captcha = token; - logTrace(LogCategory.GENERAL, tr("Got captcha token: %o"), token); - container_captcha_g.hide(); - button_login.show(); - update_button_state(); - }).catch(error => { - logError(LogCategory.GENERAL, tr("Failed to initialize forum captcha: %o"), error); - container_error.text("Failed to initialize GReCaptcha! No authentication possible.").addClass("shown"); - container_captcha_g.hide(); - button_login.hide(); - }); - container_captcha_g.show(); - } else { - container_error.text(state.error_message || tr("Unknown error")).addClass("shown"); - } - }).catch(error => { - logError(LogCategory.GENERAL, tr("Failed to login within the forum. Error: %o"), error); - createErrorModal(tr("Forum login failed."), tr("Forum login failed. Lookup the console for more information")).open(); - }).then(() => { - input_username.prop("disabled", false); - input_password.prop("disabled", false); - update_button_state(); - }); - }); - update_button_state(); - } - - /* logout */ - { - container.find(".button-logout").on('click', event => { - forum.logout().catch(error => { - logError(LogCategory.IDENTITIES, tr("Failed to logout from forum: %o"), error); - createErrorModal(tr("Forum logout failed"), formatMessage(tr("Failed to logout from forum account.{:br:}Error: {}"), error)).open(); - }).then(() => { - if (modal.shown) - update_state(); - update_profiles(); - }); - }); - } - - update_state(); -} \ No newline at end of file