ソースを参照

Merge pull request #980 from threema-ch/invalid-contacts

Proper handling of invalid contacts
Danilo Bargen 5 年 前
コミット
9749fc1382

+ 6 - 2
public/i18n/cs.json

@@ -207,7 +207,10 @@
         "PINNED_CONVERSATION_ERROR": "Konverzace nemůže být připnuta",
         "UNPINNED_CONVERSATION_OK": "Konverzace odepnuta",
         "UNPINNED_CONVERSATION_ERROR": "Konverzace nemůže být odepnuta",
-        "ME": "Já"
+        "ME": "Já",
+        "CONTACT_STATE_INACTIVE": "Neaktivní",
+        "CONTACT_STATE_INVALID": "Chybný",
+        "CONTACT_STATE_REVOKED": "Odvolaná"
     },
     "messageStates": {
         "WE_ACK": "Poslali jste \"palec nahoru\"",
@@ -257,7 +260,8 @@
         "MESSAGE_NOT_SUPPORTED": "«{receiverName}» nemůže tuto zprávu přijmout.",
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» nemůže tuto hlasovou zprávu přijmout.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» nemůže přijmout soubory.",
-        "CONTACT_BLOCKED":  "Nelze odesílat zprávy blokovanému kontaktu.",
+        "CONTACT_BLOCKED": "Nelze odesílat zprávy blokovanému kontaktu.",
+        "CONTACT_INVALID": "Nelze odeslat zprávu neplatnému kontaktu.",
         "ERROR_OCCURRED": "Došlo k chybě.",
         "FILE_TOO_LARGE": "Soubory větší než {maxmb} MiB nelze odeslat",
         "FILE_TOO_LARGE_WEB": "Aktuálně nelze prostřednictvím Threema Web odeslat soubory větší než 15 MiB",

+ 5 - 1
public/i18n/de.json

@@ -207,7 +207,10 @@
         "PINNED_CONVERSATION_ERROR": "Unterhaltung konnte nicht angepinnt werden",
         "UNPINNED_CONVERSATION_OK": "Unterhaltung entpinnt",
         "UNPINNED_CONVERSATION_ERROR": "Unterhaltung konnte nicht entpinnt werden",
-        "ME": "Ich"
+        "ME": "Ich",
+        "CONTACT_STATE_INACTIVE": "Inaktiv",
+        "CONTACT_STATE_INVALID": "Ungültig",
+        "CONTACT_STATE_REVOKED": "Widerrufen"
     },
     "messageStates": {
         "WE_ACK": "Sie haben ein Daumen-Hoch gesendet",
@@ -258,6 +261,7 @@
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» kann noch keine Sprachnachrichten erhalten.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» kann noch keine Dateien erhalten.",
         "CONTACT_BLOCKED":  "Sie können keine Nachrichten an blockierte Kontakte senden.",
+        "CONTACT_INVALID": "Sie können keine Nachrichten an einen ungültigen Kontakt senden.",
         "ERROR_OCCURRED": "Es ist ein Fehler aufgetreten.",
         "FILE_TOO_LARGE": "Dateien grösser als {maxmb} MiB können nicht versendet werden",
         "FILE_TOO_LARGE_WEB": "Aktuell können keine Dateien grösser als 15 MiB über Threema Web versendet werden",

+ 6 - 2
public/i18n/en.json

@@ -207,7 +207,10 @@
         "PINNED_CONVERSATION_ERROR": "Conversation could not be pinned",
         "UNPINNED_CONVERSATION_OK": "Conversation unpinned",
         "UNPINNED_CONVERSATION_ERROR": "Conversation could not be unpinned",
-        "ME": "Me"
+        "ME": "Me",
+        "CONTACT_STATE_INACTIVE": "Inactive",
+        "CONTACT_STATE_INVALID": "Invalid",
+        "CONTACT_STATE_REVOKED": "Revoked"
     },
     "messageStates": {
         "WE_ACK": "You sent thumbs-up",
@@ -258,7 +261,8 @@
         "MESSAGE_NOT_SUPPORTED": "«{receiverName}» cannot receive this message.",
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» cannot receive voice messages.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» cannot receive files.",
-        "CONTACT_BLOCKED":  "You cannot send messages to a blocked contact.",
+        "CONTACT_BLOCKED": "You cannot send messages to a blocked contact.",
+        "CONTACT_INVALID": "You cannot send messages to an invalid contact.",
         "ERROR_OCCURRED": "An error occurred.",
         "FILE_TOO_LARGE": "Files larger than {maxmb} MiB cannot be sent",
         "FILE_TOO_LARGE_WEB": "Currently files larger than 15 MiB cannot be sent through Threema Web",

+ 5 - 1
public/i18n/es.json

@@ -207,7 +207,10 @@
         "PINNED_CONVERSATION_ERROR": "La conversación no se pudo anclar",
         "UNPINNED_CONVERSATION_OK": "Conversación desanclada",
         "UNPINNED_CONVERSATION_ERROR": "La conversación no se pudo desanclar",
-        "ME": "Yo"
+        "ME": "Yo",
+        "CONTACT_STATE_INACTIVE": "Inactivo",
+        "CONTACT_STATE_INVALID": "No válido",
+        "CONTACT_STATE_REVOKED": "Borrado"
     },
     "messageStates": {
         "WE_ACK": "Enviaste un pulgar hacia arriba",
@@ -258,6 +261,7 @@
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» no puede recibir mensajes de voz.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» no puede recibir ficheros.",
         "CONTACT_BLOCKED":  "No puede enviar mensajes a un contacto bloqueado.",
+        "CONTACT_INVALID": "No puede enviar mensajes a un contacto no válido.",
         "ERROR_OCCURRED": "Ha ocurrido un error.",
         "FILE_TOO_LARGE": "No se pueden enviar archivos de más de {maxmb} MiB",
         "FILE_TOO_LARGE_WEB": "Actualmente no se pueden enviar archivos de más de 15 MiB a través de Threema Web",

+ 5 - 1
public/i18n/fr.json

@@ -207,7 +207,10 @@
         "PINNED_CONVERSATION_ERROR": "Les conversations n'ont pas pu être épinglées",
         "UNPINNED_CONVERSATION_OK": "Les conversations non épinglées",
         "UNPINNED_CONVERSATION_ERROR": "La conversation n'a pas pu être désépinglé",
-        "ME": "Moi"
+        "ME": "Moi",
+        "CONTACT_STATE_INACTIVE": "Inactif",
+        "CONTACT_STATE_INVALID": "Erroné",
+        "CONTACT_STATE_REVOKED": "Supprimé"
     },
     "messageStates": {
         "WE_ACK": "Vous avez envoyé un pouce levé",
@@ -258,6 +261,7 @@
         "AUDIO_MESSAGES_NOT_SUPPORTED": "« {receiverName} » ne peut pas recevoir des messages audio.",
         "FILE_MESSAGES_NOT_SUPPORTED": "« {receiverName} » ne peut pas recevoir de fichiers.",
         "CONTACT_BLOCKED":  "Vous ne pouvez pas envoyer des messages à un contact bloqué.",
+        "CONTACT_INVALID": "Vous ne pouvez pas envoyer de message à un contact erroné.",
         "ERROR_OCCURRED": "Une erreur est apparue.",
         "FILE_TOO_LARGE": "Les fichiers plus grands que {maxmb} MiB ne peuvent pas être envoyés",
         "FILE_TOO_LARGE_WEB": "Actuellement les fichiers plus grands que 15 MiB ne peuvent pas être envoyés avec Threema Web",

+ 5 - 1
public/i18n/nl.json

@@ -206,7 +206,10 @@
         "PINNED_CONVERSATION_ERROR": "Conversatie kon niet worden vastgepind",
         "UNPINNED_CONVERSATION_OK": "Conversatie losgemaakt",
         "UNPINNED_CONVERSATION_ERROR": "Conversatie kon niet worden losgemaakt",
-        "ME": "Me"
+        "ME": "Me",
+        "CONTACT_STATE_INACTIVE": "Inactief",
+        "CONTACT_STATE_INVALID": "Ongeldig",
+        "CONTACT_STATE_REVOKED": "Verwijderde"
     },
     "messageStates": {
         "WE_ACK": "Je hebt een duim omhoog gestuurd",
@@ -256,6 +259,7 @@
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» kan geen spraakberichten ontvangen.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» kan geen bestanden ontvangen.",
         "CONTACT_BLOCKED":  "Je kan geen berichten sturen aan een geblokkeerde contactpersoon.",
+        "CONTACT_INVALID": "U kunt geen berichten versturen aan ongeldige contactpersonen.",
         "ERROR_OCCURRED": "Een fout is opgetreden.",
         "FILE_TOO_LARGE": "Bestanden groter dan {maxmb} MiB kunnen niet worden verstuurd",
         "FILE_TOO_LARGE_WEB": "Momenteel kunnen bestanden groter dan 15 MiB niet worden verstuurd met Threema Web",

+ 4 - 1
public/i18n/pl.json

@@ -207,7 +207,9 @@
         "PINNED_CONVERSATION_ERROR": "Konwersacja nie mogła zostać przypięta",
         "UNPINNED_CONVERSATION_OK": "Konwersacja odpięta",
         "UNPINNED_CONVERSATION_ERROR": "Konwersacja nie mogła zostać odpięta",
-        "ME": "Ja"
+        "ME": "Ja",
+        "CONTACT_STATE_INACTIVE": "Nieaktywny",
+        "CONTACT_STATE_INVALID": "Nieprawidłowy"
     },
     "messageStates": {
         "WE_ACK": "Wysłałeś kciuk w górę",
@@ -259,6 +261,7 @@
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» nie może otrzymywać wiadomości głosowych.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» nie może otrzymywać plików.",
         "CONTACT_BLOCKED":  "Nie możesz wysyłać wiadomości do zablokowanego kontaktu.",
+        "CONTACT_INVALID": "Nie możesz wysyłać wiadomości do nieprawidłowego kontaktu.",
         "ERROR_OCCURRED": "Wystąpił błąd.",
         "FILE_TOO_LARGE": "Pliki większe niż {maxmb} MiB nie mogą być wysłyane",
         "FILE_TOO_LARGE_WEB": "Obecnie pliki większe niż 15 MiB nie mogą być wysyłane przez Threema Web",

+ 4 - 1
public/i18n/pt.json

@@ -192,7 +192,9 @@
         "PINNED_CONVERSATION_ERROR": "Conversation could not be pinned",
         "UNPINNED_CONVERSATION_OK": "Conversation unpinned",
         "UNPINNED_CONVERSATION_ERROR": "Conversation could not be unpinned",
-        "ME": "Eu"
+        "ME": "Eu",
+        "CONTACT_STATE_INACTIVE": "Inativa",
+        "CONTACT_STATE_INVALID": "Inválida"
     },
     "messageStates": {
         "WE_ACK": "You sent thumbs-up",
@@ -243,6 +245,7 @@
         "AUDIO_MESSAGES_NOT_SUPPORTED": "«{receiverName}» não pode receber mensagens de voz.",
         "FILE_MESSAGES_NOT_SUPPORTED": "«{receiverName}» não pode receber arquivos.",
         "CONTACT_BLOCKED":  "Você não pode enviar mensagens para um contato bloqueado.",
+        "CONTACT_INVALID": "Você não pode enviar mensagens a um contato inválido.",
         "ERROR_OCCURRED": "Um erro ocorreu.",
         "FILE_TOO_LARGE": "Arquivos maiores que {maxmb} MiB não podem ser enviados",
         "FILE_TOO_LARGE_WEB": "Actualmente, arquivos maiores que 15 MiB não podem ser enviados através do site da Threema Web.",

+ 3 - 1
src/partials/messenger.receiver/contact.html

@@ -10,7 +10,9 @@
 				<dt>Threema ID</dt>
 				<dd>
 					<span class="complex-values">
-						<span>{{ctrl.receiver.id}}</span>
+						<span>{{ ctrl.receiver.id }}</span>
+                        <span ng-if="ctrl.receiver.state == 'INVALID'">({{ 'messenger.CONTACT_STATE_INVALID' | translate }}/{{ 'messenger.CONTACT_STATE_REVOKED' | translate }})</span>
+                        <span ng-if="ctrl.receiver.state == 'INACTIVE'">({{ 'messenger.CONTACT_STATE_INACTIVE' | translate }})</span>
 						<span class="indicator-icon" ng-if="ctrl.showBlocked()"
 							  translate-attr="{'aria-label': 'messenger.THREEMA_BLOCKED_RECEIVER'}">
 								(<span translate>messenger.THREEMA_BLOCKED_RECEIVER</span>)

+ 10 - 3
src/services/webclient.ts

@@ -1759,9 +1759,16 @@ export class WebClientService {
         // Try to load receiver
         const receiver = this.receivers.getData(baseReceiver);
 
-        // Check blocked flag
-        if (isContactReceiver(receiver) && receiver.isBlocked) {
-            throw this.$translate.instant('error.CONTACT_BLOCKED');
+        if (isContactReceiver(receiver)) {
+            // Check blocked flag
+            if (receiver.isBlocked) {
+                throw this.$translate.instant('error.CONTACT_BLOCKED');
+            }
+
+            // Check identity state
+            if (receiver.state === 'INVALID') {
+                throw this.$translate.instant('error.CONTACT_INVALID');
+            }
         }
 
         // Decide on subtype

+ 1 - 1
src/threema.d.ts

@@ -275,7 +275,7 @@ declare namespace threema {
         featureMask: number;
 
         // The identity state
-        state: 'ACTIVE' | 'INACTIVE';
+        state: 'ACTIVE' | 'INACTIVE' | 'INVALID';
 
         // Contact hidden?
         hidden: boolean;