helpers/vault/auth_methods/jwt/auth.go (60 lines of code) (raw):

package jwt import ( "fmt" "path" "gitlab.com/gitlab-org/gitlab-runner/helpers/vault" "gitlab.com/gitlab-org/gitlab-runner/helpers/vault/auth_methods" ) const methodName = "jwt" const ( jwtKey = "jwt" roleKey = "role" ) var ( requiredPayloadFields = []string{ jwtKey, } allowedPayloadFields = []string{ jwtKey, roleKey, } ) type method struct { path string data map[string]interface{} token string } func NewMethod(path string, data auth_methods.Data) (vault.AuthMethod, error) { newData, err := data.Filter(requiredPayloadFields, allowedPayloadFields) if err != nil { return nil, fmt.Errorf("filtering auth method configuration: %w", err) } a := &method{ path: path, data: newData, } return a, nil } func (a *method) Name() string { return methodName } func (a *method) Authenticate(client vault.Client) error { authPath := path.Join("auth", a.path, "login") authPayload := a.data result, err := client.Write(authPath, authPayload) if err != nil { return fmt.Errorf("writing to Vault: %w", err) } token, err := result.TokenID() if err != nil { return fmt.Errorf("getting token from the authentication response: %w", err) } a.token = token return nil } func (a *method) Token() string { return a.token } func init() { auth_methods.MustRegisterFactory(methodName, NewMethod) }