mirror of
https://github.com/grafana/grafana.git
synced 2024-11-27 11:20:27 -06:00
e7648c4070
Google Cloud service accounts use a JWT token to get an oauth access token. This adds support for that.
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package plugins
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"github.com/gosimple/slug"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
type AppPluginCss struct {
|
|
Light string `json:"light"`
|
|
Dark string `json:"dark"`
|
|
}
|
|
|
|
type AppPlugin struct {
|
|
FrontendPluginBase
|
|
Routes []*AppPluginRoute `json:"routes"`
|
|
|
|
FoundChildPlugins []*PluginInclude `json:"-"`
|
|
Pinned bool `json:"-"`
|
|
}
|
|
|
|
type AppPluginRoute struct {
|
|
Path string `json:"path"`
|
|
Method string `json:"method"`
|
|
ReqRole models.RoleType `json:"reqRole"`
|
|
Url string `json:"url"`
|
|
Headers []AppPluginRouteHeader `json:"headers"`
|
|
TokenAuth *JwtTokenAuth `json:"tokenAuth"`
|
|
JwtTokenAuth *JwtTokenAuth `json:"jwtTokenAuth"`
|
|
}
|
|
|
|
type AppPluginRouteHeader struct {
|
|
Name string `json:"name"`
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
// JwtTokenAuth struct is both for normal Token Auth and JWT Token Auth with
|
|
// an uploaded JWT file.
|
|
type JwtTokenAuth struct {
|
|
Url string `json:"url"`
|
|
Scopes []string `json:"scopes"`
|
|
Params map[string]string `json:"params"`
|
|
}
|
|
|
|
func (app *AppPlugin) Load(decoder *json.Decoder, pluginDir string) error {
|
|
if err := decoder.Decode(&app); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := app.registerPlugin(pluginDir); err != nil {
|
|
return err
|
|
}
|
|
|
|
Apps[app.Id] = app
|
|
return nil
|
|
}
|
|
|
|
func (app *AppPlugin) initApp() {
|
|
app.initFrontendPlugin()
|
|
|
|
// check if we have child panels
|
|
for _, panel := range Panels {
|
|
if strings.HasPrefix(panel.PluginDir, app.PluginDir) {
|
|
panel.setPathsBasedOnApp(app)
|
|
app.FoundChildPlugins = append(app.FoundChildPlugins, &PluginInclude{
|
|
Name: panel.Name,
|
|
Id: panel.Id,
|
|
Type: panel.Type,
|
|
})
|
|
}
|
|
}
|
|
|
|
// check if we have child datasources
|
|
for _, ds := range DataSources {
|
|
if strings.HasPrefix(ds.PluginDir, app.PluginDir) {
|
|
ds.setPathsBasedOnApp(app)
|
|
app.FoundChildPlugins = append(app.FoundChildPlugins, &PluginInclude{
|
|
Name: ds.Name,
|
|
Id: ds.Id,
|
|
Type: ds.Type,
|
|
})
|
|
}
|
|
}
|
|
|
|
// slugify pages
|
|
for _, include := range app.Includes {
|
|
if include.Slug == "" {
|
|
include.Slug = slug.Make(include.Name)
|
|
}
|
|
if include.Type == "page" && include.DefaultNav {
|
|
app.DefaultNavUrl = setting.AppSubUrl + "/plugins/" + app.Id + "/page/" + include.Slug
|
|
}
|
|
if include.Type == "dashboard" && include.DefaultNav {
|
|
app.DefaultNavUrl = setting.AppSubUrl + "/dashboard/db/" + include.Slug
|
|
}
|
|
}
|
|
}
|