mirror of
https://github.com/grafana/grafana.git
synced 2025-02-16 18:34:52 -06:00
Moves the details of loading plugins into the backend plugin manager from the respective plugin (datasource, transform and renderer).
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
|
|
}
|
|
}
|
|
}
|