Skip to content

Commit 1382e54

Browse files
feat: pass secrets to agent via Manifest
1 parent a1ee752 commit 1382e54

File tree

8 files changed

+777
-716
lines changed

8 files changed

+777
-716
lines changed

agent/agent.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,6 +1410,10 @@ func (a *agent) updateCommandEnv(current []string) (updated []string, err error)
14101410
}
14111411
envs["PATH"] = fmt.Sprintf("%s%c%s", a.scriptRunner.ScriptBinDir(), filepath.ListSeparator, envs["PATH"])
14121412

1413+
for _, secret := range manifest.UserSecrets {
1414+
envs[secret.EnvName] = secret.Description
1415+
}
1416+
14131417
for k, v := range envs {
14141418
updated = append(updated, fmt.Sprintf("%s=%s", k, v))
14151419
}

agent/proto/agent.pb.go

Lines changed: 712 additions & 711 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

agent/proto/agent.proto

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,14 @@ message Manifest {
9999
repeated WorkspaceAgentMetadata.Description metadata = 12;
100100
repeated WorkspaceAgentDevcontainer devcontainers = 17;
101101

102-
map<string,Secret> user_secrets = 19;
102+
repeated Secret user_secrets = 19;
103103
}
104104

105105
message Secret {
106106
string name = 1;
107107
string env_name = 2;
108108
string file_path = 3;
109+
string value = 4;
109110
}
110111

111112
message WorkspaceAgentDevcontainer {

coderd/agentapi/manifest.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ func (a *ManifestAPI) GetManifest(ctx context.Context, _ *agentproto.GetManifest
9797
return nil, xerrors.Errorf("fetching workspace agent data: %w", err)
9898
}
9999

100+
_ = userSecrets
101+
100102
appSlug := appurl.ApplicationURL{
101103
AppSlugOrPort: "{{port}}",
102104
AgentName: workspaceAgent.Name,
@@ -153,10 +155,10 @@ func (a *ManifestAPI) GetManifest(ctx context.Context, _ *agentproto.GetManifest
153155
}, nil
154156
}
155157

156-
func dbUserSecretsToProto(userSecrets []database.UserSecret) map[string]*agentproto.Secret {
157-
userSecretsProto := make(map[string]*agentproto.Secret)
158-
for _, userSecret := range userSecrets {
159-
userSecretsProto[userSecret.Name] = &agentproto.Secret{
158+
func dbUserSecretsToProto(userSecrets []database.UserSecret) []*agentproto.Secret {
159+
userSecretsProto := make([]*agentproto.Secret, 0)
160+
for i, userSecret := range userSecrets {
161+
userSecretsProto[i] = &agentproto.Secret{
160162
Name: userSecret.Name,
161163
EnvName: userSecret.EnvName,
162164
FilePath: userSecret.FilePath,

codersdk/agentsdk/agentsdk.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ type Manifest struct {
114114
Metadata []codersdk.WorkspaceAgentMetadataDescription `json:"metadata"`
115115
Scripts []codersdk.WorkspaceAgentScript `json:"scripts"`
116116
Devcontainers []codersdk.WorkspaceAgentDevcontainer `json:"devcontainers"`
117+
UserSecrets []codersdk.UserSecretWithValue `json:"user_secrets"`
117118
}
118119

119120
type LogSource struct {

codersdk/agentsdk/convert.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ func ManifestFromProto(manifest *proto.Manifest) (Manifest, error) {
4343
if err != nil {
4444
return Manifest{}, xerrors.Errorf("error converting workspace agent devcontainers: %w", err)
4545
}
46+
userSecrets, err := SecretsFromProto(manifest.UserSecrets)
47+
if err != nil {
48+
return Manifest{}, xerrors.Errorf("error converting workspace agent devcontainers: %w", err)
49+
}
50+
4651
return Manifest{
4752
ParentID: parentID,
4853
AgentID: agentID,
@@ -62,6 +67,7 @@ func ManifestFromProto(manifest *proto.Manifest) (Manifest, error) {
6267
DisableDirectConnections: manifest.DisableDirectConnections,
6368
Metadata: MetadataDescriptionsFromProto(manifest.Metadata),
6469
Devcontainers: devcontainers,
70+
UserSecrets: userSecrets,
6571
}, nil
6672
}
6773

@@ -449,3 +455,24 @@ func ProtoFromDevcontainer(dc codersdk.WorkspaceAgentDevcontainer) *proto.Worksp
449455
ConfigPath: dc.ConfigPath,
450456
}
451457
}
458+
459+
func SecretsFromProto(pss []*proto.Secret) ([]codersdk.UserSecretWithValue, error) {
460+
ret := make([]codersdk.UserSecretWithValue, len(pss))
461+
for i, ps := range pss {
462+
secret, err := SecretFromProto(ps)
463+
if err != nil {
464+
return nil, xerrors.Errorf("parse secret %v: %w", i, err)
465+
}
466+
ret[i] = secret
467+
}
468+
return ret, nil
469+
}
470+
471+
func SecretFromProto(ps *proto.Secret) (codersdk.UserSecretWithValue, error) {
472+
return codersdk.UserSecretWithValue{
473+
Name: ps.Name,
474+
EnvName: ps.EnvName,
475+
FilePath: ps.FilePath,
476+
Value: ps.Value,
477+
}, nil
478+
}

codersdk/user_secrets.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ type UserSecret struct {
4141
UpdatedAt time.Time `json:"updated_at" format:"date-time"`
4242
}
4343

44+
type UserSecretWithValue struct {
45+
ID uuid.UUID `json:"id" format:"uuid"`
46+
UserID uuid.UUID `json:"user_id" format:"uuid"`
47+
Name string `json:"name"`
48+
Description string `json:"description,omitempty"`
49+
EnvName string `json:"env_name,omitempty"`
50+
FilePath string `json:"file_path,omitempty"`
51+
Value string `json:"value"`
52+
CreatedAt time.Time `json:"created_at" format:"date-time"`
53+
UpdatedAt time.Time `json:"updated_at" format:"date-time"`
54+
}
55+
4456
type UserSecretValue struct {
4557
Value string `json:"value"`
4658
}

site/src/api/typesGenerated.ts

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy