fix(board): warn on unverified addresses

This commit is contained in:
Tommaso Casaburi
2026-05-21 17:33:14 +07:00
parent 75d90c8264
commit a31c3b44d3
38 changed files with 154 additions and 36 deletions
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "فشلت الصورة الخارجية. جرّب VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "تجاهل"
"modQueue.dismiss": "تجاهل",
"board_address_unverified_warning": "لم يتم التحقق من عنوان هذه اللوحة. قد لا يكون مالك اللوحة مالكًا لهذا العنوان."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "বাইরের ছবি লোড হয়নি। VPN চেষ্টা করুন।",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "উপেক্ষা করুন"
"modQueue.dismiss": "উপেক্ষা করুন",
"board_address_unverified_warning": "এই বোর্ড ঠিকানাটি যাচাই করা হয়নি। বোর্ডের মালিক এই ঠিকানার মালিক নাও হতে পারেন।"
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Externí obrázek selhal. Zkuste VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignorovat"
"modQueue.dismiss": "Ignorovat",
"board_address_unverified_warning": "Tato adresa nástěnky není ověřená. Vlastník nástěnky nemusí tuto adresu vlastnit."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Eksternt billede fejlede. Prøv VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignorer"
"modQueue.dismiss": "Ignorer",
"board_address_unverified_warning": "Denne boardadresse er ikke verificeret. Boardets ejer ejer muligvis ikke denne adresse."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Externes Bild fehlgeschlagen. VPN versuchen.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignorieren"
"modQueue.dismiss": "Ignorieren",
"board_address_unverified_warning": "Diese Board-Adresse ist nicht verifiziert. Der Board-Betreiber besitzt diese Adresse möglicherweise nicht."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Η εξωτερική εικόνα απέτυχε. Δοκιμάστε VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Παράβλεψη"
"modQueue.dismiss": "Παράβλεψη",
"board_address_unverified_warning": "Αυτή η διεύθυνση board δεν έχει επαληθευτεί. Ο ιδιοκτήτης του board ενδέχεται να μην κατέχει αυτή τη διεύθυνση."
}
+2 -1
View File
@@ -407,5 +407,6 @@
"media_failed_to_load_inline": "External image from {{host}} failed. Try VPN.",
"media_failed_to_load_inline_unknown": "External image failed. Try VPN.",
"directory_status_unavailable_reason": "check only available for top 5 boards",
"modQueue.dismiss": "Dismiss"
"modQueue.dismiss": "Dismiss",
"board_address_unverified_warning": "This board address is not verified. The board owner might not own this address."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Falló la imagen externa. Prueba una VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Descartar"
"modQueue.dismiss": "Descartar",
"board_address_unverified_warning": "Esta dirección del tablón no está verificada. Es posible que el propietario del tablón no sea dueño de esta dirección."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "تصویر خارجی بارگیری نشد. VPN را امتحان کنید.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "نادیده گرفتن"
"modQueue.dismiss": "نادیده گرفتن",
"board_address_unverified_warning": "این نشانی برد تأیید نشده است. ممکن است مالک برد صاحب این نشانی نباشد."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Ulkoinen kuva epäonnistui. Kokeile VPN:ää.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ohita"
"modQueue.dismiss": "Ohita",
"board_address_unverified_warning": "Tätä laudan osoitetta ei ole vahvistettu. Laudan omistaja ei välttämättä omista tätä osoitetta."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Nabigo ang panlabas na larawan. Subukan ang VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Huwag pansinin"
"modQueue.dismiss": "Huwag pansinin",
"board_address_unverified_warning": "Hindi beripikado ang address ng board na ito. Maaaring hindi pag-aari ng may-ari ng board ang address na ito."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "L'image externe a échoué. Essayez un VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignorer"
"modQueue.dismiss": "Ignorer",
"board_address_unverified_warning": "Cette adresse de board n'est pas vérifiée. Le propriétaire du board pourrait ne pas posséder cette adresse."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "התמונה החיצונית נכשלה. נסה VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "התעלם"
"modQueue.dismiss": "התעלם",
"board_address_unverified_warning": "כתובת הלוח הזו אינה מאומתת. ייתכן שבעל הלוח אינו הבעלים של הכתובת הזו."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "बाहरी छवि लोड नहीं हुई। VPN आज़माएँ।",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "अनदेखा करें"
"modQueue.dismiss": "अनदेखा करें",
"board_address_unverified_warning": "इस बोर्ड पते की पुष्टि नहीं हुई है। हो सकता है बोर्ड का मालिक इस पते का मालिक न हो।"
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "A külső kép nem töltődött be. Próbálj VPN-t.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Mellőzés"
"modQueue.dismiss": "Mellőzés",
"board_address_unverified_warning": "Ez a board-cím nincs ellenőrizve. Lehet, hogy a board tulajdonosa nem birtokolja ezt a címet."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Gambar eksternal gagal. Coba VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Abaikan"
"modQueue.dismiss": "Abaikan",
"board_address_unverified_warning": "Alamat board ini belum diverifikasi. Pemilik board mungkin tidak memiliki alamat ini."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Immagine esterna non caricata. Prova una VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignora"
"modQueue.dismiss": "Ignora",
"board_address_unverified_warning": "Questo indirizzo della board non è verificato. Il proprietario della board potrebbe non possedere questo indirizzo."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "外部画像を読み込めませんでした。VPN を試してください。",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "無視"
"modQueue.dismiss": "無視",
"board_address_unverified_warning": "このボードアドレスは検証されていません。ボード所有者がこのアドレスを所有していない可能性があります。"
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "외부 이미지를 불러오지 못했습니다. VPN을 시도하세요.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "무시"
"modQueue.dismiss": "무시",
"board_address_unverified_warning": "이 보드 주소는 확인되지 않았습니다. 보드 소유자가 이 주소를 소유하지 않았을 수 있습니다."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "बाह्य प्रतिमा लोड झाली नाही. VPN वापरून पाहा.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "दुर्लक्ष करा"
"modQueue.dismiss": "दुर्लक्ष करा",
"board_address_unverified_warning": "हा बोर्ड पत्ता सत्यापित केलेला नाही. बोर्डचा मालक हा पत्ता मालक नसू शकतो."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Externe afbeelding mislukt. Probeer VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Negeren"
"modQueue.dismiss": "Negeren",
"board_address_unverified_warning": "Dit boardadres is niet geverifieerd. De eigenaar van het board is mogelijk niet de eigenaar van dit adres."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Eksternt bilde kunne ikke lastes. Prøv VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignorer"
"modQueue.dismiss": "Ignorer",
"board_address_unverified_warning": "Denne board-adressen er ikke bekreftet. Board-eieren eier kanskje ikke denne adressen."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Obraz zewnętrzny nie załadował się. Spróbuj VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Pomiń"
"modQueue.dismiss": "Pomiń",
"board_address_unverified_warning": "Ten adres boarda nie jest zweryfikowany. Właściciel boarda może nie być właścicielem tego adresu."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Falha na imagem externa. Tente uma VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignorar"
"modQueue.dismiss": "Ignorar",
"board_address_unverified_warning": "Este endereço do board não foi verificado. O proprietário do board pode não ser dono deste endereço."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Imaginea externă a eșuat. Încearcă VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Ignoră"
"modQueue.dismiss": "Ignoră",
"board_address_unverified_warning": "Această adresă de board nu este verificată. Proprietarul boardului s-ar putea să nu dețină această adresă."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Внешнее изображение не загрузилось. Попробуйте VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Скрыть"
"modQueue.dismiss": "Скрыть",
"board_address_unverified_warning": "Этот адрес доски не проверен. Владелец доски может не владеть этим адресом."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Imazhi i jashtëm dështoi. Provoni VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Shpërfill"
"modQueue.dismiss": "Shpërfill",
"board_address_unverified_warning": "Kjo adresë e board-it nuk është verifikuar. Pronari i board-it mund të mos e zotërojë këtë adresë."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Extern bild kunde inte läsas in. Prova VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Avfärda"
"modQueue.dismiss": "Avfärda",
"board_address_unverified_warning": "Den här board-adressen är inte verifierad. Boardets ägare kanske inte äger den här adressen."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "బాహ్య చిత్రం లోడ్ కాలేదు. VPN ప్రయత్నించండి.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "విస్మరించు"
"modQueue.dismiss": "విస్మరించు",
"board_address_unverified_warning": "ఈ బోర్డ్ చిరునామా ధృవీకరించబడలేదు. బోర్డ్ యజమాని ఈ చిరునామాకు యజమాని కాకపోవచ్చు."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "โหลดรูปภาพภายนอกไม่สำเร็จ ลอง VPN",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "มองข้าม"
"modQueue.dismiss": "มองข้าม",
"board_address_unverified_warning": "ที่อยู่บอร์ดนี้ยังไม่ได้รับการยืนยัน เจ้าของบอร์ดอาจไม่ได้เป็นเจ้าของที่อยู่นี้"
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Harici görsel yüklenemedi. VPN deneyin.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Yoksay"
"modQueue.dismiss": "Yoksay",
"board_address_unverified_warning": "Bu board adresi doğrulanmamış. Board sahibi bu adresin sahibi olmayabilir."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Зовнішнє зображення не завантажилося. Спробуйте VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Приховати"
"modQueue.dismiss": "Приховати",
"board_address_unverified_warning": "Цю адресу дошки не перевірено. Власник дошки може не володіти цією адресою."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "بیرونی تصویر لوڈ نہیں ہوئی۔ VPN آزمائیں۔",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "نظر انداز کریں"
"modQueue.dismiss": "نظر انداز کریں",
"board_address_unverified_warning": "اس بورڈ کے پتے کی تصدیق نہیں ہوئی۔ ممکن ہے بورڈ کا مالک اس پتے کا مالک نہ ہو۔"
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "Không tải được ảnh bên ngoài. Thử VPN.",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "Bỏ qua"
"modQueue.dismiss": "Bỏ qua",
"board_address_unverified_warning": "Địa chỉ bảng này chưa được xác minh. Chủ bảng có thể không sở hữu địa chỉ này."
}
+2 -1
View File
@@ -388,5 +388,6 @@
"media_failed_to_load_inline_unknown": "外部图片加载失败。试试 VPN。",
"expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.",
"nothing_found": "Nothing Found",
"modQueue.dismiss": "忽略"
"modQueue.dismiss": "忽略",
"board_address_unverified_warning": "此版面地址尚未验证。版主可能并不拥有此地址。"
}
+67 -1
View File
@@ -20,6 +20,14 @@ type TestComment = {
timestamp?: number;
};
type TestCommunity = {
error?: Error;
nameResolved?: boolean;
shortAddress?: string;
state?: string;
title?: string;
};
const testState = vi.hoisted(() => ({
account: { subscriptions: [] as string[] },
accountComments: [] as TestComment[],
@@ -60,7 +68,7 @@ const testState = vi.hoisted(() => ({
shortAddress: 'music-posting.eth',
state: 'ready',
title: '/mu/ - Music',
},
} as TestCommunity,
communitySnapshot: {
shortAddress: 'music-posting.eth',
title: '/mu/ - Music',
@@ -404,6 +412,64 @@ describe('Board', () => {
]);
});
it('warns when a loaded board address is not verified', async () => {
testState.directories = [{ address: 'business-and-finance.bso', directoryCode: 'biz', title: '/biz/ - Business & Finance' }];
testState.directoryByAddress = {
'business-and-finance.bso': {
address: 'business-and-finance.bso',
features: { postsPerPage: 2 },
},
};
testState.resolvedCommunityAddress = 'business-and-finance.bso';
testState.community = {
nameResolved: false,
shortAddress: 'business-and-finance.bso',
state: 'ready',
title: '/biz/ - Business & Finance',
};
testState.communitySnapshot = {
shortAddress: 'business-and-finance.bso',
title: '/biz/ - Business & Finance',
};
await renderBoard({
boardProps: { boardIdentifier: 'business-and-finance.bso', viewType: 'board' },
initialEntry: '/business-and-finance.bso',
routePath: '/:boardIdentifier/*',
});
expect(container.textContent).toContain('board_address_unverified_warning');
});
it('does not warn when a loaded board address is verified', async () => {
testState.directories = [{ address: 'business-and-finance.bso', directoryCode: 'biz', title: '/biz/ - Business & Finance' }];
testState.directoryByAddress = {
'business-and-finance.bso': {
address: 'business-and-finance.bso',
features: { postsPerPage: 2 },
},
};
testState.resolvedCommunityAddress = 'business-and-finance.bso';
testState.community = {
nameResolved: true,
shortAddress: 'business-and-finance.bso',
state: 'ready',
title: '/biz/ - Business & Finance',
};
testState.communitySnapshot = {
shortAddress: 'business-and-finance.bso',
title: '/biz/ - Business & Finance',
};
await renderBoard({
boardProps: { boardIdentifier: 'business-and-finance.bso', viewType: 'board' },
initialEntry: '/business-and-finance.bso',
routePath: '/:boardIdentifier/*',
});
expect(container.textContent).not.toContain('board_address_unverified_warning');
});
it('renders the current page feed, inserts recent account comments, and wires footer actions', async () => {
const currentTimestamp = Math.floor(Date.now() / 1000);
testState.feed = [
+5
View File
@@ -7,6 +7,11 @@
padding: 15px 0 0 5px;
}
.addressWarning {
color: var(--mod-queue-alert-color, red);
padding: 15px 5px 0 5px;
}
.footer {
color: var(--post-mobile-abbr-text-color);
padding: 15px 0 20px 5px;
+12
View File
@@ -594,6 +594,13 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, t
}, [title, shortAddress, communityAddress, isVisible, params.boardIdentifier, boardIdentifierProp, directories, isInAllView, isInSubscriptionsView, isInModView, t]);
const shouldShowErrorToUser = communityError?.message && feed.length === 0;
const shouldShowUnverifiedAddressWarning =
!isMultiboardView &&
typeof communityIdentifier?.name === 'string' &&
communityIdentifier.name.includes('.') &&
typeof communityIdentifier.publicKey === 'string' &&
communityIdentifier.publicKey.length > 0 &&
communityData?.nameResolved === false;
const displayFeed = effectiveInfiniteScroll ? combinedFeed : currentPageFeed;
return (
@@ -605,6 +612,11 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, t
<ErrorDisplay error={communityError} />
</div>
)}
{shouldShowUnverifiedAddressWarning && (
<div className={styles.addressWarning} role='status'>
{t('board_address_unverified_warning')}
</div>
)}
{effectiveInfiniteScroll ? (
<Virtuoso
defaultItemHeight={defaultBoardItemHeight}