NewHTTPServer new http server.
(debug bool, staticRouter *router.StaticRouter, answerRouter *router.AnswerAPIRouter, swaggerRouter *router.SwaggerRouter, viewRouter *router.UIRouter, authUserMiddleware *middleware.AuthUserMiddleware, avatarMiddleware *middleware.AvatarMiddleware, shortIDMiddleware *middleware.ShortIDMiddleware, templateRouter *router.TemplateRouter, pluginAPIRouter *router.PluginAPIRouter, uiConf *UI, )
| 35 | |
| 36 | // NewHTTPServer new http server. |
| 37 | func NewHTTPServer(debug bool, |
| 38 | staticRouter *router.StaticRouter, |
| 39 | answerRouter *router.AnswerAPIRouter, |
| 40 | swaggerRouter *router.SwaggerRouter, |
| 41 | viewRouter *router.UIRouter, |
| 42 | authUserMiddleware *middleware.AuthUserMiddleware, |
| 43 | avatarMiddleware *middleware.AvatarMiddleware, |
| 44 | shortIDMiddleware *middleware.ShortIDMiddleware, |
| 45 | templateRouter *router.TemplateRouter, |
| 46 | pluginAPIRouter *router.PluginAPIRouter, |
| 47 | uiConf *UI, |
| 48 | ) *gin.Engine { |
| 49 | if debug { |
| 50 | gin.SetMode(gin.DebugMode) |
| 51 | } else { |
| 52 | gin.SetMode(gin.ReleaseMode) |
| 53 | } |
| 54 | r := gin.New() |
| 55 | r.Use(func(ctx *gin.Context) { |
| 56 | if strings.Contains(ctx.Request.URL.Path, "/chat/completions") { |
| 57 | return |
| 58 | } |
| 59 | brotli.Brotli(brotli.DefaultCompression)(ctx) |
| 60 | }, middleware.ExtractAndSetAcceptLanguage, shortIDMiddleware.SetShortIDFlag()) |
| 61 | r.GET("/healthz", func(ctx *gin.Context) { ctx.String(200, "OK") }) |
| 62 | |
| 63 | templatePath := os.Getenv("ANSWER_TEMPLATE_PATH") |
| 64 | if templatePath != "" { |
| 65 | r.LoadHTMLGlob(templatePath) |
| 66 | } else { |
| 67 | html, _ := fs.Sub(ui.Template, "template") |
| 68 | htmlTemplate := template.Must(template.New("").Funcs(funcMap).ParseFS(html, "*")) |
| 69 | r.SetHTMLTemplate(htmlTemplate) |
| 70 | } |
| 71 | r.Use(middleware.HeadersByRequestURI()) |
| 72 | viewRouter.Register(r, uiConf.BaseURL) |
| 73 | |
| 74 | rootGroup := r.Group("") |
| 75 | swaggerRouter.Register(rootGroup) |
| 76 | static := r.Group(uiConf.APIBaseURL) |
| 77 | static.Use(avatarMiddleware.AvatarThumb(), authUserMiddleware.VisitAuth()) |
| 78 | staticRouter.RegisterStaticRouter(static) |
| 79 | |
| 80 | // The route must be available without logging in |
| 81 | mustUnAuthV1 := r.Group(uiConf.APIBaseURL + "/answer/api/v1") |
| 82 | answerRouter.RegisterMustUnAuthAnswerAPIRouter(authUserMiddleware, mustUnAuthV1) |
| 83 | |
| 84 | // register api that no need to login |
| 85 | unAuthV1 := r.Group(uiConf.APIBaseURL + "/answer/api/v1") |
| 86 | unAuthV1.Use(authUserMiddleware.Auth(), authUserMiddleware.EjectUserBySiteInfo()) |
| 87 | answerRouter.RegisterUnAuthAnswerAPIRouter(unAuthV1) |
| 88 | |
| 89 | // register api that must be authenticated but no need to check account status |
| 90 | authWithoutStatusV1 := r.Group(uiConf.APIBaseURL + "/answer/api/v1") |
| 91 | authWithoutStatusV1.Use(authUserMiddleware.MustAuthWithoutAccountAvailable()) |
| 92 | answerRouter.RegisterAuthUserWithAnyStatusAnswerAPIRouter(authWithoutStatusV1) |
| 93 | |
| 94 | // register api that must be authenticated |
no test coverage detected