Skip to content

GetSecretsRequest carries no caller context, making project-local plugin backends impossible #551

@tonsV2

Description

@tonsV2

The current GetSecretsRequest proto contains only pattern:

message GetSecretsRequest {
  string pattern = 1;
}

This means a plugin daemon has no way to know who is asking or from where. For secret backends that are inherently project-local (encrypted files checked into a repo, .env files co-located with compose.yaml) this is a dead end. The plugin either serves a single global config or has to resort to global mutable state (a shared config file) that breaks under concurrent projects.

Concrete example: a SOPS plugin that decrypts secrets.sops.env files. The file lives in the project directory. The plugin needs to know the calling project's working directory to find it. There is no way to get this today.

Proposal: add optional caller context to GetSecretsRequest:

message GetSecretsRequest {
  string pattern = 1;
  optional CallerContext context = 2;
}

message CallerContext {
  string working_directory = 1;
  string compose_project   = 2;
  map<string, string> labels = 3;
}

Docker and Compose already know the project directory at secret resolution time. Passing it through costs nothing and unlocks an entire class of local-first secret backends.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions