@ -246,18 +246,6 @@ func (proxy *DataSourceProxy) validateRequest() error {
return errors . New ( "target URL is not a valid target" )
}
if proxy . ds . Type == models . DS_PROMETHEUS {
if proxy . ctx . Req . Request . Method == "DELETE" {
return errors . New ( "deletes not allowed on proxied Prometheus datasource" )
}
if proxy . ctx . Req . Request . Method == "PUT" {
return errors . New ( "puts not allowed on proxied Prometheus datasource" )
}
if proxy . ctx . Req . Request . Method == "POST" && ! ( proxy . proxyPath == "api/v1/query" || proxy . proxyPath == "api/v1/query_range" || proxy . proxyPath == "api/v1/series" || proxy . proxyPath == "api/v1/labels" || proxy . proxyPath == "api/v1/query_exemplars" ) {
return errors . New ( "posts not allowed on proxied Prometheus datasource except on /query, /query_range, /series and /labels" )
}
}
if proxy . ds . Type == models . DS_ES {
if proxy . ctx . Req . Request . Method == "DELETE" {
return errors . New ( "deletes not allowed on proxied Elasticsearch datasource" )
@ -278,16 +266,29 @@ func (proxy *DataSourceProxy) validateRequest() error {
continue
}
// route match
if ! strings . HasPrefix ( proxy . proxyPath , route . Path ) {
continue
}
if route . ReqRole . IsValid ( ) {
if ! proxy . ctx . HasUserRole ( route . ReqRole ) {
return errors . New ( "plugin proxy route access denied" )
}
}
if strings . HasPrefix ( proxy . proxyPath , route . Path ) {
proxy . route = route
break
}
proxy . route = route
return nil
}
}
// Trailing validation below this point for routes that were not matched
if proxy . ds . Type == models . DS_PROMETHEUS {
if proxy . ctx . Req . Request . Method == "DELETE" {
return errors . New ( "non allow-listed DELETEs not allowed on proxied Prometheus datasource" )
}
if proxy . ctx . Req . Request . Method == "PUT" {
return errors . New ( "non allow-listed PUTs not allowed on proxied Prometheus datasource" )
}
}