grafana/pkg/plugins/repo/errors.go

99 lines
3.8 KiB
Go

package repo
import (
"fmt"
"github.com/grafana/grafana/pkg/apimachinery/errutil"
)
type ErrResponse4xx struct {
message string
statusCode int
compatibilityInfo CompatOpts
}
func newErrResponse4xx(statusCode int) ErrResponse4xx {
return ErrResponse4xx{
statusCode: statusCode,
}
}
func (e ErrResponse4xx) Message() string {
return e.message
}
func (e ErrResponse4xx) StatusCode() int {
return e.statusCode
}
func (e ErrResponse4xx) withMessage(message string) ErrResponse4xx {
e.message = message
return e
}
func (e ErrResponse4xx) withCompatibilityInfo(compatibilityInfo CompatOpts) ErrResponse4xx {
e.compatibilityInfo = compatibilityInfo
return e
}
func (e ErrResponse4xx) Error() string {
if len(e.message) > 0 {
compatInfo := e.compatibilityInfo.String()
if len(compatInfo) > 0 {
return fmt.Sprintf("%d: %s (%s)", e.statusCode, e.message, compatInfo)
}
return fmt.Sprintf("%d: %s", e.statusCode, e.message)
}
return fmt.Sprintf("%d", e.statusCode)
}
var (
ErrVersionUnsupportedMsg = "{{.Public.PluginID}} v{{.Public.Version}} is not supported on your system {{.Public.SysInfo}}"
ErrVersionUnsupportedBase = errutil.Conflict("plugin.unsupportedVersion").
MustTemplate(ErrVersionUnsupportedMsg, errutil.WithPublic(ErrVersionUnsupportedMsg))
ErrVersionNotFoundMsg = "{{.Public.PluginID}} v{{.Public.Version}} either does not exist or is not supported on your system {{.Public.SysInfo}}"
ErrVersionNotFoundBase = errutil.NotFound("plugin.versionNotFound").
MustTemplate(ErrVersionNotFoundMsg, errutil.WithPublic(ErrVersionNotFoundMsg))
ErrArcNotFoundMsg = "{{.Public.PluginID}} is not compatible with your system architecture: {{.Public.SysInfo}}"
ErrArcNotFoundBase = errutil.NotFound("plugin.archNotFound").
MustTemplate(ErrArcNotFoundMsg, errutil.WithPublic(ErrArcNotFoundMsg))
ErrChecksumMismatchMsg = "expected SHA256 checksum does not match the downloaded archive ({{.Public.ArchiveURL}}) - please contact security@grafana.com"
ErrChecksumMismatchBase = errutil.UnprocessableEntity("plugin.checksumMismatch").
MustTemplate(ErrChecksumMismatchMsg, errutil.WithPublic(ErrChecksumMismatchMsg))
ErrCorePluginMsg = "plugin {{.Public.PluginID}} is a core plugin and cannot be installed separately"
ErrCorePluginBase = errutil.Forbidden("plugin.forbiddenCorePluginInstall").
MustTemplate(ErrCorePluginMsg, errutil.WithPublic(ErrCorePluginMsg))
ErrNotCompatibledMsg = "{{.Public.PluginID}} is not compatible with your Grafana version: {{.Public.GrafanaVersion}}"
ErrNotCompatibleBase = errutil.NotFound("plugin.grafanaVersionNotCompatible").
MustTemplate(ErrNotCompatibledMsg, errutil.WithPublic(ErrNotCompatibledMsg))
)
func ErrVersionUnsupported(pluginID, requestedVersion, systemInfo string) error {
return ErrVersionUnsupportedBase.Build(errutil.TemplateData{Public: map[string]any{"PluginID": pluginID, "Version": requestedVersion, "SysInfo": systemInfo}})
}
func ErrVersionNotFound(pluginID, requestedVersion, systemInfo string) error {
return ErrVersionNotFoundBase.Build(errutil.TemplateData{Public: map[string]any{"PluginID": pluginID, "Version": requestedVersion, "SysInfo": systemInfo}})
}
func ErrArcNotFound(pluginID, systemInfo string) error {
return ErrArcNotFoundBase.Build(errutil.TemplateData{Public: map[string]any{"PluginID": pluginID, "SysInfo": systemInfo}})
}
func ErrChecksumMismatch(archiveURL string) error {
return ErrChecksumMismatchBase.Build(errutil.TemplateData{Public: map[string]any{"ArchiveURL": archiveURL}})
}
func ErrCorePlugin(pluginID string) error {
return ErrCorePluginBase.Build(errutil.TemplateData{Public: map[string]any{"PluginID": pluginID}})
}
func ErrNoCompatibleVersions(pluginID, grafanaVersion string) error {
return ErrNotCompatibleBase.Build(errutil.TemplateData{Public: map[string]any{"PluginID": pluginID, "GrafanaVersion": grafanaVersion}})
}