securejsondata.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package securejsondata
  2. import (
  3. "github.com/grafana/grafana/pkg/log"
  4. "github.com/grafana/grafana/pkg/setting"
  5. "github.com/grafana/grafana/pkg/util"
  6. )
  7. // SecureJsonData is used to store encrypted data (for example in data_source table). Only values are separately
  8. // encrypted.
  9. type SecureJsonData map[string][]byte
  10. // DecryptedValue returns single decrypted value from SecureJsonData. Similar to normal map access second return value
  11. // is true if the key exists and false if not.
  12. func (s SecureJsonData) DecryptedValue(key string) (string, bool) {
  13. if value, ok := s[key]; ok {
  14. decryptedData, err := util.Decrypt(value, setting.SecretKey)
  15. if err != nil {
  16. log.Fatal(4, err.Error())
  17. }
  18. return string(decryptedData), true
  19. }
  20. return "", false
  21. }
  22. // Decrypt returns map of the same type but where the all the values are decrypted. Opposite of what
  23. // GetEncryptedJsonData is doing.
  24. func (s SecureJsonData) Decrypt() map[string]string {
  25. decrypted := make(map[string]string)
  26. for key, data := range s {
  27. decryptedData, err := util.Decrypt(data, setting.SecretKey)
  28. if err != nil {
  29. log.Fatal(4, err.Error())
  30. }
  31. decrypted[key] = string(decryptedData)
  32. }
  33. return decrypted
  34. }
  35. // GetEncryptedJsonData returns map where all keys are encrypted.
  36. func GetEncryptedJsonData(sjd map[string]string) SecureJsonData {
  37. encrypted := make(SecureJsonData)
  38. for key, data := range sjd {
  39. encryptedData, err := util.Encrypt([]byte(data), setting.SecretKey)
  40. if err != nil {
  41. log.Fatal(4, err.Error())
  42. }
  43. encrypted[key] = encryptedData
  44. }
  45. return encrypted
  46. }