Skip to content

Commit 7f301a7

Browse files
authored
access key type (#3114)
* feat(db): add migration for type column of access_key * feat(db): rollback migration * fix(keys): rename new field type to owner * feat(keys): use owner field * feat(keys): implement new field owner
1 parent 03c45a9 commit 7f301a7

File tree

9 files changed

+42
-9
lines changed

9 files changed

+42
-9
lines changed

.dredd/hooks/capabilities.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ func resolveCapability(caps []string, resolved []string, uid string) {
129129
})
130130
printError(err)
131131
_, err = store.CreateAccessKey(db.AccessKey{
132-
Name: string(secret.Type) + "." + secret.Name,
133132
String: secret.Secret,
134133
EnvironmentID: &res.ID,
135134
ProjectID: &userProject.ID,
136135
Type: db.AccessKeyString,
136+
Owner: secret.Type.GetAccessKeyOwner(),
137137
})
138138
printError(err)
139139
environmentID = res.ID

api/projects/environment.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ func updateEnvironmentSecrets(store db.Store, env db.Environment) error {
2121
switch secret.Operation {
2222
case db.EnvironmentSecretCreate:
2323
key, err = store.CreateAccessKey(db.AccessKey{
24-
Name: string(secret.Type) + "." + secret.Name,
24+
Name: secret.Name,
2525
String: secret.Secret,
2626
EnvironmentID: &env.ID,
2727
ProjectID: &env.ProjectID,
2828
Type: db.AccessKeyString,
29+
Owner: secret.Type.GetAccessKeyOwner(),
2930
})
3031
case db.EnvironmentSecretDelete:
3132
key, err = store.GetAccessKey(env.ProjectID, secret.ID)
@@ -53,8 +54,9 @@ func updateEnvironmentSecrets(store db.Store, env db.Environment) error {
5354
updateKey := db.AccessKey{
5455
ID: key.ID,
5556
ProjectID: key.ProjectID,
56-
Name: string(secret.Type) + "." + secret.Name,
57+
Name: secret.Name,
5758
Type: db.AccessKeyString,
59+
Owner: key.Owner,
5860
}
5961
if secret.Secret != "" {
6062
updateKey.String = secret.Secret

db/AccessKey.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,21 @@ import (
1616
)
1717

1818
type AccessKeyType string
19+
type AccessKeyOwner string
1920

2021
const (
2122
AccessKeySSH AccessKeyType = "ssh"
2223
AccessKeyNone AccessKeyType = "none"
2324
AccessKeyLoginPassword AccessKeyType = "login_password"
2425
AccessKeyString AccessKeyType = "string"
2526
)
27+
const (
28+
AccessKeyEnvironment AccessKeyOwner = "environment"
29+
AccessKeyVariable AccessKeyOwner = "variable"
30+
AccessKeyUser AccessKeyOwner = "user"
31+
AccessKeyVault AccessKeyOwner = "vault"
32+
AccessKeyShared AccessKeyOwner = ""
33+
)
2634

2735
// AccessKey represents a key used to access a machine with ansible from semaphore
2836
type AccessKey struct {
@@ -49,6 +57,9 @@ type AccessKey struct {
4957
UserID *int `db:"user_id" json:"-" backup:"-"`
5058

5159
Empty bool `db:"-" json:"empty,omitempty"`
60+
61+
Owner AccessKeyOwner `db:"owner" json:"owner,omitempty" backup:"owner"`
62+
Plain *string `db:"plain" json:"plain,omitempty"`
5263
}
5364

5465
type LoginPassword struct {

db/Environment.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@ const (
2121
EnvironmentSecretEnv EnvironmentSecretType = "env"
2222
)
2323

24+
func (t EnvironmentSecretType) GetAccessKeyOwner() AccessKeyOwner {
25+
switch t {
26+
case EnvironmentSecretVar:
27+
return AccessKeyVariable
28+
case EnvironmentSecretEnv:
29+
return AccessKeyEnvironment
30+
default:
31+
panic("unknown secret type: " + t)
32+
}
33+
}
34+
2435
type EnvironmentSecret struct {
2536
ID int `json:"id"`
2637
Type EnvironmentSecretType `json:"type"`
@@ -117,10 +128,10 @@ func FillEnvironmentSecrets(store Store, env *Environment, deserializeSecret boo
117128
var secretName string
118129
var secretType EnvironmentSecretType
119130

120-
if strings.HasPrefix(k.Name, string(EnvironmentSecretVar)+".") {
131+
if k.Owner == AccessKeyVariable {
121132
secretType = EnvironmentSecretVar
122133
secretName = strings.TrimPrefix(k.Name, string(EnvironmentSecretVar)+".")
123-
} else if strings.HasPrefix(k.Name, string(EnvironmentSecretEnv)+".") {
134+
} else if k.Owner == AccessKeyEnvironment {
124135
secretType = EnvironmentSecretEnv
125136
secretName = strings.TrimPrefix(k.Name, string(EnvironmentSecretEnv)+".")
126137
} else {

db/Migration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func GetMigrations() []Migration {
9494
{Version: "2.14.12"},
9595
{Version: "2.15.0"},
9696
{Version: "2.15.1"},
97+
{Version: "2.16.0"},
9798
}
9899
}
99100

db/bolt/access_key.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (d *BoltDb) GetAccessKeys(projectID int, params db.RetrieveQueryParams) ([]
2222
var keys []db.AccessKey
2323
err := d.getObjects(projectID, db.AccessKeyProps, params, func(i any) bool {
2424
k := i.(db.AccessKey)
25-
return k.EnvironmentID == nil
25+
return k.Owner == db.AccessKeyShared
2626
}, &keys)
2727
return keys, err
2828
}

db/sql/access_key.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (d *SqlDb) GetAccessKeys(projectID int, params db.RetrieveQueryParams) (key
2424
return
2525
}
2626

27-
q = q.Where("pe.environment_id IS NULL")
27+
q = q.Where("pe.owner = ''")
2828

2929
query, args, err := q.ToSql()
3030

@@ -87,12 +87,14 @@ func (d *SqlDb) CreateAccessKey(key db.AccessKey) (newKey db.AccessKey, err erro
8787

8888
insertID, err := d.insert(
8989
"id",
90-
"insert into access_key (name, type, project_id, secret, environment_id) values (?, ?, ?, ?, ?)",
90+
"insert into access_key (name, type, project_id, secret, environment_id, owner) values (?, ?, ?, ?, ?, ?)",
9191
key.Name,
9292
key.Type,
9393
key.ProjectID,
9494
key.Secret,
95-
key.EnvironmentID)
95+
key.EnvironmentID,
96+
key.Owner,
97+
)
9698

9799
if err != nil {
98100
return

db/sql/migrations/v2.16.0.err.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
alter table `access_key` drop `owner`;
2+
alter table `access_key` drop `plain`;

db/sql/migrations/v2.16.0.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
alter table `access_key` add `owner` varchar(20) default '' not null;
2+
alter table `access_key` add `plain` text;
3+
update access_key set `owner` = 'variable' where environment_id is not null and name like 'var.%';
4+
update access_key set `owner` = 'environment' where environment_id is not null and name like 'env.%';

0 commit comments

Comments
 (0)