/
kochkatech
/
CorpGame
Обзор
Документация
Войти
/
kochkatech
/
CorpGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
master
frontend/src/lib/hostAddress.ts
39 строк
2 KB
kochkareal
fix(security): без JWT_SECRET/ADMIN_PASSWORD или с заглушками в проде сервер не стартует; валидация /extend; фикс двойного протокола в QR-хосте; верхняя граница длительности игры
24 июл 2026, 13:36
24 июл 2026, 13:36
789c581
Код
Авторство
О чём код?
const STORAGE_KEY = 'corpgame:hostOverride'; /** * true, если текущий адрес страницы недоступен с других устройств в той же сети — * QR-код с "localhost" бессмысленно сканировать телефоном, у него это будет ЕГО собственный localhost. */ export function isLocalOnlyHost(hostname: string): boolean { return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1'; } export function getSavedHostOverride(): string { return localStorage.getItem(STORAGE_KEY) ?? ''; } /** Убирает случайно вставленный протокол/путь — вводить нужно только сам хост, напр. 192.168.1.42 */ function sanitizeHost(host: string): string { return host .trim() .replace(/^[a-z]+:\/\//i, '') .replace(/\/.*$/, ''); } export function saveHostOverride(host: string) { const trimmed = sanitizeHost(host); if (trimmed) localStorage.setItem(STORAGE_KEY, trimmed); else localStorage.removeItem(STORAGE_KEY); } /** * Собирает адрес для подключения других устройств: тот же протокол и порт, что у текущей * страницы, но хост можно переопределить вручную (сохраняется между визитами) — на случай, * когда страница открыта через localhost и IP компьютера в сети нужно ввести самим. */ export function buildLanUrl(hostOverride?: string): string { if (typeof window === 'undefined') return ''; const { protocol, port, hostname } = window.location; const host = sanitizeHost(hostOverride ?? getSavedHostOverride() ?? '') || hostname; return `${protocol}//${host}${port ? `:${port}` : ''}`; }