Encryption: Improvements

This commit is contained in:
Emil Tullstedt
2020-10-09 16:15:24 +02:00
parent 2f4a097e53
commit 1ff6fa9424
5 changed files with 166 additions and 20 deletions
+26 -5
View File
@@ -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)
+44
View File
@@ -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)
}