diff options
author | Julien Dessaux | 2024-09-30 00:58:49 +0200 |
---|---|---|
committer | Julien Dessaux | 2024-09-30 01:00:59 +0200 |
commit | 4ff490806c826cf2da4c2291ed924f0a49383fce (patch) | |
tree | 6870f4883cd03a824095b969500f08fb59f04038 /pkg/database/states.go | |
parent | chore(tfstated): rename tfstate to tfstated (diff) | |
download | tfstated-4ff490806c826cf2da4c2291ed924f0a49383fce.tar.gz tfstated-4ff490806c826cf2da4c2291ed924f0a49383fce.tar.bz2 tfstated-4ff490806c826cf2da4c2291ed924f0a49383fce.zip |
feat(tfstated): implement GET and POST methods, states are encrypted in a sqlite3 database
Diffstat (limited to '')
-rw-r--r-- | pkg/database/states.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/pkg/database/states.go b/pkg/database/states.go new file mode 100644 index 0000000..ef2263b --- /dev/null +++ b/pkg/database/states.go @@ -0,0 +1,30 @@ +package database + +import ( + "database/sql" +) + +func (db *DB) GetState(name string) ([]byte, error) { + var encryptedData []byte + err := db.QueryRow(`SELECT data FROM states WHERE name = ?;`, name).Scan(&encryptedData) + if err != nil { + return nil, err + } + return db.dataEncryptionKey.DecryptAES256(encryptedData) +} + +func (db *DB) SetState(name string, data []byte) error { + encryptedData, err := db.dataEncryptionKey.EncryptAES256(data) + if err != nil { + return err + } + _, err = db.Exec( + `INSERT INTO states(name, data) VALUES (:name, :data) ON CONFLICT DO UPDATE SET data = :data WHERE name = :name;`, + sql.Named("data", encryptedData), + sql.Named("name", name), + ) + if err != nil { + return err + } + return nil +} |