From 0a864aea41fa7c53943d4e2e995a283f93d84e34 Mon Sep 17 00:00:00 2001 From: Liujian <824010343@qq.com> Date: Fri, 17 Jan 2025 16:03:09 +0800 Subject: [PATCH] add openapi --- init.go | 1 + plugins/openapi/authorization.go | 18 +++++++++++++ plugins/openapi/check.go | 45 ++++++++++++++++++++++++++++++++ plugins/openapi/driver.go | 19 ++++++++++++++ plugins/openapi/plugin.go | 33 +++++++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 plugins/openapi/authorization.go create mode 100644 plugins/openapi/check.go create mode 100644 plugins/openapi/driver.go create mode 100644 plugins/openapi/plugin.go diff --git a/init.go b/init.go index 74592a3a..af7b6ca9 100644 --- a/init.go +++ b/init.go @@ -5,6 +5,7 @@ import ( _ "github.com/APIParkLab/APIPark/frontend" _ "github.com/APIParkLab/APIPark/gateway/apinto" _ "github.com/APIParkLab/APIPark/plugins/core" + _ "github.com/APIParkLab/APIPark/plugins/openapi" _ "github.com/APIParkLab/APIPark/plugins/permit" _ "github.com/APIParkLab/APIPark/plugins/publish_flow" _ "github.com/APIParkLab/APIPark/resources/locale" diff --git a/plugins/openapi/authorization.go b/plugins/openapi/authorization.go new file mode 100644 index 00000000..d6f37e8a --- /dev/null +++ b/plugins/openapi/authorization.go @@ -0,0 +1,18 @@ +package openapi + +import ( + "net/http" + + "github.com/eolinker/go-common/pm3" +) + +func (p *plugin) appAuthorizationApis() []pm3.Api { + return []pm3.Api{ + pm3.CreateApiWidthDoc(http.MethodPost, "/openapi/v1/app/authorization", []string{"context", "query:app", "body"}, []string{"authorization"}, p.authorizationController.AddAuthorization), + pm3.CreateApiWidthDoc(http.MethodPut, "/openapi/v1/app/authorization", []string{"context", "query:app", "query:authorization", "body"}, []string{"authorization"}, p.authorizationController.EditAuthorization), + pm3.CreateApiWidthDoc(http.MethodDelete, "/openapi/v1/app/authorization", []string{"context", "query:app", "query:authorization"}, nil, p.authorizationController.DeleteAuthorization), + pm3.CreateApiWidthDoc(http.MethodGet, "/openapi/v1/app/authorization", []string{"context", "query:app", "query:authorization"}, []string{"authorization"}, p.authorizationController.Info), + pm3.CreateApiWidthDoc(http.MethodGet, "/openapi/v1/app/authorizations", []string{"context", "query:app"}, []string{"authorizations"}, p.authorizationController.Authorizations), + pm3.CreateApiWidthDoc(http.MethodGet, "/openapi/v1/app/authorization/details", []string{"context", "query:app", "query:authorization"}, []string{"details"}, p.authorizationController.Detail), + } +} diff --git a/plugins/openapi/check.go b/plugins/openapi/check.go new file mode 100644 index 00000000..4f5f50f7 --- /dev/null +++ b/plugins/openapi/check.go @@ -0,0 +1,45 @@ +package openapi + +import ( + "strings" + + "github.com/eolinker/eosc/env" + + "github.com/gin-gonic/gin" +) + +var ( + defaultAPIKey = "37eb0ebf" + openCheck = newOpenapiCheck() +) + +type openapiCheck struct { + apikey string +} + +func newOpenapiCheck() *openapiCheck { + apikey, has := env.GetEnv("API_KEY") + if !has { + apikey = defaultAPIKey + } + return &openapiCheck{apikey: apikey} +} + +func (o *openapiCheck) Check(method string, path string) (bool, []gin.HandlerFunc) { + if strings.HasPrefix(path, "/openapi/") { + return true, []gin.HandlerFunc{o.Handler} + } + return false, nil +} + +func (o *openapiCheck) Sort() int { + return -1 +} + +func (o *openapiCheck) Handler(ginCtx *gin.Context) { + authorization := ginCtx.GetHeader("Authorization") + if authorization == "" { + ginCtx.AbortWithStatusJSON(403, gin.H{"code": -8, "msg": "invalid token", "success": "fail"}) + return + } +} diff --git a/plugins/openapi/driver.go b/plugins/openapi/driver.go new file mode 100644 index 00000000..9e9997a6 --- /dev/null +++ b/plugins/openapi/driver.go @@ -0,0 +1,19 @@ +package openapi + +import ( + "github.com/eolinker/go-common/autowire" + "github.com/eolinker/go-common/pm3" +) + +func init() { + pm3.Register("openapi", new(Driver)) +} + +type Driver struct { +} + +func (d *Driver) Create() (pm3.IPlugin, error) { + p := new(plugin) + autowire.Autowired(p) + return p, nil +} diff --git a/plugins/openapi/plugin.go b/plugins/openapi/plugin.go new file mode 100644 index 00000000..3082fb84 --- /dev/null +++ b/plugins/openapi/plugin.go @@ -0,0 +1,33 @@ +package openapi + +import ( + application_authorization "github.com/APIParkLab/APIPark/controller/application-authorization" + "github.com/eolinker/go-common/pm3" +) + +var ( + _ pm3.IPlugin = (*plugin)(nil) + _ pm3.IPluginMiddleware = (*plugin)(nil) +) + +type plugin struct { + apis []pm3.Api + authorizationController application_authorization.IAuthorizationController `autowired:""` +} + +func (p *plugin) Middlewares() []pm3.IMiddleware { + return []pm3.IMiddleware{ + openCheck, + } +} + +func (p *plugin) APis() []pm3.Api { + return p.apis +} + +func (p *plugin) Name() string { + return "openapi" +} +func (p *plugin) OnComplete() { + p.apis = p.appAuthorizationApis() +}