Skip to content

Commit 08859c8

Browse files
committed
Merge branch 'preview'
2 parents 80aea31 + c3a0823 commit 08859c8

31 files changed

Lines changed: 689 additions & 95 deletions

File tree

app/error.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<script setup lang="ts">
2+
import type { NuxtError } from '#app'
23
import errorImage from './assets/images/404.svg?raw'
4+
5+
defineProps<{
6+
error: NuxtError
7+
}>()
38
</script>
49

510
<template>

docs/api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ Content-Type: application/json
9292
| `ogImage` | `string` || OpenGraph image URL |
9393
| `cloaking` | `boolean` || Enable link cloaking (mask destination URL with short link) |
9494
| `redirectWithQuery` | `boolean` || Append query parameters to destination URL (overrides global setting) |
95+
| `password` | `string` || Password protection for the link |
96+
| `unsafe` | `boolean` || Mark link as unsafe (shows warning page before redirect) |
9597

9698
## CORS
9799

docs/configuration.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,17 @@ This feature requires:
8585

8686
Backups are stored in R2 with the path `backups/links-{timestamp}.json` and run daily at 00:00 UTC.
8787

88+
## `NUXT_SAFE_BROWSING_DOH`
89+
90+
Set to a DNS over HTTPS (DoH) endpoint URL to enable automatic unsafe link detection when creating or editing links. When enabled, Sink queries the DoH service to check if the destination domain is flagged as malicious. If the domain resolves to `0.0.0.0`, the link is automatically marked as unsafe and visitors will see a warning page before being redirected.
91+
92+
Recommended values:
93+
94+
- `https://family.cloudflare-dns.com/dns-query` — Cloudflare Family DNS (blocks malware and adult content)
95+
- Custom [Cloudflare Zero Trust Gateway](https://developers.cloudflare.com/cloudflare-one/policies/gateway/) DoH URL — supports custom block lists, domain risk categories, and more granular control
96+
97+
Default is empty (disabled). Users can still manually mark links as unsafe in the dashboard regardless of this setting.
98+
8899
## `NUXT_NOT_FOUND_REDIRECT`
89100

90101
Optional custom redirect target when a slug is not found.

i18n/locales/de-DE.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Query-Parameter des Kurzlinks an die Ziel-URL anhängen. Überschreibt die globale Einstellung.",
239239
"cloaking_label": "Link-Cloaking aktivieren",
240240
"cloaking_description": "Zeigt Ihren Kurzlink in der Adressleiste des Browsers anstelle der Ziel-URL an. Funktioniert möglicherweise nicht bei Websites, die iframe-Einbettung blockieren.",
241+
"unsafe_label": "Als unsicher markieren",
242+
"unsafe_description": "Vor der Weiterleitung eine Warnseite anzeigen. Besucher müssen bestätigen, um fortzufahren.",
241243
"password_label": "Passwortschutz",
242244
"password_description": "Passwort zum Zugriff auf diesen Kurzlink erforderlich.",
243245
"password_placeholder": "Leer lassen zum Deaktivieren",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "KI-Slug konnte nicht generiert werden"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Manuelles Backup",
276+
"description": "Löse eine manuelle Sicherung aller Links auf dem konfigurierten R2-Bucket aus",
277+
"button": "Sicherung starten",
278+
"backing_up": "Sichere...",
279+
"success": "Sicherung erfolgreich",
280+
"failed": "Sicherung fehlgeschlagen"
281+
},
272282
"export": {
273283
"title": "Links exportieren",
274284
"description": "Laden Sie alle Links als JSON-Datei herunter",

i18n/locales/en-US.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Append query parameters from the short link to the destination URL. Overrides global setting.",
239239
"cloaking_label": "Enable Link Cloaking",
240240
"cloaking_description": "Show your short link in the browser address bar instead of the destination URL. May not work for sites that block iframe embedding.",
241+
"unsafe_label": "Mark as Unsafe",
242+
"unsafe_description": "Show a warning page before redirecting. Visitors must confirm to continue.",
241243
"password_label": "Password Protection",
242244
"password_description": "Require a password to access this short link.",
243245
"password_placeholder": "Leave empty to disable",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "Failed to generate AI slug"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Manual Backup",
276+
"description": "Trigger a manual backup of all links to the configured R2 bucket",
277+
"button": "Start Backup",
278+
"backing_up": "Backing up...",
279+
"success": "Backup successful",
280+
"failed": "Backup failed"
281+
},
272282
"export": {
273283
"title": "Export Links",
274284
"description": "Download all your links as a JSON file",

i18n/locales/fr-FR.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Ajouter les paramètres de requête du lien court à l'URL de destination. Remplace le paramètre global.",
239239
"cloaking_label": "Activer le masquage de lien",
240240
"cloaking_description": "Affiche votre lien court dans la barre d'adresse du navigateur au lieu de l'URL de destination. Peut ne pas fonctionner pour les sites qui bloquent l'intégration iframe.",
241+
"unsafe_label": "Marquer comme dangereux",
242+
"unsafe_description": "Afficher une page d'avertissement avant la redirection. Les visiteurs doivent confirmer pour continuer.",
241243
"password_label": "Protection par mot de passe",
242244
"password_description": "Exiger un mot de passe pour accéder à ce lien court.",
243245
"password_placeholder": "Laisser vide pour désactiver",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "Échec de la génération du slug IA"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Sauvegarde manuelle",
276+
"description": "Déclenchez une sauvegarde manuelle de tous les liens vers le bucket R2 configuré",
277+
"button": "Démarrer la sauvegarde",
278+
"backing_up": "Sauvegarde en cours...",
279+
"success": "Sauvegarde réussie",
280+
"failed": "Échec de la sauvegarde"
281+
},
272282
"export": {
273283
"title": "Exporter les liens",
274284
"description": "Téléchargez tous vos liens au format JSON",

i18n/locales/it-IT.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Aggiungi i parametri query dal link breve all'URL di destinazione. Sovrascrive l'impostazione globale.",
239239
"cloaking_label": "Abilita Mascheramento Link",
240240
"cloaking_description": "Mostra il tuo link breve nella barra degli indirizzi del browser invece dell'URL di destinazione. Potrebbe non funzionare per siti che bloccano l'incorporamento iframe.",
241+
"unsafe_label": "Segna come non sicuro",
242+
"unsafe_description": "Mostra una pagina di avviso prima del reindirizzamento. I visitatori devono confermare per continuare.",
241243
"password_label": "Protezione con Password",
242244
"password_description": "Richiedi una password per accedere a questo link breve.",
243245
"password_placeholder": "Lascia vuoto per disabilitare",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "Generazione slug IA fallita"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Backup manuale",
276+
"description": "Avvia un backup manuale di tutti i link nel bucket R2 configurato",
277+
"button": "Avvia backup",
278+
"backing_up": "Backup in corso...",
279+
"success": "Backup riuscito",
280+
"failed": "Backup fallito"
281+
},
272282
"export": {
273283
"title": "Esporta Link",
274284
"description": "Scarica tutti i tuoi link come file JSON",

i18n/locales/pt-BR.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Anexar parâmetros de consulta do link curto à URL de destino. Substitui a configuração global.",
239239
"cloaking_label": "Habilitar mascaramento de link",
240240
"cloaking_description": "Mostrar seu link curto na barra de endereço do navegador em vez da URL de destino. Pode não funcionar em sites que bloqueiam incorporação de iframe.",
241+
"unsafe_label": "Marcar como inseguro",
242+
"unsafe_description": "Mostrar uma página de aviso antes do redirecionamento. Os visitantes devem confirmar para continuar.",
241243
"password_label": "Proteção por senha",
242244
"password_description": "Exigir uma senha para acessar este link curto.",
243245
"password_placeholder": "Deixe vazio para desativar",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "Falha ao gerar slug via IA"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Backup manual",
276+
"description": "Acione um backup manual de todos os links para o bucket R2 configurado",
277+
"button": "Iniciar backup",
278+
"backing_up": "Fazendo backup...",
279+
"success": "Backup realizado com sucesso",
280+
"failed": "Falha no backup"
281+
},
272282
"export": {
273283
"title": "Exportar links",
274284
"description": "Baixe todos os seus links como um arquivo JSON",

i18n/locales/pt-PT.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Anexar parâmetros de consulta do link curto ao URL de destino. Substitui a definição global.",
239239
"cloaking_label": "Ativar ocultação de link",
240240
"cloaking_description": "Mostrar o teu link curto na barra de endereço do navegador em vez do URL de destino. Isto pode não funcionar em sites que bloqueiam a incorporação de iframes.",
241+
"unsafe_label": "Marcar como inseguro",
242+
"unsafe_description": "Mostrar uma página de aviso antes do redirecionamento. Os visitantes devem confirmar para continuar.",
241243
"password_label": "Proteção por palavra-passe",
242244
"password_description": "Exigir uma palavra-passe para aceder a este link curto.",
243245
"password_placeholder": "Deixa vazio para desativar",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "Falha ao gerar slug via IA"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Backup manual",
276+
"description": "Aciona um backup manual de todos os links para o bucket R2 configurado",
277+
"button": "Iniciar backup",
278+
"backing_up": "A fazer backup...",
279+
"success": "Backup concluído com sucesso",
280+
"failed": "Falha no backup"
281+
},
272282
"export": {
273283
"title": "Exportar links",
274284
"description": "Descarrega todos os teus links como um ficheiro JSON",

i18n/locales/vi-VN.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@
238238
"redirect_with_query_description": "Thêm tham số truy vấn từ liên kết rút gọn vào URL đích. Ghi đè cài đặt toàn cục.",
239239
"cloaking_label": "Bật che giấu liên kết",
240240
"cloaking_description": "Hiển thị liên kết rút gọn trên thanh địa chỉ trình duyệt thay vì URL đích. Có thể không hoạt động với các trang web chặn nhúng iframe.",
241+
"unsafe_label": "Đánh dấu là không an toàn",
242+
"unsafe_description": "Hiển thị trang cảnh báo trước khi chuyển hướng. Khách truy cập phải xác nhận để tiếp tục.",
241243
"password_label": "Bảo vệ bằng mật khẩu",
242244
"password_description": "Yêu cầu mật khẩu để truy cập liên kết rút gọn này.",
243245
"password_placeholder": "Để trống để tắt",
@@ -269,6 +271,14 @@
269271
"ai_slug_failed": "Tạo slug AI thất bại"
270272
},
271273
"migrate": {
274+
"backup": {
275+
"title": "Sao lưu thủ công",
276+
"description": "Kích hoạt sao lưu thủ công tất cả liên kết sang bộ chứa R2 đã được cấu hình",
277+
"button": "Bắt đầu sao lưu",
278+
"backing_up": "Đang sao lưu...",
279+
"success": "Sao lưu thành công",
280+
"failed": "Sao lưu thất bại"
281+
},
272282
"export": {
273283
"title": "Xuất liên kết",
274284
"description": "Tải xuống tất cả liên kết dưới dạng tệp JSON",

0 commit comments

Comments
 (0)