MCPcopy
hub / github.com/apache/answer / NewHTTPServer

Function NewHTTPServer

internal/base/server/http.go:37–122  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

35
36// NewHTTPServer new http server.
37func 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

Callers 1

initApplicationFunction · 0.92

Calls 15

HeadersByRequestURIFunction · 0.92
SetShortIDFlagMethod · 0.80
AvatarThumbMethod · 0.80
VisitAuthMethod · 0.80
RegisterStaticRouterMethod · 0.80
AuthMethod · 0.80
EjectUserBySiteInfoMethod · 0.80

Tested by

no test coverage detected