api.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  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/edit", handleEditRedirectionRule)
  84. authRouter.HandleFunc("/api/redirect/regex", handleToggleRedirectRegexpSupport)
  85. }
  86. // Register the APIs for access rules management functions
  87. func RegisterAccessRuleAPIs(authRouter *auth.RouterDef) {
  88. /* Access Rules Settings & Status */
  89. authRouter.HandleFunc("/api/access/list", handleListAccessRules)
  90. authRouter.HandleFunc("/api/access/attach", handleAttachRuleToHost)
  91. authRouter.HandleFunc("/api/access/create", handleCreateAccessRule)
  92. authRouter.HandleFunc("/api/access/remove", handleRemoveAccessRule)
  93. authRouter.HandleFunc("/api/access/update", handleUpadateAccessRule)
  94. /* Blacklist */
  95. authRouter.HandleFunc("/api/blacklist/list", handleListBlacklisted)
  96. authRouter.HandleFunc("/api/blacklist/country/add", handleCountryBlacklistAdd)
  97. authRouter.HandleFunc("/api/blacklist/country/remove", handleCountryBlacklistRemove)
  98. authRouter.HandleFunc("/api/blacklist/ip/add", handleIpBlacklistAdd)
  99. authRouter.HandleFunc("/api/blacklist/ip/remove", handleIpBlacklistRemove)
  100. authRouter.HandleFunc("/api/blacklist/enable", handleBlacklistEnable)
  101. /* Whitelist */
  102. authRouter.HandleFunc("/api/whitelist/list", handleListWhitelisted)
  103. authRouter.HandleFunc("/api/whitelist/country/add", handleCountryWhitelistAdd)
  104. authRouter.HandleFunc("/api/whitelist/country/remove", handleCountryWhitelistRemove)
  105. authRouter.HandleFunc("/api/whitelist/ip/add", handleIpWhitelistAdd)
  106. authRouter.HandleFunc("/api/whitelist/ip/remove", handleIpWhitelistRemove)
  107. authRouter.HandleFunc("/api/whitelist/enable", handleWhitelistEnable)
  108. }
  109. // Register the APIs for path blocking rules management functions, WIP
  110. func RegisterPathRuleAPIs(authRouter *auth.RouterDef) {
  111. authRouter.HandleFunc("/api/pathrule/add", pathRuleHandler.HandleAddBlockingPath)
  112. authRouter.HandleFunc("/api/pathrule/list", pathRuleHandler.HandleListBlockingPath)
  113. authRouter.HandleFunc("/api/pathrule/remove", pathRuleHandler.HandleRemoveBlockingPath)
  114. }
  115. // Register the APIs statistic anlysis and uptime monitoring functions
  116. func RegisterStatisticalAPIs(authRouter *auth.RouterDef) {
  117. /* Traffic Summary */
  118. authRouter.HandleFunc("/api/stats/summary", statisticCollector.HandleTodayStatLoad)
  119. authRouter.HandleFunc("/api/stats/countries", HandleCountryDistrSummary)
  120. authRouter.HandleFunc("/api/stats/netstat", netstatBuffers.HandleGetNetworkInterfaceStats)
  121. authRouter.HandleFunc("/api/stats/netstatgraph", netstatBuffers.HandleGetBufferedNetworkInterfaceStats)
  122. authRouter.HandleFunc("/api/stats/listnic", netstat.HandleListNetworkInterfaces)
  123. /* Zoraxy Analytic */
  124. authRouter.HandleFunc("/api/analytic/list", AnalyticLoader.HandleSummaryList)
  125. authRouter.HandleFunc("/api/analytic/load", AnalyticLoader.HandleLoadTargetDaySummary)
  126. authRouter.HandleFunc("/api/analytic/loadRange", AnalyticLoader.HandleLoadTargetRangeSummary)
  127. authRouter.HandleFunc("/api/analytic/exportRange", AnalyticLoader.HandleRangeExport)
  128. authRouter.HandleFunc("/api/analytic/resetRange", AnalyticLoader.HandleRangeReset)
  129. /* UpTime Monitor */
  130. authRouter.HandleFunc("/api/utm/list", HandleUptimeMonitorListing)
  131. }
  132. // Register the APIs for Global Area Network management functions, Will be moving to plugin soon
  133. func RegisterGANAPIs(authRouter *auth.RouterDef) {
  134. authRouter.HandleFunc("/api/gan/network/info", ganManager.HandleGetNodeID)
  135. authRouter.HandleFunc("/api/gan/network/add", ganManager.HandleAddNetwork)
  136. authRouter.HandleFunc("/api/gan/network/remove", ganManager.HandleRemoveNetwork)
  137. authRouter.HandleFunc("/api/gan/network/list", ganManager.HandleListNetwork)
  138. authRouter.HandleFunc("/api/gan/network/name", ganManager.HandleNetworkNaming)
  139. //authRouter.HandleFunc("/api/gan/network/detail", ganManager.HandleNetworkDetails)
  140. authRouter.HandleFunc("/api/gan/network/setRange", ganManager.HandleSetRanges)
  141. authRouter.HandleFunc("/api/gan/network/join", ganManager.HandleServerJoinNetwork)
  142. authRouter.HandleFunc("/api/gan/network/leave", ganManager.HandleServerLeaveNetwork)
  143. authRouter.HandleFunc("/api/gan/members/list", ganManager.HandleMemberList)
  144. authRouter.HandleFunc("/api/gan/members/ip", ganManager.HandleMemberIP)
  145. authRouter.HandleFunc("/api/gan/members/name", ganManager.HandleMemberNaming)
  146. authRouter.HandleFunc("/api/gan/members/authorize", ganManager.HandleMemberAuthorization)
  147. authRouter.HandleFunc("/api/gan/members/delete", ganManager.HandleMemberDelete)
  148. }
  149. // Register the APIs for Stream (TCP / UDP) Proxy management functions
  150. func RegisterStreamProxyAPIs(authRouter *auth.RouterDef) {
  151. authRouter.HandleFunc("/api/streamprox/config/add", streamProxyManager.HandleAddProxyConfig)
  152. authRouter.HandleFunc("/api/streamprox/config/edit", streamProxyManager.HandleEditProxyConfigs)
  153. authRouter.HandleFunc("/api/streamprox/config/list", streamProxyManager.HandleListConfigs)
  154. authRouter.HandleFunc("/api/streamprox/config/start", streamProxyManager.HandleStartProxy)
  155. authRouter.HandleFunc("/api/streamprox/config/stop", streamProxyManager.HandleStopProxy)
  156. authRouter.HandleFunc("/api/streamprox/config/delete", streamProxyManager.HandleRemoveProxy)
  157. authRouter.HandleFunc("/api/streamprox/config/status", streamProxyManager.HandleGetProxyStatus)
  158. }
  159. // Register the APIs for mDNS service management functions
  160. func RegisterMDNSAPIs(authRouter *auth.RouterDef) {
  161. authRouter.HandleFunc("/api/mdns/list", HandleMdnsListing)
  162. authRouter.HandleFunc("/api/mdns/discover", HandleMdnsScanning)
  163. }
  164. // Register the APIs for ACME and Auto Renewer management functions
  165. func RegisterACMEAndAutoRenewerAPIs(authRouter *auth.RouterDef) {
  166. /* ACME Core */
  167. authRouter.HandleFunc("/api/acme/listExpiredDomains", acmeHandler.HandleGetExpiredDomains)
  168. authRouter.HandleFunc("/api/acme/obtainCert", AcmeCheckAndHandleRenewCertificate)
  169. /* Auto Renewer */
  170. authRouter.HandleFunc("/api/acme/autoRenew/enable", acmeAutoRenewer.HandleAutoRenewEnable)
  171. authRouter.HandleFunc("/api/acme/autoRenew/ca", HandleACMEPreferredCA)
  172. authRouter.HandleFunc("/api/acme/autoRenew/email", acmeAutoRenewer.HandleACMEEmail)
  173. authRouter.HandleFunc("/api/acme/autoRenew/setDomains", acmeAutoRenewer.HandleSetAutoRenewDomains)
  174. authRouter.HandleFunc("/api/acme/autoRenew/setEAB", acmeAutoRenewer.HanldeSetEAB)
  175. authRouter.HandleFunc("/api/acme/autoRenew/setDNS", acmeAutoRenewer.HandleSetDNS)
  176. authRouter.HandleFunc("/api/acme/autoRenew/listDomains", acmeAutoRenewer.HandleLoadAutoRenewDomains)
  177. authRouter.HandleFunc("/api/acme/autoRenew/renewPolicy", acmeAutoRenewer.HandleRenewPolicy)
  178. authRouter.HandleFunc("/api/acme/autoRenew/renewNow", acmeAutoRenewer.HandleRenewNow)
  179. authRouter.HandleFunc("/api/acme/dns/providers", acmedns.HandleServeProvidersJson)
  180. /* ACME Wizard */
  181. authRouter.HandleFunc("/api/acme/wizard", acmewizard.HandleGuidedStepCheck)
  182. }
  183. // Register the APIs for Static Web Server management functions
  184. func RegisterStaticWebServerAPIs(authRouter *auth.RouterDef) {
  185. /* Static Web Server Controls */
  186. authRouter.HandleFunc("/api/webserv/status", staticWebServer.HandleGetStatus)
  187. authRouter.HandleFunc("/api/webserv/start", staticWebServer.HandleStartServer)
  188. authRouter.HandleFunc("/api/webserv/stop", staticWebServer.HandleStopServer)
  189. authRouter.HandleFunc("/api/webserv/setPort", HandleStaticWebServerPortChange)
  190. authRouter.HandleFunc("/api/webserv/setDirList", staticWebServer.SetEnableDirectoryListing)
  191. /* File Manager */
  192. if *allowWebFileManager {
  193. authRouter.HandleFunc("/api/fs/list", staticWebServer.FileManager.HandleList)
  194. authRouter.HandleFunc("/api/fs/upload", staticWebServer.FileManager.HandleUpload)
  195. authRouter.HandleFunc("/api/fs/download", staticWebServer.FileManager.HandleDownload)
  196. authRouter.HandleFunc("/api/fs/newFolder", staticWebServer.FileManager.HandleNewFolder)
  197. authRouter.HandleFunc("/api/fs/copy", staticWebServer.FileManager.HandleFileCopy)
  198. authRouter.HandleFunc("/api/fs/move", staticWebServer.FileManager.HandleFileMove)
  199. authRouter.HandleFunc("/api/fs/properties", staticWebServer.FileManager.HandleFileProperties)
  200. authRouter.HandleFunc("/api/fs/del", staticWebServer.FileManager.HandleFileDelete)
  201. }
  202. }
  203. // Register the APIs for Network Utilities functions
  204. func RegisterNetworkUtilsAPIs(authRouter *auth.RouterDef) {
  205. authRouter.HandleFunc("/api/tools/ipscan", ipscan.HandleIpScan)
  206. authRouter.HandleFunc("/api/tools/portscan", ipscan.HandleScanPort)
  207. authRouter.HandleFunc("/api/tools/traceroute", netutils.HandleTraceRoute)
  208. authRouter.HandleFunc("/api/tools/ping", netutils.HandlePing)
  209. authRouter.HandleFunc("/api/tools/whois", netutils.HandleWhois)
  210. authRouter.HandleFunc("/api/tools/webssh", HandleCreateProxySession)
  211. authRouter.HandleFunc("/api/tools/websshSupported", HandleWebSshSupportCheck)
  212. authRouter.HandleFunc("/api/tools/wol", HandleWakeOnLan)
  213. authRouter.HandleFunc("/api/tools/smtp/get", HandleSMTPGet)
  214. authRouter.HandleFunc("/api/tools/smtp/set", HandleSMTPSet)
  215. authRouter.HandleFunc("/api/tools/smtp/admin", HandleAdminEmailGet)
  216. authRouter.HandleFunc("/api/tools/smtp/test", HandleTestEmailSend)
  217. authRouter.HandleFunc("/api/tools/fwdproxy/enable", forwardProxy.HandleToogle)
  218. authRouter.HandleFunc("/api/tools/fwdproxy/port", forwardProxy.HandlePort)
  219. }
  220. // Register the APIs for Auth functions, due to scoping issue some functions are defined here
  221. func RegisterAuthAPIs(requireAuth bool, targetMux *http.ServeMux) {
  222. targetMux.HandleFunc("/api/auth/login", authAgent.HandleLogin)
  223. targetMux.HandleFunc("/api/auth/logout", authAgent.HandleLogout)
  224. targetMux.HandleFunc("/api/auth/checkLogin", func(w http.ResponseWriter, r *http.Request) {
  225. if requireAuth {
  226. authAgent.CheckLogin(w, r)
  227. } else {
  228. utils.SendJSONResponse(w, "true")
  229. }
  230. })
  231. targetMux.HandleFunc("/api/auth/username", func(w http.ResponseWriter, r *http.Request) {
  232. username, err := authAgent.GetUserName(w, r)
  233. if err != nil {
  234. http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
  235. return
  236. }
  237. js, _ := json.Marshal(username)
  238. utils.SendJSONResponse(w, string(js))
  239. })
  240. targetMux.HandleFunc("/api/auth/userCount", func(w http.ResponseWriter, r *http.Request) {
  241. js, _ := json.Marshal(authAgent.GetUserCounts())
  242. utils.SendJSONResponse(w, string(js))
  243. })
  244. targetMux.HandleFunc("/api/auth/register", func(w http.ResponseWriter, r *http.Request) {
  245. if authAgent.GetUserCounts() == 0 {
  246. //Allow register root admin
  247. authAgent.HandleRegisterWithoutEmail(w, r, func(username, reserved string) {})
  248. } else {
  249. //This function is disabled
  250. utils.SendErrorResponse(w, "Root management account already exists")
  251. }
  252. })
  253. targetMux.HandleFunc("/api/auth/changePassword", func(w http.ResponseWriter, r *http.Request) {
  254. username, err := authAgent.GetUserName(w, r)
  255. if err != nil {
  256. http.Error(w, "401 - Unauthorized", http.StatusUnauthorized)
  257. return
  258. }
  259. oldPassword, err := utils.PostPara(r, "oldPassword")
  260. if err != nil {
  261. utils.SendErrorResponse(w, "empty current password")
  262. return
  263. }
  264. newPassword, err := utils.PostPara(r, "newPassword")
  265. if err != nil {
  266. utils.SendErrorResponse(w, "empty new password")
  267. return
  268. }
  269. confirmPassword, _ := utils.PostPara(r, "confirmPassword")
  270. if newPassword != confirmPassword {
  271. utils.SendErrorResponse(w, "confirm password not match")
  272. return
  273. }
  274. //Check if the old password correct
  275. oldPasswordCorrect, _ := authAgent.ValidateUsernameAndPasswordWithReason(username, oldPassword)
  276. if !oldPasswordCorrect {
  277. utils.SendErrorResponse(w, "Invalid current password given")
  278. return
  279. }
  280. //Change the password of the root user
  281. authAgent.UnregisterUser(username)
  282. authAgent.CreateUserAccount(username, newPassword, "")
  283. })
  284. }
  285. /* Register all the APIs */
  286. func initAPIs(targetMux *http.ServeMux) {
  287. authRouter := auth.NewManagedHTTPRouter(auth.RouterOption{
  288. AuthAgent: authAgent,
  289. RequireAuth: requireAuth,
  290. TargetMux: targetMux,
  291. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  292. http.Error(w, "401 - Unauthorized", http.StatusUnauthorized)
  293. },
  294. })
  295. //Register the standard web services urls
  296. fs := http.FileServer(http.FS(webres))
  297. if DEVELOPMENT_BUILD {
  298. fs = http.FileServer(http.Dir("web/"))
  299. }
  300. //Add a layer of middleware for advance control
  301. advHandler := FSHandler(fs)
  302. targetMux.Handle("/", advHandler)
  303. //Register the APIs
  304. RegisterAuthAPIs(requireAuth, targetMux)
  305. RegisterHTTPProxyAPIs(authRouter)
  306. RegisterTLSAPIs(authRouter)
  307. RegisterAuthenticationHandlerAPIs(authRouter)
  308. RegisterRedirectionAPIs(authRouter)
  309. RegisterAccessRuleAPIs(authRouter)
  310. RegisterPathRuleAPIs(authRouter)
  311. RegisterStatisticalAPIs(authRouter)
  312. RegisterGANAPIs(authRouter)
  313. RegisterStreamProxyAPIs(authRouter)
  314. RegisterMDNSAPIs(authRouter)
  315. RegisterNetworkUtilsAPIs(authRouter)
  316. RegisterACMEAndAutoRenewerAPIs(authRouter)
  317. RegisterStaticWebServerAPIs(authRouter)
  318. //Account Reset
  319. targetMux.HandleFunc("/api/account/reset", HandleAdminAccountResetEmail)
  320. targetMux.HandleFunc("/api/account/new", HandleNewPasswordSetup)
  321. //Docker UX Optimizations
  322. authRouter.HandleFunc("/api/docker/available", DockerUXOptimizer.HandleDockerAvailable)
  323. authRouter.HandleFunc("/api/docker/containers", DockerUXOptimizer.HandleDockerContainersList)
  324. //Others
  325. targetMux.HandleFunc("/api/info/x", HandleZoraxyInfo)
  326. authRouter.HandleFunc("/api/info/geoip", HandleGeoIpLookup)
  327. authRouter.HandleFunc("/api/conf/export", ExportConfigAsZip)
  328. authRouter.HandleFunc("/api/conf/import", ImportConfigFromZip)
  329. authRouter.HandleFunc("/api/log/list", LogViewer.HandleListLog)
  330. authRouter.HandleFunc("/api/log/read", LogViewer.HandleReadLog)
  331. //Debug
  332. authRouter.HandleFunc("/api/info/pprof", pprof.Index)
  333. }