api.go 18 KB

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