Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ TEST =
UNIT_TEST_BUILD_DIR = $(BUILD_DIR)/unit-test
UNIT_TEST_PKG = \
./core/crypto \
./core/crypto/impl
./core/crypto/impl \
./core/env \
./core/env/impl

INTEGRATION_TEST_PKG = \
./core/crypto/test \
Expand Down
1 change: 1 addition & 0 deletions core/env/env.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package env
101 changes: 101 additions & 0 deletions core/env/impl/sqliteenv.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package env_impl

import (
"database/sql"

_ "github.com/mattn/go-sqlite3"
)

type SQLiteEnv struct {
db *sql.DB
}

func LoadSQLiteEnv(db *sql.DB) (*SQLiteEnv, error) {
const roleTable = `
CREATE TABLE IF NOT EXISTS role (
id INTEGER PRIMARY KEY NOT NULL,
name VARCHAR(127) UNIQUE NOT NULL
)`
if _, err := db.Exec(roleTable); err != nil {
return nil, err
}

const envTable = `
CREATE TABLE IF NOT EXISTS env (
id INTEGER PRIMARY KEY NOT NULL,
namespace VARCHAR(127) UNIQUE NOT NULL,
description TEXT
)`
if _, err := db.Exec(envTable); err != nil {
return nil, err
}

const varTable = `
CREATE TABLE IF NOT EXISTS var (
env_id INTEGER NOT NULL,
name VARCHAR(127) NOT NULL,
value BLOB NOT NULL,
PRIMARY KEY (env_id, name),
FOREIGN KEY (env_id) REFERENCES env(id)
ON DELETE CASCADE ON UPDATE CASCADE
)`
if _, err := db.Exec(varTable); err != nil {
return nil, err
}

const envAccessTable = `
CREATE TABLE IF NOT EXISTS env_access (
role_id INTEGER NOT NULL,
env_id INTEGER NOT NULL,
secret BLOB NOT NULL,
FOREIGN KEY (role_id) REFERENCES role(id)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (env_id) REFERENCES env(id)
ON DELETE CASCADE ON UPDATE CASCADE
)`
if _, err := db.Exec(envAccessTable); err != nil {
return nil, err
}

const objectTable = `
CREATE TABLE IF NOT EXISTS object (
id INTEGER PRIMARY KEY NOT NULL,
name VARCHAR(127) UNIQUE NOT NULL,
description TEXT,
data BLOB NOT NULL
)`
if _, err := db.Exec(objectTable); err != nil {
return nil, err
}

const objectAccessTable = `
CREATE TABLE IF NOT EXISTS object_access (
role_id INTEGER NOT NULL,
object_id INTEGER NOT NULL,
secret BLOB NOT NULL,
FOREIGN KEY (role_id) REFERENCES role(id)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (object_id) REFERENCES object(id)
ON DELETE CASCADE ON UPDATE CASCADE
)`
if _, err := db.Exec(objectAccessTable); err != nil {
return nil, err
}

const envAccessIndex = `
CREATE INDEX IF NOT EXISTS env_access_index
ON env_access (role_id, env_id)`
if _, err := db.Exec(envAccessIndex); err != nil {
return nil, err
}

const objectAccessIndex = `
CREATE INDEX IF NOT EXISTS object_access_index
ON object_access (role_id, object_id)`
if _, err := db.Exec(objectAccessIndex); err != nil {
return nil, err
}

env := &SQLiteEnv{db: db}
return env, nil
}
18 changes: 18 additions & 0 deletions core/env/impl/sqliteenv_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package env_impl

import (
"database/sql"
"testing"
)

func Test_SQLiteEnv(t *testing.T) {
db, err := sql.Open("sqlite3", "../../../build/env.db")
if err != nil {
t.Fatal(err)
}

_, err = LoadSQLiteEnv(db)
if err != nil {
t.Fatal(err)
}
}
1 change: 1 addition & 0 deletions core/env/sql.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package env
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/reshifr/secure-env
go 1.22.0

require (
github.com/mattn/go-sqlite3 v1.14.22
github.com/stretchr/testify v1.9.0
golang.org/x/crypto v0.22.0
)
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
Expand Down