utils.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package pluginproxy
  2. import (
  3. "bytes"
  4. "fmt"
  5. "net/url"
  6. "text/template"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/plugins"
  9. )
  10. // InterpolateString accepts template data and return a string with substitutions
  11. func InterpolateString(text string, data templateData) (string, error) {
  12. t, err := template.New("content").Parse(text)
  13. if err != nil {
  14. return "", fmt.Errorf("could not parse template %s", text)
  15. }
  16. var contentBuf bytes.Buffer
  17. err = t.Execute(&contentBuf, data)
  18. if err != nil {
  19. return "", fmt.Errorf("failed to execute template %s", text)
  20. }
  21. return contentBuf.String(), nil
  22. }
  23. // InterpolateURL accepts template data and return a string with substitutions
  24. func InterpolateURL(anURL *url.URL, route *plugins.AppPluginRoute, orgID int64, appID string) (*url.URL, error) {
  25. query := m.GetPluginSettingByIdQuery{OrgId: orgID, PluginId: appID}
  26. result, err := url.Parse(anURL.String())
  27. if query.Result != nil {
  28. if len(query.Result.JsonData) > 0 {
  29. data := templateData{
  30. JsonData: query.Result.JsonData,
  31. }
  32. interpolatedResult, err := InterpolateString(anURL.String(), data)
  33. if err == nil {
  34. result, err = url.Parse(interpolatedResult)
  35. if err != nil {
  36. return nil, fmt.Errorf("Error parsing plugin route url %v", err)
  37. }
  38. }
  39. }
  40. }
  41. return result, err
  42. }