From 6603d3ea5a54647e8eda8ec253835eb7a36e5eb2 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 28 Jul 2024 02:11:02 +0900 Subject: backend: openapi --- backend/api/generated.go | 256 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 backend/api/generated.go (limited to 'backend/api/generated.go') diff --git a/backend/api/generated.go b/backend/api/generated.go new file mode 100644 index 0000000..23811ca --- /dev/null +++ b/backend/api/generated.go @@ -0,0 +1,256 @@ +// Package api provides primitives to interact with the openapi HTTP API. +// +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.3.0 DO NOT EDIT. +package api + +import ( + "bytes" + "compress/gzip" + "context" + "encoding/base64" + "encoding/json" + "fmt" + "net/http" + "net/url" + "path" + "strings" + + "github.com/getkin/kin-openapi/openapi3" + "github.com/labstack/echo/v4" + strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" +) + +// JwtPayload defines model for JwtPayload. +type JwtPayload struct { + DisplayUsername string `json:"display_username"` + IconPath *string `json:"icon_path"` + IsAdmin bool `json:"is_admin"` + UserId float32 `json:"user_id"` + Username string `json:"username"` +} + +// PostApiLoginJSONBody defines parameters for PostApiLogin. +type PostApiLoginJSONBody struct { + Password string `json:"password"` + Username string `json:"username"` +} + +// PostApiLoginJSONRequestBody defines body for PostApiLogin for application/json ContentType. +type PostApiLoginJSONRequestBody PostApiLoginJSONBody + +// ServerInterface represents all server handlers. +type ServerInterface interface { + // User login + // (POST /api/login) + PostApiLogin(ctx echo.Context) error +} + +// ServerInterfaceWrapper converts echo contexts to parameters. +type ServerInterfaceWrapper struct { + Handler ServerInterface +} + +// PostApiLogin converts echo context to params. +func (w *ServerInterfaceWrapper) PostApiLogin(ctx echo.Context) error { + var err error + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.PostApiLogin(ctx) + return err +} + +// This is a simple interface which specifies echo.Route addition functions which +// are present on both echo.Echo and echo.Group, since we want to allow using +// either of them for path registration +type EchoRouter interface { + CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + DELETE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + GET(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + HEAD(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + OPTIONS(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + PATCH(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + POST(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + PUT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route + TRACE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route +} + +// RegisterHandlers adds each server route to the EchoRouter. +func RegisterHandlers(router EchoRouter, si ServerInterface) { + RegisterHandlersWithBaseURL(router, si, "") +} + +// Registers handlers, and prepends BaseURL to the paths, so that the paths +// can be served under a prefix. +func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL string) { + + wrapper := ServerInterfaceWrapper{ + Handler: si, + } + + router.POST(baseURL+"/api/login", wrapper.PostApiLogin) + +} + +type PostApiLoginRequestObject struct { + Body *PostApiLoginJSONRequestBody +} + +type PostApiLoginResponseObject interface { + VisitPostApiLoginResponse(w http.ResponseWriter) error +} + +type PostApiLogin200JSONResponse struct { + Token string `json:"token"` +} + +func (response PostApiLogin200JSONResponse) VisitPostApiLoginResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type PostApiLogin401JSONResponse struct { + Message string `json:"message"` +} + +func (response PostApiLogin401JSONResponse) VisitPostApiLoginResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(401) + + return json.NewEncoder(w).Encode(response) +} + +// StrictServerInterface represents all server handlers. +type StrictServerInterface interface { + // User login + // (POST /api/login) + PostApiLogin(ctx context.Context, request PostApiLoginRequestObject) (PostApiLoginResponseObject, error) +} + +type StrictHandlerFunc = strictecho.StrictEchoHandlerFunc +type StrictMiddlewareFunc = strictecho.StrictEchoMiddlewareFunc + +func NewStrictHandler(ssi StrictServerInterface, middlewares []StrictMiddlewareFunc) ServerInterface { + return &strictHandler{ssi: ssi, middlewares: middlewares} +} + +type strictHandler struct { + ssi StrictServerInterface + middlewares []StrictMiddlewareFunc +} + +// PostApiLogin operation middleware +func (sh *strictHandler) PostApiLogin(ctx echo.Context) error { + var request PostApiLoginRequestObject + + var body PostApiLoginJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.PostApiLogin(ctx.Request().Context(), request.(PostApiLoginRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "PostApiLogin") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(PostApiLoginResponseObject); ok { + return validResponse.VisitPostApiLoginResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// Base64 encoded, gzipped, json marshaled Swagger object +var swaggerSpec = []string{ + + "H4sIAAAAAAAC/6RSwY7aQAz9lcjnKAToKTeqXlj1gFT1VFXISQwMndjT8WTZaJV/ryYpAQrSVoIDEOf5", + "2c/vvUMljRMmDgrFO2h1oAaHvy+nsMHOCtbxyXlx5IOh4V1t1Fnstq2SZ2wo1ugNG2cJCniRAydfhCCF", + "0LlY0eAN76FPwVTCW4fhcNsyMw3uSWdHOXB2dHtIgVtrsYxvg2/pEZVusW4M3zDt0OoFXIpYQo7ouOrW", + "1Dfg+WI5QbltSvJn5L2ouNm9oD4FT79b46mG4sc05IokvT/W1eo/J0Ypj1QF6COl4Z3E6cGEYfbKlhi8", + "qCaGQySxyYnKZLVZQwqv5NUIQwF5Ns/yqEAcMToDBSyzPMshhXjxwbkZOjOzsh/P5kRD/I3eYjDC6xoK", + "2IiGlTNfB9QokDR8lrqL2Eo4EA9t6Jw11dA4O6rwJUH3kXGoehJ/a8BUnS+Wj9LypBV/rz2NfnztS1cM", + "2lBQJ6zj3os8f0J1kF90G1B4i5/s6vtDKSPJ4+Vr0sobF8YEfGurilR3rbVdgm04EIe4KtXxmp/y+RNS", + "GlLF/T9WrPkVramTylMdZ6HVD+Wcif5H0Jn/7GYiPpnsjHBtmwZ9BwV8V/LJmOy+7/s/AQAA//8GnrqA", + "2gQAAA==", +} + +// GetSwagger returns the content of the embedded swagger specification file +// or error if failed to decode +func decodeSpec() ([]byte, error) { + zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) + if err != nil { + return nil, fmt.Errorf("error base64 decoding spec: %w", err) + } + zr, err := gzip.NewReader(bytes.NewReader(zipped)) + if err != nil { + return nil, fmt.Errorf("error decompressing spec: %w", err) + } + var buf bytes.Buffer + _, err = buf.ReadFrom(zr) + if err != nil { + return nil, fmt.Errorf("error decompressing spec: %w", err) + } + + return buf.Bytes(), nil +} + +var rawSpec = decodeSpecCached() + +// a naive cached of a decoded swagger spec +func decodeSpecCached() func() ([]byte, error) { + data, err := decodeSpec() + return func() ([]byte, error) { + return data, err + } +} + +// Constructs a synthetic filesystem for resolving external references when loading openapi specifications. +func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) { + res := make(map[string]func() ([]byte, error)) + if len(pathToFile) > 0 { + res[pathToFile] = rawSpec + } + + return res +} + +// GetSwagger returns the Swagger specification corresponding to the generated code +// in this file. The external references of Swagger specification are resolved. +// The logic of resolving external references is tightly connected to "import-mapping" feature. +// Externally referenced files must be embedded in the corresponding golang packages. +// Urls can be supported but this task was out of the scope. +func GetSwagger() (swagger *openapi3.T, err error) { + resolvePath := PathToRawSpec("") + + loader := openapi3.NewLoader() + loader.IsExternalRefsAllowed = true + loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) { + pathToFile := url.String() + pathToFile = path.Clean(pathToFile) + getSpec, ok := resolvePath[pathToFile] + if !ok { + err1 := fmt.Errorf("path not found: %s", pathToFile) + return nil, err1 + } + return getSpec() + } + var specData []byte + specData, err = rawSpec() + if err != nil { + return + } + swagger, err = loader.LoadFromData(specData) + if err != nil { + return + } + return +} -- cgit v1.2.3-70-g09d2