1
0

api.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. package main
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "net/http/pprof"
  6. "imuslab.com/zoraxy/mod/acme/acmedns"
  7. "imuslab.com/zoraxy/mod/acme/acmewizard"
  8. "imuslab.com/zoraxy/mod/auth"
  9. "imuslab.com/zoraxy/mod/dynamicproxy/domainsniff"
  10. "imuslab.com/zoraxy/mod/ipscan"
  11. "imuslab.com/zoraxy/mod/netstat"
  12. "imuslab.com/zoraxy/mod/netutils"
  13. "imuslab.com/zoraxy/mod/utils"
  14. )
  15. /*
  16. API.go
  17. This file contains all the API called by the web management interface
  18. */
  19. // Register the APIs for HTTP proxy management functions
  20. func RegisterHTTPProxyAPIs(authRouter *auth.RouterDef) {
  21. /* Reverse Proxy Settings & Status */
  22. authRouter.HandleFunc("/api/proxy/enable", ReverseProxyHandleOnOff)
  23. authRouter.HandleFunc("/api/proxy/add", ReverseProxyHandleAddEndpoint)
  24. authRouter.HandleFunc("/api/proxy/status", ReverseProxyStatus)
  25. authRouter.HandleFunc("/api/proxy/toggle", ReverseProxyToggleRuleSet)
  26. authRouter.HandleFunc("/api/proxy/list", ReverseProxyList)
  27. authRouter.HandleFunc("/api/proxy/detail", ReverseProxyListDetail)
  28. authRouter.HandleFunc("/api/proxy/edit", ReverseProxyHandleEditEndpoint)
  29. authRouter.HandleFunc("/api/proxy/setAlias", ReverseProxyHandleAlias)
  30. authRouter.HandleFunc("/api/proxy/del", DeleteProxyEndpoint)
  31. authRouter.HandleFunc("/api/proxy/updateCredentials", UpdateProxyBasicAuthCredentials)
  32. authRouter.HandleFunc("/api/proxy/tlscheck", domainsniff.HandleCheckSiteSupportTLS)
  33. authRouter.HandleFunc("/api/proxy/setIncoming", HandleIncomingPortSet)
  34. authRouter.HandleFunc("/api/proxy/useHttpsRedirect", HandleUpdateHttpsRedirect)
  35. authRouter.HandleFunc("/api/proxy/listenPort80", HandleUpdatePort80Listener)
  36. authRouter.HandleFunc("/api/proxy/requestIsProxied", HandleManagementProxyCheck)
  37. authRouter.HandleFunc("/api/proxy/developmentMode", HandleDevelopmentModeChange)
  38. /* Reverse proxy upstream (load balance) */
  39. authRouter.HandleFunc("/api/proxy/upstream/list", ReverseProxyUpstreamList)
  40. authRouter.HandleFunc("/api/proxy/upstream/add", ReverseProxyUpstreamAdd)
  41. authRouter.HandleFunc("/api/proxy/upstream/setPriority", ReverseProxyUpstreamSetPriority)
  42. authRouter.HandleFunc("/api/proxy/upstream/update", ReverseProxyUpstreamUpdate)
  43. authRouter.HandleFunc("/api/proxy/upstream/remove", ReverseProxyUpstreamDelete)
  44. /* Reverse proxy virtual directory */
  45. authRouter.HandleFunc("/api/proxy/vdir/list", ReverseProxyListVdir)
  46. authRouter.HandleFunc("/api/proxy/vdir/add", ReverseProxyAddVdir)
  47. authRouter.HandleFunc("/api/proxy/vdir/del", ReverseProxyDeleteVdir)
  48. authRouter.HandleFunc("/api/proxy/vdir/edit", ReverseProxyEditVdir)
  49. /* Reverse proxy user-defined header */
  50. authRouter.HandleFunc("/api/proxy/header/list", HandleCustomHeaderList)
  51. authRouter.HandleFunc("/api/proxy/header/add", HandleCustomHeaderAdd)
  52. authRouter.HandleFunc("/api/proxy/header/remove", HandleCustomHeaderRemove)
  53. authRouter.HandleFunc("/api/proxy/header/handleHSTS", HandleHSTSState)
  54. authRouter.HandleFunc("/api/proxy/header/handleHopByHop", HandleHopByHop)
  55. authRouter.HandleFunc("/api/proxy/header/handleHostOverwrite", HandleHostOverwrite)
  56. authRouter.HandleFunc("/api/proxy/header/handlePermissionPolicy", HandlePermissionPolicy)
  57. authRouter.HandleFunc("/api/proxy/header/handleWsHeaderBehavior", HandleWsHeaderBehavior)
  58. /* Reverse proxy auth related */
  59. authRouter.HandleFunc("/api/proxy/auth/exceptions/list", ListProxyBasicAuthExceptionPaths)
  60. authRouter.HandleFunc("/api/proxy/auth/exceptions/add", AddProxyBasicAuthExceptionPaths)
  61. authRouter.HandleFunc("/api/proxy/auth/exceptions/delete", RemoveProxyBasicAuthExceptionPaths)
  62. }
  63. // Register the APIs for TLS / SSL certificate management functions
  64. func RegisterTLSAPIs(authRouter *auth.RouterDef) {
  65. authRouter.HandleFunc("/api/cert/tls", handleToggleTLSProxy)
  66. authRouter.HandleFunc("/api/cert/tlsRequireLatest", handleSetTlsRequireLatest)
  67. authRouter.HandleFunc("/api/cert/upload", handleCertUpload)
  68. authRouter.HandleFunc("/api/cert/download", handleCertDownload)
  69. authRouter.HandleFunc("/api/cert/list", handleListCertificate)
  70. authRouter.HandleFunc("/api/cert/listdomains", handleListDomains)
  71. authRouter.HandleFunc("/api/cert/checkDefault", handleDefaultCertCheck)
  72. authRouter.HandleFunc("/api/cert/delete", handleCertRemove)
  73. }
  74. // Register the APIs for Authentication handlers like Authelia and OAUTH2
  75. func RegisterAuthenticationHandlerAPIs(authRouter *auth.RouterDef) {
  76. authRouter.HandleFunc("/api/sso/Authelia", autheliaRouter.HandleSetAutheliaURLAndHTTPS)
  77. }
  78. // Register the APIs for redirection rules management functions
  79. func RegisterRedirectionAPIs(authRouter *auth.RouterDef) {
  80. authRouter.HandleFunc("/api/redirect/list", handleListRedirectionRules)
  81. authRouter.HandleFunc("/api/redirect/add", handleAddRedirectionRule)
  82. authRouter.HandleFunc("/api/redirect/delete", handleDeleteRedirectionRule)
  83. authRouter.HandleFunc("/api/redirect/regex", handleToggleRedirectRegexpSupport)
  84. }
  85. // Register the APIs for access rules management functions
  86. func RegisterAccessRuleAPIs(authRouter *auth.RouterDef) {
  87. /* Access Rules Settings & Status */
  88. authRouter.HandleFunc("/api/access/list", handleListAccessRules)
  89. authRouter.HandleFunc("/api/access/attach", handleAttachRuleToHost)
  90. authRouter.HandleFunc("/api/access/create", handleCreateAccessRule)
  91. authRouter.HandleFunc("/api/access/remove", handleRemoveAccessRule)
  92. authRouter.HandleFunc("/api/access/update", handleUpadateAccessRule)
  93. /* Blacklist */
  94. authRouter.HandleFunc("/api/blacklist/list", handleListBlacklisted)
  95. authRouter.HandleFunc("/api/blacklist/country/add", handleCountryBlacklistAdd)
  96. authRouter.HandleFunc("/api/blacklist/country/remove", handleCountryBlacklistRemove)
  97. authRouter.HandleFunc("/api/blacklist/ip/add", handleIpBlacklistAdd)
  98. authRouter.HandleFunc("/api/blacklist/ip/remove", handleIpBlacklistRemove)
  99. authRouter.HandleFunc("/api/blacklist/enable", handleBlacklistEnable)
  100. /* Whitelist */
  101. authRouter.HandleFunc("/api/whitelist/list", handleListWhitelisted)
  102. authRouter.HandleFunc("/api/whitelist/country/add", handleCountryWhitelistAdd)
  103. authRouter.HandleFunc("/api/whitelist/country/remove", handleCountryWhitelistRemove)
  104. authRouter.HandleFunc("/api/whitelist/ip/add", handleIpWhitelistAdd)
  105. authRouter.HandleFunc("/api/whitelist/ip/remove", handleIpWhitelistRemove)
  106. authRouter.HandleFunc("/api/whitelist/enable", handleWhitelistEnable)
  107. }
  108. // Register the APIs for path blocking rules management functions, WIP
  109. func RegisterPathRuleAPIs(authRouter *auth.RouterDef) {
  110. authRouter.HandleFunc("/api/pathrule/add", pathRuleHandler.HandleAddBlockingPath)
  111. authRouter.HandleFunc("/api/pathrule/list", pathRuleHandler.HandleListBlockingPath)
  112. authRouter.HandleFunc("/api/pathrule/remove", pathRuleHandler.HandleRemoveBlockingPath)
  113. }
  114. // Register the APIs statistic anlysis and uptime monitoring functions
  115. func RegisterStatisticalAPIs(authRouter *auth.RouterDef) {
  116. /* Traffic Summary */
  117. authRouter.HandleFunc("/api/stats/summary", statisticCollector.HandleTodayStatLoad)
  118. authRouter.HandleFunc("/api/stats/countries", HandleCountryDistrSummary)
  119. authRouter.HandleFunc("/api/stats/netstat", netstatBuffers.HandleGetNetworkInterfaceStats)
  120. authRouter.HandleFunc("/api/stats/netstatgraph", netstatBuffers.HandleGetBufferedNetworkInterfaceStats)
  121. authRouter.HandleFunc("/api/stats/listnic", netstat.HandleListNetworkInterfaces)
  122. /* Zoraxy Analytic */
  123. authRouter.HandleFunc("/api/analytic/list", AnalyticLoader.HandleSummaryList)
  124. authRouter.HandleFunc("/api/analytic/load", AnalyticLoader.HandleLoadTargetDaySummary)
  125. authRouter.HandleFunc("/api/analytic/loadRange", AnalyticLoader.HandleLoadTargetRangeSummary)
  126. authRouter.HandleFunc("/api/analytic/exportRange", AnalyticLoader.HandleRangeExport)
  127. authRouter.HandleFunc("/api/analytic/resetRange", AnalyticLoader.HandleRangeReset)
  128. /* UpTime Monitor */
  129. authRouter.HandleFunc("/api/utm/list", HandleUptimeMonitorListing)
  130. }
  131. // Register the APIs for Global Area Network management functions, Will be moving to plugin soon
  132. func RegisterGANAPIs(authRouter *auth.RouterDef) {
  133. authRouter.HandleFunc("/api/gan/network/info", ganManager.HandleGetNodeID)
  134. authRouter.HandleFunc("/api/gan/network/add", ganManager.HandleAddNetwork)
  135. authRouter.HandleFunc("/api/gan/network/remove", ganManager.HandleRemoveNetwork)
  136. authRouter.HandleFunc("/api/gan/network/list", ganManager.HandleListNetwork)
  137. authRouter.HandleFunc("/api/gan/network/name", ganManager.HandleNetworkNaming)
  138. //authRouter.HandleFunc("/api/gan/network/detail", ganManager.HandleNetworkDetails)
  139. authRouter.HandleFunc("/api/gan/network/setRange", ganManager.HandleSetRanges)
  140. authRouter.HandleFunc("/api/gan/network/join", ganManager.HandleServerJoinNetwork)
  141. authRouter.HandleFunc("/api/gan/network/leave", ganManager.HandleServerLeaveNetwork)
  142. authRouter.HandleFunc("/api/gan/members/list", ganManager.HandleMemberList)
  143. authRouter.HandleFunc("/api/gan/members/ip", ganManager.HandleMemberIP)
  144. authRouter.HandleFunc("/api/gan/members/name", ganManager.HandleMemberNaming)
  145. authRouter.HandleFunc("/api/gan/members/authorize", ganManager.HandleMemberAuthorization)
  146. authRouter.HandleFunc("/api/gan/members/delete", ganManager.HandleMemberDelete)
  147. }
  148. // Register the APIs for Stream (TCP / UDP) Proxy management functions
  149. func RegisterStreamProxyAPIs(authRouter *auth.RouterDef) {
  150. authRouter.HandleFunc("/api/streamprox/config/add", streamProxyManager.HandleAddProxyConfig)
  151. authRouter.HandleFunc("/api/streamprox/config/edit", streamProxyManager.HandleEditProxyConfigs)
  152. authRouter.HandleFunc("/api/streamprox/config/list", streamProxyManager.HandleListConfigs)
  153. authRouter.HandleFunc("/api/streamprox/config/start", streamProxyManager.HandleStartProxy)
  154. authRouter.HandleFunc("/api/streamprox/config/stop", streamProxyManager.HandleStopProxy)
  155. authRouter.HandleFunc("/api/streamprox/config/delete", streamProxyManager.HandleRemoveProxy)
  156. authRouter.HandleFunc("/api/streamprox/config/status", streamProxyManager.HandleGetProxyStatus)
  157. }
  158. // Register the APIs for mDNS service management functions
  159. func RegisterMDNSAPIs(authRouter *auth.RouterDef) {
  160. authRouter.HandleFunc("/api/mdns/list", HandleMdnsListing)
  161. authRouter.HandleFunc("/api/mdns/discover", HandleMdnsScanning)
  162. }
  163. // Register the APIs for ACME and Auto Renewer management functions
  164. func RegisterACMEAndAutoRenewerAPIs(authRouter *auth.RouterDef) {
  165. /* ACME Core */
  166. authRouter.HandleFunc("/api/acme/listExpiredDomains", acmeHandler.HandleGetExpiredDomains)
  167. authRouter.HandleFunc("/api/acme/obtainCert", AcmeCheckAndHandleRenewCertificate)
  168. /* Auto Renewer */
  169. authRouter.HandleFunc("/api/acme/autoRenew/enable", acmeAutoRenewer.HandleAutoRenewEnable)
  170. authRouter.HandleFunc("/api/acme/autoRenew/ca", HandleACMEPreferredCA)
  171. authRouter.HandleFunc("/api/acme/autoRenew/email", acmeAutoRenewer.HandleACMEEmail)
  172. authRouter.HandleFunc("/api/acme/autoRenew/setDomains", acmeAutoRenewer.HandleSetAutoRenewDomains)
  173. authRouter.HandleFunc("/api/acme/autoRenew/setEAB", acmeAutoRenewer.HanldeSetEAB)
  174. authRouter.HandleFunc("/api/acme/autoRenew/setDNS", acmeAutoRenewer.HandleSetDNS)
  175. authRouter.HandleFunc("/api/acme/autoRenew/listDomains", acmeAutoRenewer.HandleLoadAutoRenewDomains)
  176. authRouter.HandleFunc("/api/acme/autoRenew/renewPolicy", acmeAutoRenewer.HandleRenewPolicy)
  177. authRouter.HandleFunc("/api/acme/autoRenew/renewNow", acmeAutoRenewer.HandleRenewNow)
  178. authRouter.HandleFunc("/api/acme/dns/providers", acmedns.HandleServeProvidersJson)
  179. /* ACME Wizard */
  180. authRouter.HandleFunc("/api/acme/wizard", acmewizard.HandleGuidedStepCheck)
  181. }
  182. // Register the APIs for Static Web Server management functions
  183. func RegisterStaticWebServerAPIs(authRouter *auth.RouterDef) {
  184. /* Static Web Server Controls */
  185. authRouter.HandleFunc("/api/webserv/status", staticWebServer.HandleGetStatus)
  186. authRouter.HandleFunc("/api/webserv/start", staticWebServer.HandleStartServer)
  187. authRouter.HandleFunc("/api/webserv/stop", staticWebServer.HandleStopServer)
  188. authRouter.HandleFunc("/api/webserv/setPort", HandleStaticWebServerPortChange)
  189. authRouter.HandleFunc("/api/webserv/setDirList", staticWebServer.SetEnableDirectoryListing)
  190. /* File Manager */
  191. if *allowWebFileManager {
  192. authRouter.HandleFunc("/api/fs/list", staticWebServer.FileManager.HandleList)
  193. authRouter.HandleFunc("/api/fs/upload", staticWebServer.FileManager.HandleUpload)
  194. authRouter.HandleFunc("/api/fs/download", staticWebServer.FileManager.HandleDownload)
  195. authRouter.HandleFunc("/api/fs/newFolder", staticWebServer.FileManager.HandleNewFolder)
  196. authRouter.HandleFunc("/api/fs/copy", staticWebServer.FileManager.HandleFileCopy)
  197. authRouter.HandleFunc("/api/fs/move", staticWebServer.FileManager.HandleFileMove)
  198. authRouter.HandleFunc("/api/fs/properties", staticWebServer.FileManager.HandleFileProperties)
  199. authRouter.HandleFunc("/api/fs/del", staticWebServer.FileManager.HandleFileDelete)
  200. }
  201. }
  202. // Register the APIs for Network Utilities functions
  203. func RegisterNetworkUtilsAPIs(authRouter *auth.RouterDef) {
  204. authRouter.HandleFunc("/api/tools/ipscan", ipscan.HandleIpScan)
  205. authRouter.HandleFunc("/api/tools/portscan", ipscan.HandleScanPort)
  206. authRouter.HandleFunc("/api/tools/traceroute", netutils.HandleTraceRoute)
  207. authRouter.HandleFunc("/api/tools/ping", netutils.HandlePing)
  208. authRouter.HandleFunc("/api/tools/whois", netutils.HandleWhois)
  209. authRouter.HandleFunc("/api/tools/webssh", HandleCreateProxySession)
  210. authRouter.HandleFunc("/api/tools/websshSupported", HandleWebSshSupportCheck)
  211. authRouter.HandleFunc("/api/tools/wol", HandleWakeOnLan)
  212. authRouter.HandleFunc("/api/tools/smtp/get", HandleSMTPGet)
  213. authRouter.HandleFunc("/api/tools/smtp/set", HandleSMTPSet)
  214. authRouter.HandleFunc("/api/tools/smtp/admin", HandleAdminEmailGet)
  215. authRouter.HandleFunc("/api/tools/smtp/test", HandleTestEmailSend)
  216. authRouter.HandleFunc("/api/tools/fwdproxy/enable", forwardProxy.HandleToogle)
  217. authRouter.HandleFunc("/api/tools/fwdproxy/port", forwardProxy.HandlePort)
  218. }
  219. // Register the APIs for Auth functions, due to scoping issue some functions are defined here
  220. func RegisterAuthAPIs(requireAuth bool, targetMux *http.ServeMux) {
  221. targetMux.HandleFunc("/api/auth/login", authAgent.HandleLogin)
  222. targetMux.HandleFunc("/api/auth/logout", authAgent.HandleLogout)
  223. targetMux.HandleFunc("/api/auth/checkLogin", func(w http.ResponseWriter, r *http.Request) {
  224. if requireAuth {
  225. authAgent.CheckLogin(w, r)
  226. } else {
  227. utils.SendJSONResponse(w, "true")
  228. }
  229. })
  230. targetMux.HandleFunc("/api/auth/username", func(w http.ResponseWriter, r *http.Request) {
  231. username, err := authAgent.GetUserName(w, r)
  232. if err != nil {
  233. http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
  234. return
  235. }
  236. js, _ := json.Marshal(username)
  237. utils.SendJSONResponse(w, string(js))
  238. })
  239. targetMux.HandleFunc("/api/auth/userCount", func(w http.ResponseWriter, r *http.Request) {
  240. js, _ := json.Marshal(authAgent.GetUserCounts())
  241. utils.SendJSONResponse(w, string(js))
  242. })
  243. targetMux.HandleFunc("/api/auth/register", func(w http.ResponseWriter, r *http.Request) {
  244. if authAgent.GetUserCounts() == 0 {
  245. //Allow register root admin
  246. authAgent.HandleRegisterWithoutEmail(w, r, func(username, reserved string) {})
  247. } else {
  248. //This function is disabled
  249. utils.SendErrorResponse(w, "Root management account already exists")
  250. }
  251. })
  252. targetMux.HandleFunc("/api/auth/changePassword", func(w http.ResponseWriter, r *http.Request) {
  253. username, err := authAgent.GetUserName(w, r)
  254. if err != nil {
  255. http.Error(w, "401 - Unauthorized", http.StatusUnauthorized)
  256. return
  257. }
  258. oldPassword, err := utils.PostPara(r, "oldPassword")
  259. if err != nil {
  260. utils.SendErrorResponse(w, "empty current password")
  261. return
  262. }
  263. newPassword, err := utils.PostPara(r, "newPassword")
  264. if err != nil {
  265. utils.SendErrorResponse(w, "empty new password")
  266. return
  267. }
  268. confirmPassword, _ := utils.PostPara(r, "confirmPassword")
  269. if newPassword != confirmPassword {
  270. utils.SendErrorResponse(w, "confirm password not match")
  271. return
  272. }
  273. //Check if the old password correct
  274. oldPasswordCorrect, _ := authAgent.ValidateUsernameAndPasswordWithReason(username, oldPassword)
  275. if !oldPasswordCorrect {
  276. utils.SendErrorResponse(w, "Invalid current password given")
  277. return
  278. }
  279. //Change the password of the root user
  280. authAgent.UnregisterUser(username)
  281. authAgent.CreateUserAccount(username, newPassword, "")
  282. })
  283. }
  284. /* Register all the APIs */
  285. func initAPIs(targetMux *http.ServeMux) {
  286. authRouter := auth.NewManagedHTTPRouter(auth.RouterOption{
  287. AuthAgent: authAgent,
  288. RequireAuth: requireAuth,
  289. TargetMux: targetMux,
  290. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  291. http.Error(w, "401 - Unauthorized", http.StatusUnauthorized)
  292. },
  293. })
  294. //Register the standard web services urls
  295. fs := http.FileServer(http.FS(webres))
  296. if DEVELOPMENT_BUILD {
  297. fs = http.FileServer(http.Dir("web/"))
  298. }
  299. //Add a layer of middleware for advance control
  300. advHandler := FSHandler(fs)
  301. targetMux.Handle("/", advHandler)
  302. //Register the APIs
  303. RegisterAuthAPIs(requireAuth, targetMux)
  304. RegisterHTTPProxyAPIs(authRouter)
  305. RegisterTLSAPIs(authRouter)
  306. RegisterAuthenticationHandlerAPIs(authRouter)
  307. RegisterRedirectionAPIs(authRouter)
  308. RegisterAccessRuleAPIs(authRouter)
  309. RegisterPathRuleAPIs(authRouter)
  310. RegisterStatisticalAPIs(authRouter)
  311. RegisterGANAPIs(authRouter)
  312. RegisterStreamProxyAPIs(authRouter)
  313. RegisterMDNSAPIs(authRouter)
  314. RegisterNetworkUtilsAPIs(authRouter)
  315. RegisterACMEAndAutoRenewerAPIs(authRouter)
  316. RegisterStaticWebServerAPIs(authRouter)
  317. //Account Reset
  318. targetMux.HandleFunc("/api/account/reset", HandleAdminAccountResetEmail)
  319. targetMux.HandleFunc("/api/account/new", HandleNewPasswordSetup)
  320. //Docker UX Optimizations
  321. authRouter.HandleFunc("/api/docker/available", DockerUXOptimizer.HandleDockerAvailable)
  322. authRouter.HandleFunc("/api/docker/containers", DockerUXOptimizer.HandleDockerContainersList)
  323. //Others
  324. targetMux.HandleFunc("/api/info/x", HandleZoraxyInfo)
  325. authRouter.HandleFunc("/api/info/geoip", HandleGeoIpLookup)
  326. authRouter.HandleFunc("/api/conf/export", ExportConfigAsZip)
  327. authRouter.HandleFunc("/api/conf/import", ImportConfigFromZip)
  328. authRouter.HandleFunc("/api/log/list", LogViewer.HandleListLog)
  329. authRouter.HandleFunc("/api/log/read", LogViewer.HandleReadLog)
  330. //Debug
  331. authRouter.HandleFunc("/api/info/pprof", pprof.Index)
  332. }