Skip to content

Заголовки подписки support-url / profile-web-page-url + сортировка таблицы юзеров #112

Description

@Postlog

Категория: ux · Приоритет: low · Размер: S · Ранг: 10/10

Что построить

  1. Несколько операторских полей во вкладке Конфиг (support URL, текст анонса) → новые заголовки ответа /sub; profile-web-page-url выводится автоматически из host+token (ведёт на лендинг из Человеко-ориентированная страница подписки с QR и кнопками импорта в приложения #106). 2) Кликабельные заголовки столбцов таблицы пользователей (имя, трафик, истечение) для сортировки.

Паритет с конкурентами

Заголовки: Hiddify/Marzban/Remnawave/v2RayTun (profile-web-page-url, support-url, announce). Сортировка таблицы: Remnawave/Marzneshin/Hiddify. Обе мелочи есть у всех.

Чего не хватает сейчас (код)

sub/handler.go отдаёт только 4 заголовка (Subscription-Userinfo, Profile-Title, Profile-Update-Interval, Content-Disposition) — нет support-url/profile-web-page-url/announce, поэтому клиенты не рисуют кнопки «Дом»/«Поддержка». mihomo.Profile несёт только Title/Filename/UpdateInterval. В SPA таблица юзеров не сортируется по столбцам (только серверная пагинация/фильтр).

Зачем

Заголовки дают in-app кнопки «Дом»/«Поддержка»/анонсы без выхода из прокси-приложения — паритет с Marzban/Remnawave/v2RayTun почти бесплатно. Сортировка таблицы — базовое удобство для поиска тяжёлых/истекающих юзеров, которого в subgen нет.

Предлагаемая реализация

Заголовки: расширить mihomo.Profile полями SupportURL/Announce; добавить optional response-headers в openapi /sub-операцию (ogen-параметры), хендлер их выставляет; web-page-url derive из request host + token. Поля редактируются в config_save/config_get (Профиль уже сохраняется). Сортировка: users_get уже серверно-пагинируется — добавить параметры sort/order (openapi), ORDER BY в users-репозитории; во Vue — кликабельные th с индикатором направления.

Затронутые файлы

  • internal/mihomo/profile.go (SupportURL/Announce), internal/handlers/sub/handler.go
  • openapi/{sub,config_save,config_get,users_get}.yaml, internal/repository/users/list.go (ORDER BY)
  • internal/handlers/{users_get,config_save,config_get}/, internal/handlers/web/static/{app.js,index.html}

Продуктовый ресёрч: изучены аналоги (Marzban/Marzneshin, 3x-ui, Remnawave, Hiddify, sub-store + клиентские стандарты импорта). Паритет и subgen-gap код-обоснованы. Ранг = продуктовый приоритет.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions