import type { Link } from './links'; // As páginas que o servidor devolve fora do React (aviso antes de sair e link // não encontrado). São as mesmas dos modelos Express e FastAPI. const escaparHtml = (texto: string) => texto.replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]!); /** * Página de aviso antes de sair: mostra para onde o link leva. Todo valor é * escapado (o link foi digitado por alguém) e entra numa passada só, para um * valor nunca ser lido como outro marcador. */ export function paginaAviso(link: Link): string { const valores: Record = { HOST: new URL(link.url).host, URL: link.url, CODIGO: link.codigo }; return MODELO_AVISO.replace(/\{\{(HOST|URL|CODIGO)\}\}/g, (_, chave: string) => escaparHtml(valores[chave])); } // A página de aviso não roda script nenhum: o navegador só aceita o CSS dela. export const CSP_AVISO = "default-src 'none'; style-src 'unsafe-inline'; img-src data:; frame-ancestors 'none'; base-uri 'none'; form-action 'none'"; export function respostaNaoEncontrada(): Response { return new Response(PAGINA_NAO_ENCONTRADA, { status: 404, headers: { 'Content-Type': 'text/html; charset=utf-8' }, }); } const MODELO_AVISO = ` Você está saindo deste site

Você está saindo deste site

Este link curto leva para outro endereço.

Você está indo para

{{HOST}}

{{URL}}

Confira se o endereço é o que você esperava. Este encurtador é público: qualquer pessoa pode criar links nele.

`; const PAGINA_NAO_ENCONTRADA = ` Link não encontrado

Link não encontrado

Esse link curto não existe ou sumiu quando o app foi publicado de novo.

Encurtar um link
`;