1
0

routes.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <?php
  2. declare(strict_types=1);
  3. use App\Middleware\Admin;
  4. use App\Middleware\Auth;
  5. use App\Middleware\AuthorizationBearer;
  6. use App\Middleware\Guest;
  7. use App\Middleware\NodeToken;
  8. use Slim\App as SlimApp;
  9. return function (SlimApp $app): void {
  10. // Home
  11. $app->get('/', App\Controllers\HomeController::class . ':index');
  12. $app->get('/404', App\Controllers\HomeController::class . ':page404');
  13. $app->get('/405', App\Controllers\HomeController::class . ':page405');
  14. $app->get('/500', App\Controllers\HomeController::class . ':page500');
  15. $app->get('/tos', App\Controllers\HomeController::class . ':tos');
  16. $app->get('/staff', App\Controllers\HomeController::class . ':staff');
  17. // other
  18. $app->post('/notify', App\Controllers\HomeController::class . ':notify');
  19. // Telegram
  20. $app->post('/telegram_callback', App\Controllers\HomeController::class . ':telegram');
  21. // User Center
  22. $app->group('/user', function (): void {
  23. $this->get('', App\Controllers\UserController::class . ':index');
  24. $this->get('/', App\Controllers\UserController::class . ':index');
  25. $this->post('/checkin', App\Controllers\UserController::class . ':doCheckin');
  26. $this->get('/announcement', App\Controllers\UserController::class . ':announcement');
  27. $this->get('/docs', App\Controllers\UserController::class . ':docs');
  28. $this->get('/media', App\Controllers\UserController::class . ':media');
  29. $this->get('/profile', App\Controllers\UserController::class . ':profile');
  30. $this->get('/invite', App\Controllers\UserController::class . ':invite');
  31. $this->get('/banned', App\Controllers\UserController::class . ':banned');
  32. $this->get('/server', App\Controllers\User\ServerController::class . ':userServerPage');
  33. $this->get('/detect', App\Controllers\User\DetectController::class . ':detectIndex');
  34. $this->get('/detect/log', App\Controllers\User\DetectController::class . ':detectLog');
  35. $this->get('/shop', App\Controllers\User\ShopController::class . ':shop');
  36. $this->post('/coupon_check', App\Controllers\User\ShopController::class . ':couponCheck');
  37. $this->post('/buy', App\Controllers\User\ShopController::class . ':buy');
  38. $this->post('/buy_traffic_package', App\Controllers\User\ShopController::class . ':buyTrafficPackage');
  39. $this->get('/ticket', App\Controllers\User\TicketController::class . ':ticket');
  40. $this->get('/ticket/create', App\Controllers\User\TicketController::class . ':ticketCreate');
  41. $this->post('/ticket', App\Controllers\User\TicketController::class . ':ticketAdd');
  42. $this->get('/ticket/{id}/view', App\Controllers\User\TicketController::class . ':ticketView');
  43. $this->put('/ticket/{id}', App\Controllers\User\TicketController::class . ':ticketUpdate');
  44. $this->post('/buy_invite', App\Controllers\UserController::class . ':buyInvite');
  45. $this->post('/custom_invite', App\Controllers\UserController::class . ':customInvite');
  46. $this->get('/edit', App\Controllers\UserController::class . ':edit');
  47. $this->post('/email', App\Controllers\UserController::class . ':updateEmail');
  48. $this->post('/username', App\Controllers\UserController::class . ':updateUsername');
  49. $this->post('/password', App\Controllers\UserController::class . ':updatePassword');
  50. $this->post('/send', App\Controllers\AuthController::class . ':sendVerify');
  51. $this->post('/contact_update', App\Controllers\UserController::class . ':updateContact');
  52. $this->post('/ssr', App\Controllers\UserController::class . ':updateSSR');
  53. $this->post('/theme', App\Controllers\UserController::class . ':updateTheme');
  54. $this->post('/mail', App\Controllers\UserController::class . ':updateMail');
  55. $this->post('/passwd_reset', App\Controllers\UserController::class . ':resetPasswd');
  56. $this->post('/method', App\Controllers\UserController::class . ':updateMethod');
  57. $this->get('/trafficlog', App\Controllers\UserController::class . ':trafficLog');
  58. $this->get('/kill', App\Controllers\UserController::class . ':kill');
  59. $this->post('/kill', App\Controllers\UserController::class . ':handleKill');
  60. $this->get('/logout', App\Controllers\UserController::class . ':logout');
  61. $this->get('/backtoadmin', App\Controllers\UserController::class . ':backtoadmin');
  62. $this->get('/code', App\Controllers\UserController::class . ':code');
  63. $this->get('/code_check', App\Controllers\UserController::class . ':codeCheck');
  64. $this->post('/code', App\Controllers\UserController::class . ':codePost');
  65. $this->post('/ga_check', App\Controllers\UserController::class . ':checkGa');
  66. $this->post('/ga_set', App\Controllers\UserController::class . ':setGa');
  67. $this->get('/ga_reset', App\Controllers\UserController::class . ':resetGa');
  68. $this->post('/telegram_reset', App\Controllers\UserController::class . ':resetTelegram');
  69. $this->post('/unblock', App\Controllers\UserController::class . ':unblock');
  70. $this->get('/bought', App\Controllers\UserController::class . ':bought');
  71. $this->delete('/bought', App\Controllers\UserController::class . ':deleteBoughtGet');
  72. $this->post('/url_reset', App\Controllers\UserController::class . ':resetURL');
  73. $this->put('/invite', App\Controllers\UserController::class . ':resetInviteURL');
  74. //深色模式
  75. $this->post('/switch_theme_mode', App\Controllers\UserController::class . ':switchThemeMode');
  76. // 订阅记录
  77. $this->get('/subscribe_log', App\Controllers\UserController::class . ':subscribeLog');
  78. // getUserAllURL
  79. $this->get('/getUserAllURL', App\Controllers\UserController::class . ':getUserAllURL');
  80. //Reconstructed Payment System
  81. $this->post('/payment/purchase/{type}', App\Services\Payment::class . ':purchase');
  82. $this->get('/payment/purchase/{type}', App\Services\Payment::class . ':purchase');
  83. $this->get('/payment/return/{type}', App\Services\Payment::class . ':returnHTML');
  84. })->add(new Auth());
  85. $app->group('/payment', function (): void {
  86. $this->get('/notify/{type}', App\Services\Payment::class . ':notify');
  87. $this->post('/notify/{type}', App\Services\Payment::class . ':notify');
  88. $this->post('/status/{type}', App\Services\Payment::class . ':getStatus');
  89. });
  90. // Auth
  91. $app->group('/auth', function (): void {
  92. $this->get('/login', App\Controllers\AuthController::class . ':login');
  93. $this->post('/qrcode_check', App\Controllers\AuthController::class . ':qrcodeCheck');
  94. $this->post('/login', App\Controllers\AuthController::class . ':loginHandle');
  95. $this->post('/qrcode_login', App\Controllers\AuthController::class . ':qrcodeLoginHandle');
  96. $this->get('/register', App\Controllers\AuthController::class . ':register');
  97. $this->post('/register', App\Controllers\AuthController::class . ':registerHandle');
  98. $this->post('/send', App\Controllers\AuthController::class . ':sendVerify');
  99. $this->get('/logout', App\Controllers\AuthController::class . ':logout');
  100. $this->get('/telegram_oauth', App\Controllers\AuthController::class . ':telegramOauth');
  101. })->add(new Guest());
  102. // Password
  103. $app->group('/password', function (): void {
  104. $this->get('/reset', App\Controllers\PasswordController::class . ':reset');
  105. $this->post('/reset', App\Controllers\PasswordController::class . ':handleReset');
  106. $this->get('/token/{token}', App\Controllers\PasswordController::class . ':token');
  107. $this->post('/token/{token}', App\Controllers\PasswordController::class . ':handleToken');
  108. })->add(new Guest());
  109. // Admin
  110. $app->group('/admin', function (): void {
  111. $this->get('', App\Controllers\AdminController::class . ':index');
  112. $this->get('/', App\Controllers\AdminController::class . ':index');
  113. $this->get('/sys', App\Controllers\AdminController::class . ':sys');
  114. $this->get('/invite', App\Controllers\AdminController::class . ':invite');
  115. $this->post('/invite', App\Controllers\AdminController::class . ':addInvite');
  116. $this->post('/chginvite', App\Controllers\AdminController::class . ':chgInvite');
  117. $this->post('/payback/ajax', App\Controllers\AdminController::class . ':ajaxPayback');
  118. // Node Mange
  119. $this->get('/node', App\Controllers\Admin\NodeController::class . ':index');
  120. $this->get('/node/create', App\Controllers\Admin\NodeController::class . ':create');
  121. $this->post('/node', App\Controllers\Admin\NodeController::class . ':add');
  122. $this->get('/node/{id}/edit', App\Controllers\Admin\NodeController::class . ':edit');
  123. $this->post('/node/{id}/password_reset', App\Controllers\Admin\NodeController::class . ':resetNodePassword');
  124. $this->put('/node/{id}', App\Controllers\Admin\NodeController::class . ':update');
  125. $this->delete('/node', App\Controllers\Admin\NodeController::class . ':delete');
  126. $this->post('/node/ajax', App\Controllers\Admin\NodeController::class . ':ajax');
  127. // Ticket Mange
  128. $this->get('/ticket', App\Controllers\Admin\TicketController::class . ':index');
  129. $this->post('/ticket', App\Controllers\Admin\TicketController::class . ':add');
  130. $this->get('/ticket/{id}/view', App\Controllers\Admin\TicketController::class . ':ticketView');
  131. $this->put('/ticket/{id}/close', App\Controllers\Admin\TicketController::class . ':close');
  132. $this->put('/ticket/{id}', App\Controllers\Admin\TicketController::class . ':update');
  133. $this->delete('/ticket/{id}', App\Controllers\Admin\TicketController::class . ':delete');
  134. // Shop Mange
  135. $this->get('/shop', App\Controllers\Admin\ShopController::class . ':index');
  136. $this->post('/shop/ajax', App\Controllers\Admin\ShopController::class . ':ajaxShop');
  137. $this->get('/shop/create', App\Controllers\Admin\ShopController::class . ':create');
  138. $this->post('/shop', App\Controllers\Admin\ShopController::class . ':add');
  139. $this->get('/shop/{id}/edit', App\Controllers\Admin\ShopController::class . ':edit');
  140. $this->put('/shop/{id}', App\Controllers\Admin\ShopController::class . ':update');
  141. $this->delete('/shop', App\Controllers\Admin\ShopController::class . ':deleteGet');
  142. // Bought Mange
  143. $this->get('/bought', App\Controllers\Admin\ShopController::class . ':bought');
  144. $this->delete('/bought', App\Controllers\Admin\ShopController::class . ':deleteBoughtGet');
  145. $this->post('/bought/ajax', App\Controllers\Admin\ShopController::class . ':ajaxBought');
  146. // Ann Mange
  147. $this->get('/announcement', App\Controllers\Admin\AnnController::class . ':index');
  148. $this->get('/announcement/create', App\Controllers\Admin\AnnController::class . ':create');
  149. $this->post('/announcement', App\Controllers\Admin\AnnController::class . ':add');
  150. $this->get('/announcement/{id}/edit', App\Controllers\Admin\AnnController::class . ':edit');
  151. $this->put('/announcement/{id}', App\Controllers\Admin\AnnController::class . ':update');
  152. $this->delete('/announcement', App\Controllers\Admin\AnnController::class . ':delete');
  153. $this->post('/announcement/ajax', App\Controllers\Admin\AnnController::class . ':ajax');
  154. // Detect Mange
  155. $this->get('/detect', App\Controllers\Admin\DetectController::class . ':index');
  156. $this->get('/detect/create', App\Controllers\Admin\DetectController::class . ':create');
  157. $this->post('/detect', App\Controllers\Admin\DetectController::class . ':add');
  158. $this->get('/detect/{id}/edit', App\Controllers\Admin\DetectController::class . ':edit');
  159. $this->put('/detect/{id}', App\Controllers\Admin\DetectController::class . ':update');
  160. $this->delete('/detect', App\Controllers\Admin\DetectController::class . ':delete');
  161. $this->get('/detect/log', App\Controllers\Admin\DetectController::class . ':log');
  162. $this->post('/detect/ajax', App\Controllers\Admin\DetectController::class . ':ajaxRule');
  163. $this->post('/detect/log/ajax', App\Controllers\Admin\DetectController::class . ':ajaxLog');
  164. // IP Mange
  165. $this->get('/block', App\Controllers\Admin\IpController::class . ':block');
  166. $this->get('/unblock', App\Controllers\Admin\IpController::class . ':unblock');
  167. $this->post('/unblock', App\Controllers\Admin\IpController::class . ':doUnblock');
  168. $this->get('/login', App\Controllers\Admin\IpController::class . ':index');
  169. $this->get('/alive', App\Controllers\Admin\IpController::class . ':alive');
  170. $this->post('/block/ajax', App\Controllers\Admin\IpController::class . ':ajaxBlock');
  171. $this->post('/unblock/ajax', App\Controllers\Admin\IpController::class . ':ajaxUnblock');
  172. $this->post('/login/ajax', App\Controllers\Admin\IpController::class . ':ajaxLogin');
  173. $this->post('/alive/ajax', App\Controllers\Admin\IpController::class . ':ajaxAlive');
  174. // Code Mange
  175. $this->get('/code', App\Controllers\Admin\CodeController::class . ':index');
  176. $this->get('/code/create', App\Controllers\Admin\CodeController::class . ':create');
  177. $this->post('/code', App\Controllers\Admin\CodeController::class . ':add');
  178. $this->post('/code/ajax', App\Controllers\Admin\CodeController::class . ':ajaxCode');
  179. // User Mange
  180. $this->get('/user', App\Controllers\Admin\UserController::class . ':index');
  181. $this->get('/user/{id}/edit', App\Controllers\Admin\UserController::class . ':edit');
  182. $this->put('/user/{id}', App\Controllers\Admin\UserController::class . ':update');
  183. $this->delete('/user', App\Controllers\Admin\UserController::class . ':delete');
  184. $this->post('/user/changetouser', App\Controllers\Admin\UserController::class . ':changetouser');
  185. $this->post('/user/ajax', App\Controllers\Admin\UserController::class . ':ajax');
  186. $this->post('/user/create', App\Controllers\Admin\UserController::class . ':createNewUser');
  187. // Coupon Mange
  188. $this->get('/coupon', App\Controllers\AdminController::class . ':coupon');
  189. $this->post('/coupon', App\Controllers\AdminController::class . ':addCoupon');
  190. $this->post('/coupon/ajax', App\Controllers\AdminController::class . ':ajaxCoupon');
  191. // Subscribe Log Mange
  192. $this->get('/subscribe', App\Controllers\Admin\SubscribeLogController::class . ':index');
  193. $this->post('/subscribe/ajax', App\Controllers\Admin\SubscribeLogController::class . ':ajaxSubscribeLog');
  194. // Traffic Log Mange
  195. $this->get('/trafficlog', App\Controllers\Admin\TrafficLogController::class . ':index');
  196. $this->post('/trafficlog/ajax', App\Controllers\Admin\TrafficLogController::class . ':ajaxTrafficLog');
  197. // Detect Ban Mange
  198. $this->get('/detect/ban', App\Controllers\Admin\DetectBanLogController::class . ':index');
  199. $this->post('/detect/ban/ajax', App\Controllers\Admin\DetectBanLogController::class . ':ajaxLog');
  200. // 指定用户购买记录以及添加套餐
  201. $this->get('/user/{id}/bought', App\Controllers\Admin\UserLog\BoughtLogController::class . ':bought');
  202. $this->post('/user/{id}/bought/ajax', App\Controllers\Admin\UserLog\BoughtLogController::class . ':boughtAjax');
  203. $this->delete('/user/bought', App\Controllers\Admin\UserLog\BoughtLogController::class . ':boughtDelete');
  204. $this->post('/user/{id}/bought/buy', App\Controllers\Admin\UserLog\BoughtLogController::class . ':boughtAdd');
  205. // 指定用户充值记录
  206. $this->get('/user/{id}/code', App\Controllers\Admin\UserLog\CodeLogController::class . ':index');
  207. $this->post('/user/{id}/code/ajax', App\Controllers\Admin\UserLog\CodeLogController::class . ':ajax');
  208. // 指定用户订阅记录
  209. $this->get('/user/{id}/sublog', App\Controllers\Admin\UserLog\SubLogController::class . ':index');
  210. $this->post('/user/{id}/sublog/ajax', App\Controllers\Admin\UserLog\SubLogController::class . ':ajax');
  211. // 指定用户审计记录
  212. $this->get('/user/{id}/detect', App\Controllers\Admin\UserLog\DetectLogController::class . ':index');
  213. $this->post('/user/{id}/detect/ajax', App\Controllers\Admin\UserLog\DetectLogController::class . ':ajax');
  214. // 指定用户登录记录
  215. $this->get('/user/{id}/login', App\Controllers\Admin\UserLog\LoginLogController::class . ':index');
  216. $this->post('/user/{id}/login/ajax', App\Controllers\Admin\UserLog\LoginLogController::class . ':ajax');
  217. // 设置中心
  218. $this->get('/setting', App\Controllers\Admin\SettingController::class . ':index');
  219. $this->post('/setting', App\Controllers\Admin\SettingController::class . ':save');
  220. $this->post('/setting/email', App\Controllers\Admin\SettingController::class . ':test');
  221. $this->post('/setting/payment', App\Controllers\Admin\SettingController::class . ':payment');
  222. })->add(new Admin());
  223. if ($_ENV['enableAdminApi']) {
  224. $app->group('/admin/api', function (): void {
  225. $this->get('/nodes', App\Controllers\Admin\ApiController::class . ':getNodeList');
  226. $this->get('/node/{id}', App\Controllers\Admin\ApiController::class . ':getNodeInfo');
  227. $this->get('/ping', App\Controllers\Admin\ApiController::class . ':ping');
  228. // Re-bind controller, bypass admin token require
  229. $this->post('/node', App\Controllers\Admin\NodeController::class . ':add');
  230. $this->put('/node/{id}', App\Controllers\Admin\NodeController::class . ':update');
  231. $this->delete('/node', App\Controllers\Admin\NodeController::class . ':delete');
  232. })->add(new AuthorizationBearer($_ENV['adminApiToken']));
  233. }
  234. // mu
  235. $app->group('/mod_mu', function (): void {
  236. // 流媒体检测
  237. $this->post('/media/saveReport', App\Controllers\Node\NodeController::class . ':saveReport');
  238. // 节点
  239. $this->get('/nodes', App\Controllers\Node\NodeController::class . ':getAllInfo');
  240. $this->get('/nodes/{id}/info', App\Controllers\Node\NodeController::class . ':getInfo');
  241. $this->post('/nodes/{id}/info', App\Controllers\Node\NodeController::class . ':info');
  242. // 用户
  243. $this->get('/users', App\Controllers\Node\UserController::class . ':index');
  244. $this->post('/users/traffic', App\Controllers\Node\UserController::class . ':addTraffic');
  245. $this->post('/users/aliveip', App\Controllers\Node\UserController::class . ':addAliveIp');
  246. $this->post('/users/detectlog', App\Controllers\Node\UserController::class . ':addDetectLog');
  247. // 审计 & 杂七杂八的功能
  248. $this->get('/func/detect_rules', App\Controllers\Node\FuncController::class . ':getDetectLogs');
  249. $this->post('/func/block_ip', App\Controllers\Node\FuncController::class . ':addBlockIp');
  250. $this->get('/func/block_ip', App\Controllers\Node\FuncController::class . ':getBlockip');
  251. $this->get('/func/unblock_ip', App\Controllers\Node\FuncController::class . ':getUnblockip');
  252. $this->get('/func/ping', App\Controllers\Node\FuncController::class . ':ping');
  253. })->add(new NodeToken());
  254. $app->group('/link', function (): void {
  255. $this->get('/{token}', App\Controllers\LinkController::class . ':getContent');
  256. });
  257. //通用訂閲
  258. $app->group('/sub', function (): void {
  259. $this->get('/{token}/{subtype}', App\Controllers\SubController::class . ':getContent');
  260. });
  261. };