Skip to content

Commit cbe5cac

Browse files
committed
addressed comments.
1 parent ad4ceb4 commit cbe5cac

File tree

5 files changed

+69
-62
lines changed

5 files changed

+69
-62
lines changed

cmd/gaia/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func main() {
134134
}
135135

136136
// Setup CA for cerificate signing
137-
_, err = security.InitCA()
137+
cert, err := security.InitCA()
138138
if err != nil {
139139
gaia.Cfg.Logger.Error("cannot create CA", "error", err.Error())
140140
os.Exit(1)
@@ -175,7 +175,7 @@ func main() {
175175
// Set default to data folder
176176
gaia.Cfg.VaultPath = gaia.Cfg.DataPath
177177
}
178-
_, err = security.NewVault()
178+
_, err = security.NewVault(cert)
179179
if err != nil {
180180
gaia.Cfg.Logger.Error("error initiating vault")
181181
os.Exit(1)

frontend/client/store/modules/menu/index.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@ const state = {
2222
},
2323
component: lazyLoading('pipeline/create')
2424
},
25-
{
26-
name: 'Settings',
27-
path: '/settings',
28-
meta: {
29-
icon: 'fa-cogs'
30-
},
31-
component: lazyLoading('settings', true)
32-
},
3325
{
3426
name: 'Vault',
3527
path: '/vault',
3628
meta: {
3729
icon: 'fa-lock'
3830
},
3931
component: lazyLoading('vault', true)
32+
},
33+
{
34+
name: 'Settings',
35+
path: '/settings',
36+
meta: {
37+
icon: 'fa-cogs'
38+
},
39+
component: lazyLoading('settings', true)
4040
}
4141
]
4242
}

handlers/vault.go

+21-21
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/gaia-pipeline/gaia/security"
77

8-
"github.com/gaia-pipeline/gaia"
98
"github.com/labstack/echo"
109
)
1110

@@ -24,26 +23,25 @@ func UpdateSecret(c echo.Context) error {
2423
s := new(updateSecret)
2524
err := c.Bind(s)
2625
if err != nil {
27-
gaia.Cfg.Logger.Error("error reading secret", "error", err.Error())
2826
return c.String(http.StatusBadRequest, err.Error())
2927
}
30-
v, err := security.NewVault()
28+
cert, err := security.InitCA()
29+
if err != nil {
30+
return c.String(http.StatusInternalServerError, err.Error())
31+
}
32+
v, err := security.NewVault(cert)
3133
if err != nil {
32-
gaia.Cfg.Logger.Error("error initializing vault", "error", err.Error())
3334
return c.String(http.StatusInternalServerError, err.Error())
3435
}
3536
err = v.LoadSecrets()
3637
if err != nil {
37-
gaia.Cfg.Logger.Error("error opening vault", "error", err.Error())
3838
return c.String(http.StatusInternalServerError, err.Error())
3939
}
4040
v.Add(s.Key, []byte(s.Value))
4141
err = v.SaveSecrets()
4242
if err != nil {
43-
gaia.Cfg.Logger.Error("error saving vault", "error", err.Error())
4443
return c.String(http.StatusInternalServerError, err.Error())
4544
}
46-
gaia.Cfg.Logger.Info("secret successfully updated")
4745
return c.String(http.StatusOK, "secret successfully updated")
4846
}
4947

@@ -52,40 +50,41 @@ func AddSecret(c echo.Context) error {
5250
s := new(secret)
5351
err := c.Bind(s)
5452
if err != nil {
55-
gaia.Cfg.Logger.Error("error reading secret", "error", err.Error())
5653
return c.String(http.StatusBadRequest, err.Error())
5754
}
58-
v, err := security.NewVault()
55+
cert, err := security.InitCA()
56+
if err != nil {
57+
return c.String(http.StatusInternalServerError, err.Error())
58+
}
59+
v, err := security.NewVault(cert)
5960
if err != nil {
60-
gaia.Cfg.Logger.Error("error initializing vault", "error", err.Error())
6161
return c.String(http.StatusInternalServerError, err.Error())
6262
}
6363
err = v.LoadSecrets()
6464
if err != nil {
65-
gaia.Cfg.Logger.Error("error opening vault", "error", err.Error())
6665
return c.String(http.StatusInternalServerError, err.Error())
6766
}
6867
v.Add(s.Key, []byte(s.Value))
6968
err = v.SaveSecrets()
7069
if err != nil {
71-
gaia.Cfg.Logger.Error("error saving vault", "error", err.Error())
7270
return c.String(http.StatusInternalServerError, err.Error())
7371
}
74-
gaia.Cfg.Logger.Info("secret successfully added")
75-
return c.String(http.StatusOK, "secret successfully added")
72+
return c.String(http.StatusCreated, "secret successfully added")
7673
}
7774

7875
// ListSecrets retrieves all secrets from the vault.
7976
func ListSecrets(c echo.Context) error {
8077
secrets := make([]secret, 0)
81-
v, err := security.NewVault()
78+
cert, err := security.InitCA()
79+
if err != nil {
80+
return c.String(http.StatusInternalServerError, err.Error())
81+
}
82+
v, err := security.NewVault(cert)
8283
if err != nil {
83-
gaia.Cfg.Logger.Error("error initializing vault", "error", err.Error())
8484
return c.String(http.StatusInternalServerError, err.Error())
8585
}
8686
err = v.LoadSecrets()
8787
if err != nil {
88-
gaia.Cfg.Logger.Error("error opening vault", "error", err.Error())
8988
return c.String(http.StatusInternalServerError, err.Error())
9089
}
9190
kvs := v.GetAll()
@@ -102,20 +101,21 @@ func RemoveSecret(c echo.Context) error {
102101
if key == "" {
103102
return c.String(http.StatusBadRequest, "invalid key given")
104103
}
105-
v, err := security.NewVault()
104+
cert, err := security.InitCA()
105+
if err != nil {
106+
return c.String(http.StatusInternalServerError, err.Error())
107+
}
108+
v, err := security.NewVault(cert)
106109
if err != nil {
107-
gaia.Cfg.Logger.Error("error initializing vault", "error", err.Error())
108110
return c.String(http.StatusInternalServerError, err.Error())
109111
}
110112
err = v.LoadSecrets()
111113
if err != nil {
112-
gaia.Cfg.Logger.Error("error opening vault", "error", err.Error())
113114
return c.String(http.StatusInternalServerError, err.Error())
114115
}
115116
v.Remove(key)
116117
err = v.SaveSecrets()
117118
if err != nil {
118-
gaia.Cfg.Logger.Error("error opening vault", "error", err.Error())
119119
return c.String(http.StatusInternalServerError, err.Error())
120120
}
121121
return c.String(http.StatusOK, "secret successfully deleted")

security/vault.go

+13-14
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ const (
2323

2424
// Vault is a secret storage for data that gaia needs to store encrypted.
2525
type Vault struct {
26-
Path string
27-
Cert []byte
26+
path string
27+
cert []byte
2828
data map[string][]byte
2929
sync.RWMutex
3030
}
@@ -33,7 +33,7 @@ type Vault struct {
3333
// The format is:
3434
// KEY=VALUE
3535
// KEY2=VALUE2
36-
func NewVault() (*Vault, error) {
36+
func NewVault(ca *CA) (*Vault, error) {
3737
v := new(Vault)
3838
// Creating vault file
3939
vaultPath := filepath.Join(gaia.Cfg.VaultPath, vaultName)
@@ -47,23 +47,20 @@ func NewVault() (*Vault, error) {
4747
}
4848

4949
// Setting up certificate key content
50-
c, err := InitCA()
50+
_, certKey := ca.GetCACertPath()
51+
data, err := ioutil.ReadFile(certKey)
5152
if err != nil {
5253
return nil, err
5354
}
54-
data, err := ioutil.ReadFile(c.caKeyPath)
55-
if err != nil {
56-
return nil, err
57-
}
58-
v.Cert = data
59-
v.Path = vaultPath
55+
v.cert = data
56+
v.path = vaultPath
6057
v.data = make(map[string][]byte, 0)
6158
return v, nil
6259
}
6360

6461
// LoadSecrets decrypts the contents of the vault and fills up a map of data to work with.
6562
func (v *Vault) LoadSecrets() error {
66-
r, err := ioutil.ReadFile(v.Path)
63+
r, err := ioutil.ReadFile(v.path)
6764
if err != nil {
6865
return err
6966
}
@@ -82,12 +79,14 @@ func (v *Vault) SaveSecrets() error {
8279
if err != nil {
8380
return err
8481
}
85-
err = ioutil.WriteFile(v.Path, []byte(encryptedData), 0400)
82+
err = ioutil.WriteFile(v.path, []byte(encryptedData), 0400)
8683
return err
8784
}
8885

8986
// GetAll returns all keys and values in a copy of the internal data.
9087
func (v *Vault) GetAll() []string {
88+
v.RLock()
89+
defer v.RUnlock()
9190
m := make([]string, 0)
9291
for k := range v.data {
9392
m = append(m, k)
@@ -136,7 +135,7 @@ func (v *Vault) encrypt(data []byte) (string, error) {
136135
// User has deleted all the secrets. the file will be empty.
137136
return "", nil
138137
}
139-
paddedPassword := v.pad(v.Cert)
138+
paddedPassword := v.pad(v.cert)
140139
ci := base64.URLEncoding.EncodeToString(paddedPassword)
141140
block, err := aes.NewCipher([]byte(ci[:aes.BlockSize]))
142141
if err != nil {
@@ -161,7 +160,7 @@ func (v *Vault) decrypt(data []byte) ([]byte, error) {
161160
gaia.Cfg.Logger.Info("the vault is empty")
162161
return []byte{}, nil
163162
}
164-
paddedPassword := v.pad(v.Cert)
163+
paddedPassword := v.pad(v.cert)
165164
ci := base64.URLEncoding.EncodeToString(paddedPassword)
166165
block, err := aes.NewCipher([]byte(ci[:aes.BlockSize]))
167166
if err != nil {

security/vault_test.go

+25-17
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ func TestNewVault(t *testing.T) {
2222
Output: buf,
2323
Name: "Gaia",
2424
})
25-
v, err := NewVault()
25+
c, _ := InitCA()
26+
v, err := NewVault(c)
2627
if err != nil {
2728
t.Fatal(err)
2829
}
29-
if v.Path != filepath.Join(gaia.Cfg.VaultPath, vaultName) {
30-
t.Fatal("file path of vault file did not equal expected. was:", v.Path)
30+
if v.path != filepath.Join(gaia.Cfg.VaultPath, vaultName) {
31+
t.Fatal("file path of vault file did not equal expected. was:", v.path)
3132
}
3233
}
3334

@@ -42,7 +43,8 @@ func TestAddAndGet(t *testing.T) {
4243
Output: buf,
4344
Name: "Gaia",
4445
})
45-
v, err := NewVault()
46+
c, _ := InitCA()
47+
v, err := NewVault(c)
4648
if err != nil {
4749
t.Fatal(err)
4850
}
@@ -64,7 +66,8 @@ func TestCloseLoadSecrets(t *testing.T) {
6466
Output: buf,
6567
Name: "Gaia",
6668
})
67-
v, err := NewVault()
69+
c, _ := InitCA()
70+
v, err := NewVault(c)
6871
if err != nil {
6972
t.Fatal(err)
7073
}
@@ -96,19 +99,20 @@ func TestCloseLoadSecretsWithInvalidPassword(t *testing.T) {
9699
Output: buf,
97100
Name: "Gaia",
98101
})
99-
v, err := NewVault()
102+
c, _ := InitCA()
103+
v, err := NewVault(c)
100104
if err != nil {
101105
t.Fatal(err)
102106
}
103-
v.Cert = []byte("test")
107+
v.cert = []byte("test")
104108
v.Add("key1", []byte("value1"))
105109
v.Add("key2", []byte("value2"))
106110
err = v.SaveSecrets()
107111
if err != nil {
108112
t.Fatal(err)
109113
}
110114
v.data = make(map[string][]byte, 0)
111-
v.Cert = []byte("invalid")
115+
v.cert = []byte("invalid")
112116
err = v.LoadSecrets()
113117
if err == nil {
114118
t.Fatal("error should not have been nil.")
@@ -130,21 +134,22 @@ func TestAnExistingVaultFileIsNotOverwritten(t *testing.T) {
130134
Output: buf,
131135
Name: "Gaia",
132136
})
133-
v, err := NewVault()
137+
c, _ := InitCA()
138+
v, err := NewVault(c)
134139
if err != nil {
135140
t.Fatal(err)
136141
}
137142
defer os.Remove(vaultName)
138143
defer os.Remove("ca.crt")
139144
defer os.Remove("ca.key")
140-
v.Cert = []byte("test")
145+
v.cert = []byte("test")
141146
v.Add("test", []byte("value"))
142147
v.SaveSecrets()
143-
v2, _ := NewVault()
144-
if v2.Path != v.Path {
145-
t.Fatal("paths should have equaled. were: ", v2.Path, v.Path)
148+
v2, _ := NewVault(c)
149+
if v2.path != v.path {
150+
t.Fatal("paths should have equaled. were: ", v2.path, v.path)
146151
}
147-
v2.Cert = []byte("test")
152+
v2.cert = []byte("test")
148153
v2.LoadSecrets()
149154
if err != nil {
150155
t.Fatal(err)
@@ -163,7 +168,8 @@ func TestRemovingFromTheVault(t *testing.T) {
163168
gaia.Cfg = &gaia.Config{}
164169
gaia.Cfg.VaultPath = tmp
165170
gaia.Cfg.CAPath = tmp
166-
v, err := NewVault()
171+
c, _ := InitCA()
172+
v, err := NewVault(c)
167173
if err != nil {
168174
t.Fatal(err)
169175
}
@@ -201,7 +207,8 @@ func TestGetAll(t *testing.T) {
201207
gaia.Cfg = &gaia.Config{}
202208
gaia.Cfg.VaultPath = tmp
203209
gaia.Cfg.CAPath = tmp
204-
v, err := NewVault()
210+
c, _ := InitCA()
211+
v, err := NewVault(c)
205212
if err != nil {
206213
t.Fatal(err)
207214
}
@@ -226,7 +233,8 @@ func TestEditValueWithAddingItAgain(t *testing.T) {
226233
gaia.Cfg = &gaia.Config{}
227234
gaia.Cfg.VaultPath = tmp
228235
gaia.Cfg.CAPath = tmp
229-
v, _ := NewVault()
236+
c, _ := InitCA()
237+
v, _ := NewVault(c)
230238
v.Add("key1", []byte("value1"))
231239
v.SaveSecrets()
232240
v.data = make(map[string][]byte, 0)

0 commit comments

Comments
 (0)