feat(chat): disallow links in messages
Local-first chat between people whose web of trust is still forming is a natural phishing/scam vector, so messages may not contain URLs. A conservative `containsUrl` rule (explicit scheme, www., or a common-TLD domain — but not "3.5kg" or "12.30") gates it: the composer warns and keeps the text for editing, and MessagesCubit.send drops any URL as a backstop. Incoming text was already non-tappable (plain selectable text).
This commit is contained in:
parent
6a6a81e8a2
commit
1ab243f29e
14 changed files with 107 additions and 34 deletions
|
|
@ -530,7 +530,8 @@
|
|||
"g1Copied": "Direición Ğ1 copiada — apégala na to cartera",
|
||||
"today": "Güei",
|
||||
"yesterday": "Ayeri",
|
||||
"sendError": "Nun se pudo unviar — comprueba la conexón"
|
||||
"sendError": "Nun se pudo unviar — comprueba la conexón",
|
||||
"noLinks": "Nun se permiten enllaces nos mensaxes"
|
||||
},
|
||||
"trust": {
|
||||
"none": "Naide los avala entá",
|
||||
|
|
|
|||
|
|
@ -533,7 +533,8 @@
|
|||
"g1Copied": "Ğ1 address copied — paste it in your wallet",
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday",
|
||||
"sendError": "Couldn't send — check your connection"
|
||||
"sendError": "Couldn't send — check your connection",
|
||||
"noLinks": "Links aren't allowed in messages"
|
||||
},
|
||||
"trust": {
|
||||
"none": "No one vouches for them yet",
|
||||
|
|
|
|||
|
|
@ -532,7 +532,8 @@
|
|||
"g1Copied": "Dirección Ğ1 copiada — pégala en tu cartera",
|
||||
"today": "Hoy",
|
||||
"yesterday": "Ayer",
|
||||
"sendError": "No se pudo enviar — revisa tu conexión"
|
||||
"sendError": "No se pudo enviar — revisa tu conexión",
|
||||
"noLinks": "No se permiten enlaces en los mensajes"
|
||||
},
|
||||
"trust": {
|
||||
"none": "Nadie los avala aún",
|
||||
|
|
|
|||
|
|
@ -529,7 +529,8 @@
|
|||
"g1Copied": "Endereço Ğ1 copiado — cola-o na tua carteira",
|
||||
"today": "Hoje",
|
||||
"yesterday": "Ontem",
|
||||
"sendError": "Não foi possível enviar — verifica a tua ligação"
|
||||
"sendError": "Não foi possível enviar — verifica a tua ligação",
|
||||
"noLinks": "Não são permitidos links nas mensagens"
|
||||
},
|
||||
"trust": {
|
||||
"none": "Ainda ninguém os avaliza",
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 4
|
||||
/// Strings: 1860 (465 per locale)
|
||||
/// Strings: 1864 (466 per locale)
|
||||
///
|
||||
/// Built on 2026-07-11 at 04:45 UTC
|
||||
/// Built on 2026-07-11 at 05:13 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
|
|
|||
|
|
@ -772,6 +772,7 @@ class _Translations$chat$ast extends Translations$chat$en {
|
|||
@override String get today => 'Güei';
|
||||
@override String get yesterday => 'Ayeri';
|
||||
@override String get sendError => 'Nun se pudo unviar — comprueba la conexón';
|
||||
@override String get noLinks => 'Nun se permiten enllaces nos mensaxes';
|
||||
}
|
||||
|
||||
// Path: trust
|
||||
|
|
@ -1624,6 +1625,7 @@ extension on TranslationsAst {
|
|||
'chat.today' => 'Güei',
|
||||
'chat.yesterday' => 'Ayeri',
|
||||
'chat.sendError' => 'Nun se pudo unviar — comprueba la conexón',
|
||||
'chat.noLinks' => 'Nun se permiten enllaces nos mensaxes',
|
||||
'trust.none' => 'Naide los avala entá',
|
||||
'trust.count' => ({required Object n}) => 'Avalada por ${n}',
|
||||
'trust.vouch' => 'Conozo a esta persona',
|
||||
|
|
|
|||
|
|
@ -1443,6 +1443,9 @@ class Translations$chat$en {
|
|||
|
||||
/// en: 'Couldn't send — check your connection'
|
||||
String get sendError => 'Couldn\'t send — check your connection';
|
||||
|
||||
/// en: 'Links aren't allowed in messages'
|
||||
String get noLinks => 'Links aren\'t allowed in messages';
|
||||
}
|
||||
|
||||
// Path: trust
|
||||
|
|
@ -2544,6 +2547,7 @@ extension on Translations {
|
|||
'chat.today' => 'Today',
|
||||
'chat.yesterday' => 'Yesterday',
|
||||
'chat.sendError' => 'Couldn\'t send — check your connection',
|
||||
'chat.noLinks' => 'Links aren\'t allowed in messages',
|
||||
'trust.none' => 'No one vouches for them yet',
|
||||
'trust.count' => ({required Object n}) => 'Vouched for by ${n}',
|
||||
'trust.vouch' => 'I know this person',
|
||||
|
|
|
|||
|
|
@ -774,6 +774,7 @@ class _Translations$chat$es extends Translations$chat$en {
|
|||
@override String get today => 'Hoy';
|
||||
@override String get yesterday => 'Ayer';
|
||||
@override String get sendError => 'No se pudo enviar — revisa tu conexión';
|
||||
@override String get noLinks => 'No se permiten enlaces en los mensajes';
|
||||
}
|
||||
|
||||
// Path: trust
|
||||
|
|
@ -1628,6 +1629,7 @@ extension on TranslationsEs {
|
|||
'chat.today' => 'Hoy',
|
||||
'chat.yesterday' => 'Ayer',
|
||||
'chat.sendError' => 'No se pudo enviar — revisa tu conexión',
|
||||
'chat.noLinks' => 'No se permiten enlaces en los mensajes',
|
||||
'trust.none' => 'Nadie los avala aún',
|
||||
'trust.count' => ({required Object n}) => 'Avalada por ${n}',
|
||||
'trust.vouch' => 'Conozco a esta persona',
|
||||
|
|
|
|||
|
|
@ -771,6 +771,7 @@ class _Translations$chat$pt extends Translations$chat$en {
|
|||
@override String get today => 'Hoje';
|
||||
@override String get yesterday => 'Ontem';
|
||||
@override String get sendError => 'Não foi possível enviar — verifica a tua ligação';
|
||||
@override String get noLinks => 'Não são permitidos links nas mensagens';
|
||||
}
|
||||
|
||||
// Path: trust
|
||||
|
|
@ -1622,6 +1623,7 @@ extension on TranslationsPt {
|
|||
'chat.today' => 'Hoje',
|
||||
'chat.yesterday' => 'Ontem',
|
||||
'chat.sendError' => 'Não foi possível enviar — verifica a tua ligação',
|
||||
'chat.noLinks' => 'Não são permitidos links nas mensagens',
|
||||
'trust.none' => 'Ainda ninguém os avaliza',
|
||||
'trust.count' => ({required Object n}) => 'Avalizada por ${n}',
|
||||
'trust.vouch' => 'Conheço esta pessoa',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue