| 15 | ) |
| 16 | |
| 17 | func InitV1Router() http.Handler { |
| 18 | e := echo.New() |
| 19 | |
| 20 | e.Use((echo_middleware.CORSWithConfig(echo_middleware.CORSConfig{ |
| 21 | AllowOrigins: []string{"*"}, |
| 22 | AllowMethods: []string{echo.POST, echo.GET, echo.OPTIONS, echo.PUT, echo.DELETE}, |
| 23 | AllowHeaders: []string{echo.HeaderAuthorization, echo.HeaderContentLength, echo.HeaderXCSRFToken, echo.HeaderContentType, echo.HeaderAccessControlAllowOrigin, echo.HeaderAccessControlAllowHeaders, echo.HeaderAccessControlAllowMethods, echo.HeaderConnection, echo.HeaderOrigin, echo.HeaderXRequestedWith}, |
| 24 | ExposeHeaders: []string{echo.HeaderContentLength, echo.HeaderAccessControlAllowOrigin, echo.HeaderAccessControlAllowHeaders}, |
| 25 | MaxAge: 172800, |
| 26 | AllowCredentials: true, |
| 27 | }))) |
| 28 | e.Use(echo_middleware.Gzip()) |
| 29 | e.Use(echo_middleware.Recover()) |
| 30 | e.Use(echo_middleware.Logger()) |
| 31 | |
| 32 | e.GET("/v1/sys/debug", v1.GetSystemConfigDebug) // //debug |
| 33 | |
| 34 | e.GET("/v1/sys/version/check", v1.GetSystemCheckVersion) |
| 35 | e.GET("/v1/sys/version/current", func(ctx echo.Context) error { |
| 36 | return ctx.String(200, common.VERSION) |
| 37 | }) |
| 38 | e.GET("/ping", func(ctx echo.Context) error { |
| 39 | return ctx.String(200, "pong") |
| 40 | }) |
| 41 | e.GET("/v1/recover/:type", v1.GetRecoverStorage) |
| 42 | v1Group := e.Group("/v1") |
| 43 | // e.Any("/v1/test", v1.CheckNetwork) |
| 44 | v1Group.Use(echo_middleware.JWTWithConfig(echo_middleware.JWTConfig{ |
| 45 | Skipper: func(c echo.Context) bool { |
| 46 | return c.RealIP() == "::1" || c.RealIP() == "127.0.0.1" |
| 47 | }, |
| 48 | ParseTokenFunc: func(token string, c echo.Context) (interface{}, error) { |
| 49 | valid, claims, err := jwt.Validate(token, func() (*ecdsa.PublicKey, error) { return external.GetPublicKey(config.CommonInfo.RuntimePath) }) |
| 50 | if err != nil || !valid { |
| 51 | return nil, echo.ErrUnauthorized |
| 52 | } |
| 53 | |
| 54 | c.Request().Header.Set("user_id", strconv.Itoa(claims.ID)) |
| 55 | |
| 56 | return claims, nil |
| 57 | }, |
| 58 | TokenLookupFuncs: []echo_middleware.ValuesExtractor{ |
| 59 | func(ctx echo.Context) ([]string, error) { |
| 60 | if len(ctx.Request().Header.Get(echo.HeaderAuthorization)) > 0 { |
| 61 | return []string{ctx.Request().Header.Get(echo.HeaderAuthorization)}, nil |
| 62 | } |
| 63 | return []string{ctx.QueryParam("token")}, nil |
| 64 | }, |
| 65 | }, |
| 66 | })) |
| 67 | { |
| 68 | |
| 69 | v1SysGroup := v1Group.Group("/sys") |
| 70 | v1SysGroup.Use() |
| 71 | { |
| 72 | v1SysGroup.GET("/version", v1.GetSystemCheckVersion) // version/check |
| 73 | |
| 74 | v1SysGroup.POST("/update", v1.SystemUpdate) |