Plugins: Support multiple HTTP methods in plugin.json routes (#39069)

* Fix: support comma-separated methods in plugin.json

* update docs about multiple methods per route
pull/39139/head
Serge Zaitsev 4 years ago committed by GitHub
parent e055ba3525
commit abfdfcf405
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      docs/sources/developers/plugins/metadata.md
  2. 2
      docs/sources/developers/plugins/plugin.schema.json
  3. 5
      pkg/api/app_routes.go

@ -184,17 +184,17 @@ For data source plugins. Proxy routes used for plugin authentication and adding
### Properties ### Properties
| Property | Type | Required | Description | | Property | Type | Required | Description |
| -------------- | ----------------------- | -------- | ------------------------------------------------------------------------------------------------------- | | -------------- | ----------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `body` | [object](#body) | No | For data source plugins. Route headers set the body content and length to the proxied request. | | `body` | [object](#body) | No | For data source plugins. Route headers set the body content and length to the proxied request. |
| `headers` | array | No | For data source plugins. Route headers adds HTTP headers to the proxied request. | | `headers` | array | No | For data source plugins. Route headers adds HTTP headers to the proxied request. |
| `jwtTokenAuth` | [object](#jwttokenauth) | No | For data source plugins. Token authentication section used with an JWT OAuth API. | | `jwtTokenAuth` | [object](#jwttokenauth) | No | For data source plugins. Token authentication section used with an JWT OAuth API. |
| `method` | string | No | For data source plugins. Route method matches the HTTP verb like GET or POST. | | `method` | string | No | For data source plugins. Route method matches the HTTP verb like GET or POST. Multiple methods can be provided as a comma-separated list. |
| `path` | string | No | For data source plugins. The route path that is replaced by the route URL field when proxying the call. | | `path` | string | No | For data source plugins. The route path that is replaced by the route URL field when proxying the call. |
| `reqRole` | string | No | | | `reqRole` | string | No | |
| `reqSignedIn` | boolean | No | | | `reqSignedIn` | boolean | No | |
| `tokenAuth` | [object](#tokenauth) | No | For data source plugins. Token authentication section used with an OAuth API. | | `tokenAuth` | [object](#tokenauth) | No | For data source plugins. Token authentication section used with an OAuth API. |
| `url` | string | No | For data source plugins. Route URL is where the request is proxied to. | | `url` | string | No | For data source plugins. Route URL is where the request is proxied to. |
### body ### body

@ -340,7 +340,7 @@
}, },
"method": { "method": {
"type": "string", "type": "string",
"description": "For data source plugins. Route method matches the HTTP verb like GET or POST." "description": "For data source plugins. Route method matches the HTTP verb like GET or POST. Multiple methods can be provided as a comma-separated list."
}, },
"url": { "url": {
"type": "string", "type": "string",

@ -4,6 +4,7 @@ import (
"crypto/tls" "crypto/tls"
"net" "net"
"net/http" "net/http"
"strings"
"time" "time"
"github.com/grafana/grafana/pkg/api/pluginproxy" "github.com/grafana/grafana/pkg/api/pluginproxy"
@ -47,7 +48,9 @@ func (hs *HTTPServer) initAppPluginRoutes(r *macaron.Macaron) {
} }
} }
handlers = append(handlers, AppPluginRoute(route, plugin.Id, hs)) handlers = append(handlers, AppPluginRoute(route, plugin.Id, hs))
r.Handle(route.Method, url, handlers) for _, method := range strings.Split(route.Method, ",") {
r.Handle(strings.TrimSpace(method), url, handlers)
}
log.Debugf("Plugins: Adding proxy route %s", url) log.Debugf("Plugins: Adding proxy route %s", url)
} }
} }

Loading…
Cancel
Save