mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 10:03:33 -06:00
64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package validation
|
|
|
|
import (
|
|
"github.com/google/uuid"
|
|
. "github.com/grafana/grafana/pkg/services/publicdashboards/models"
|
|
"github.com/grafana/grafana/pkg/tsdb/legacydata"
|
|
"github.com/grafana/grafana/pkg/util"
|
|
)
|
|
|
|
func ValidatePublicDashboard(dto *SavePublicDashboardDTO) error {
|
|
// if it is empty we override it in the service with public for retro compatibility
|
|
if dto.PublicDashboard.Share != "" && !IsValidShareType(dto.PublicDashboard.Share) {
|
|
return ErrInvalidShareType.Errorf("ValidateSavePublicDashboard: invalid share type")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func ValidateQueryPublicDashboardRequest(req PublicDashboardQueryDTO, pd *PublicDashboard) error {
|
|
if req.IntervalMs < 0 {
|
|
return ErrInvalidInterval.Errorf("ValidateQueryPublicDashboardRequest: intervalMS should be greater than 0")
|
|
}
|
|
|
|
if req.MaxDataPoints < 0 {
|
|
return ErrInvalidMaxDataPoints.Errorf("ValidateQueryPublicDashboardRequest: maxDataPoints should be greater than 0")
|
|
}
|
|
|
|
if pd.TimeSelectionEnabled {
|
|
timeRange := legacydata.NewDataTimeRange(req.TimeRange.From, req.TimeRange.To)
|
|
|
|
_, err := timeRange.ParseFrom()
|
|
if err != nil {
|
|
return ErrInvalidTimeRange.Errorf("ValidateQueryPublicDashboardRequest: time range from is invalid")
|
|
}
|
|
_, err = timeRange.ParseTo()
|
|
if err != nil {
|
|
return ErrInvalidTimeRange.Errorf("ValidateQueryPublicDashboardRequest: time range to is invalid")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// IsValidAccessToken asserts that an accessToken is a valid uuid
|
|
func IsValidAccessToken(token string) bool {
|
|
_, err := uuid.Parse(token)
|
|
return err == nil
|
|
}
|
|
|
|
// IsValidShortUID checks that the uid is not blank and contains valid
|
|
// characters. Wraps utils.IsValidShortUID
|
|
func IsValidShortUID(uid string) bool {
|
|
return uid != "" && util.IsValidShortUID(uid)
|
|
}
|
|
|
|
func IsValidShareType(shareType ShareType) bool {
|
|
for _, t := range ValidShareTypes {
|
|
if t == shareType {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|