feat(panel): in-panel API documentation page

New /panel/api-docs route with a one-page reference covering every
/panel/api/* endpoint (Auth, Inbounds, Server, Nodes, Custom Geo,
Backup) plus a Bearer-token primer that reads the current token and
exposes Show/Copy/Regenerate inline. Sidebar gets an API Docs entry
right after Xray; the menu label is shared via menu.apiDocs across all
13 locales.
This commit is contained in:
MHSanaei
2026-05-11 13:57:42 +02:00
parent 7214ffafc5
commit e642f7324e
22 changed files with 1113 additions and 89 deletions
+6
View File
@@ -36,6 +36,7 @@ func (a *XUIController) initRouter(g *gin.RouterGroup) {
g.GET("/nodes", a.nodes)
g.GET("/settings", a.settings)
g.GET("/xray", a.xraySettings)
g.GET("/api-docs", a.apiDocs)
// SPA pages built by Vite don't have a server-rendered <meta name="csrf-token">,
// so they fetch the session token via this endpoint at startup and replay it
@@ -76,6 +77,11 @@ func (a *XUIController) xraySettings(c *gin.Context) {
serveDistPage(c, "xray.html")
}
// apiDocs renders the in-panel API documentation page.
func (a *XUIController) apiDocs(c *gin.Context) {
serveDistPage(c, "api-docs.html")
}
// csrfToken returns the session CSRF token to authenticated SPA clients.
// The endpoint is GET (a safe method) so it bypasses CSRFMiddleware itself,
// but checkLogin still gates the response — anonymous callers get 401/redirect.
+1
View File
@@ -97,6 +97,7 @@
"nodes": "النودز",
"settings": "إعدادات البانل",
"xray": "إعدادات Xray",
"apiDocs": "API Docs",
"logout": "تسجيل خروج",
"link": "إدارة"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Nodes",
"settings": "Panel Settings",
"xray": "Xray Configs",
"apiDocs": "API Docs",
"logout": "Log Out",
"link": "Manage"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Nodos",
"settings": "Configuraciones",
"xray": "Ajustes Xray",
"apiDocs": "API Docs",
"logout": "Cerrar Sesión",
"link": "Gestionar"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "نودها",
"settings": "تنظیمات پنل",
"xray": "پیکربندی ایکس‌ری",
"apiDocs": "API Docs",
"logout": "خروج",
"link": "مدیریت"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Node",
"settings": "Pengaturan Panel",
"xray": "Konfigurasi Xray",
"apiDocs": "API Docs",
"logout": "Keluar",
"link": "Kelola"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "ノード",
"settings": "パネル設定",
"xray": "Xray設定",
"apiDocs": "API Docs",
"logout": "ログアウト",
"link": "リンク管理"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Nós",
"settings": "Panel Settings",
"xray": "Xray Configs",
"apiDocs": "API Docs",
"logout": "Sair",
"link": "Gerenciar"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Узлы",
"settings": "Настройки",
"xray": "Настройки Xray",
"apiDocs": "API Docs",
"logout": "Выход",
"link": "Управление"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Düğümler",
"settings": "Panel Ayarları",
"xray": "Xray Yapılandırmaları",
"apiDocs": "API Docs",
"logout": "Çıkış Yap",
"link": "Yönet"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "Вузли",
"settings": "Параметри панелі",
"xray": "Конфігурації Xray",
"apiDocs": "API Docs",
"logout": "Вийти",
"link": "Керувати"
},
+1
View File
@@ -98,6 +98,7 @@
"settings": "Cài đặt bảng điều khiển",
"logout": "Đăng xuất",
"xray": "Cài đặt Xray",
"apiDocs": "API Docs",
"link": "Quản lý"
},
"pages": {
+1
View File
@@ -97,6 +97,7 @@
"nodes": "节点",
"settings": "面板设置",
"xray": "Xray 设置",
"apiDocs": "API Docs",
"logout": "退出登录",
"link": "管理"
},
+1
View File
@@ -97,6 +97,7 @@
"nodes": "節點",
"settings": "面板設定",
"xray": "Xray 設定",
"apiDocs": "API Docs",
"logout": "退出登入",
"link": "管理"
},