Encryption: Improvements
This commit is contained in:
@@ -1,19 +1,40 @@
|
||||
package sqlstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
func (ss *SqlStore) GetDataKey(name string) (*models.DataKey, error) {
|
||||
return getDataKey(name, ss.engine)
|
||||
const dataKeysTable = "data_keys"
|
||||
|
||||
func (ss *SqlStore) GetDataKey(ctx context.Context, name string) (*models.DataKey, error) {
|
||||
return getDataKey(ctx, name, ss.engine)
|
||||
}
|
||||
|
||||
func getDataKey(name string, engine *xorm.Engine) (*models.DataKey, error) {
|
||||
dataKey := &models.DataKey{Name: name}
|
||||
exists, err := engine.Get(dataKey)
|
||||
func (ss *SqlStore) CreateDataKey(ctx context.Context, dataKey models.DataKey) error {
|
||||
dataKey.Created = time.Now()
|
||||
dataKey.Updated = dataKey.Created
|
||||
|
||||
if !dataKey.Active {
|
||||
return fmt.Errorf("cannot insert deactivated data keys")
|
||||
}
|
||||
|
||||
_, err := ss.engine.Context(ctx).Table(dataKeysTable).InsertOne(dataKey)
|
||||
return err
|
||||
}
|
||||
|
||||
func (ss *SqlStore) DeleteDataKey(ctx context.Context, name string) error {
|
||||
_, err := ss.engine.Context(ctx).Table(dataKeysTable).Delete(models.DataKey{Name: name})
|
||||
return err
|
||||
}
|
||||
|
||||
func getDataKey(ctx context.Context, name string, engine *xorm.Engine) (*models.DataKey, error) {
|
||||
dataKey := &models.DataKey{Name: name, Active: true}
|
||||
exists, err := engine.Context(ctx).Table(dataKeysTable).Get(dataKey)
|
||||
|
||||
if err != nil {
|
||||
sqlog.Error("Failed getting data key", "err", err, "name", name)
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package sqlstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestDataKeys(t *testing.T) {
|
||||
db := InitTestDB(t)
|
||||
ctx := context.Background()
|
||||
|
||||
dataKey := models.DataKey{
|
||||
Active: true,
|
||||
Name: "Testing",
|
||||
Provider: "test",
|
||||
EncryptedData: []byte{0x62, 0xAF, 0xA1, 0x1A},
|
||||
}
|
||||
|
||||
res, err := db.GetDataKey(ctx, dataKey.Name)
|
||||
assert.Equal(t, models.ErrDataKeyNotFound, err)
|
||||
assert.Nil(t, res)
|
||||
|
||||
err = db.CreateDataKey(ctx, dataKey)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err = db.GetDataKey(ctx, dataKey.Name)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, dataKey.EncryptedData, res.EncryptedData)
|
||||
assert.Equal(t, dataKey.Provider, res.Provider)
|
||||
assert.Equal(t, dataKey.Name, res.Name)
|
||||
assert.True(t, dataKey.Active)
|
||||
|
||||
err = db.DeleteDataKey(ctx, dataKey.Name)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err = db.GetDataKey(ctx, dataKey.Name)
|
||||
assert.Equal(t, models.ErrDataKeyNotFound, err)
|
||||
assert.Nil(t, res)
|
||||
}
|
||||
Reference in New Issue
Block a user