mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 07:27:43 +00:00
Feat: Recursive mode support
This commit is contained in:
@@ -66,6 +66,10 @@ func CallGetSecretsV3(httpClient *resty.Client, request GetEncryptedSecretsV3Req
|
|||||||
httpRequest.SetQueryParam("secretPath", request.SecretPath)
|
httpRequest.SetQueryParam("secretPath", request.SecretPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if request.Recursive {
|
||||||
|
httpRequest.SetQueryParam("recursive", "true")
|
||||||
|
}
|
||||||
|
|
||||||
response, err := httpRequest.Get(fmt.Sprintf("%v/v3/secrets", API_HOST_URL))
|
response, err := httpRequest.Get(fmt.Sprintf("%v/v3/secrets", API_HOST_URL))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -148,19 +152,23 @@ func CallUniversalMachineIdentityRefreshAccessToken(request MachineIdentityUnive
|
|||||||
func CallGetDecryptedSecretsV3(httpClient *resty.Client, request GetDecryptedSecretsV3Request) (GetDecryptedSecretsV3Response, error) {
|
func CallGetDecryptedSecretsV3(httpClient *resty.Client, request GetDecryptedSecretsV3Request) (GetDecryptedSecretsV3Response, error) {
|
||||||
var decryptedSecretsResponse GetDecryptedSecretsV3Response
|
var decryptedSecretsResponse GetDecryptedSecretsV3Response
|
||||||
|
|
||||||
response, err := httpClient.
|
req := httpClient.
|
||||||
R().
|
R().
|
||||||
SetResult(&decryptedSecretsResponse).
|
SetResult(&decryptedSecretsResponse).
|
||||||
SetHeader("User-Agent", USER_AGENT_NAME).
|
SetHeader("User-Agent", USER_AGENT_NAME).
|
||||||
SetQueryParam("secretPath", request.SecretPath).
|
SetQueryParam("secretPath", request.SecretPath).
|
||||||
SetQueryParam("workspaceSlug", request.ProjectSlug).
|
SetQueryParam("workspaceSlug", request.ProjectSlug).
|
||||||
SetQueryParam("environment", request.Environment).
|
SetQueryParam("environment", request.Environment)
|
||||||
Get(fmt.Sprintf("%v/v3/secrets/raw", API_HOST_URL))
|
|
||||||
|
if request.Recursive {
|
||||||
|
req.SetQueryParam("recursive", "true")
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := req.Get(fmt.Sprintf("%v/v3/secrets/raw", API_HOST_URL))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return GetDecryptedSecretsV3Response{}, fmt.Errorf("CallGetDecryptedSecretsV3: Unable to complete api request [err=%s]", err)
|
return GetDecryptedSecretsV3Response{}, fmt.Errorf("CallGetDecryptedSecretsV3: Unable to complete api request [err=%s]", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if response.IsError() {
|
if response.IsError() {
|
||||||
return GetDecryptedSecretsV3Response{}, fmt.Errorf("CallGetDecryptedSecretsV3: Unsuccessful response: [response=%s]", response)
|
return GetDecryptedSecretsV3Response{}, fmt.Errorf("CallGetDecryptedSecretsV3: Unsuccessful response: [response=%s]", response)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ type GetEncryptedWorkspaceKeyResponse struct {
|
|||||||
type GetEncryptedSecretsV3Request struct {
|
type GetEncryptedSecretsV3Request struct {
|
||||||
Environment string `json:"environment"`
|
Environment string `json:"environment"`
|
||||||
WorkspaceId string `json:"workspaceId"`
|
WorkspaceId string `json:"workspaceId"`
|
||||||
|
Recursive bool `json:"recursive"`
|
||||||
SecretPath string `json:"secretPath"`
|
SecretPath string `json:"secretPath"`
|
||||||
IncludeImport bool `json:"include_imports"`
|
IncludeImport bool `json:"include_imports"`
|
||||||
ETag string `json:"etag,omitempty"`
|
ETag string `json:"etag,omitempty"`
|
||||||
@@ -100,6 +101,7 @@ type GetDecryptedSecretsV3Request struct {
|
|||||||
ProjectSlug string `json:"workspaceSlug"`
|
ProjectSlug string `json:"workspaceSlug"`
|
||||||
Environment string `json:"environment"`
|
Environment string `json:"environment"`
|
||||||
SecretPath string `json:"secretPath"`
|
SecretPath string `json:"secretPath"`
|
||||||
|
Recursive bool `json:"recursive"`
|
||||||
ETag string `json:"etag,omitempty"`
|
ETag string `json:"etag,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ func GetPlainTextSecretsViaUniversalAuth(accessToken string, etag string, secret
|
|||||||
secretsResponse, err := api.CallGetDecryptedSecretsV3(httpClient, api.GetDecryptedSecretsV3Request{
|
secretsResponse, err := api.CallGetDecryptedSecretsV3(httpClient, api.GetDecryptedSecretsV3Request{
|
||||||
ProjectSlug: secretScope.ProjectSlug,
|
ProjectSlug: secretScope.ProjectSlug,
|
||||||
Environment: secretScope.EnvSlug,
|
Environment: secretScope.EnvSlug,
|
||||||
|
Recursive: secretScope.Recursive,
|
||||||
SecretPath: secretScope.SecretsPath,
|
SecretPath: secretScope.SecretsPath,
|
||||||
ETag: etag,
|
ETag: etag,
|
||||||
})
|
})
|
||||||
@@ -85,7 +86,7 @@ func GetPlainTextSecretsViaUniversalAuth(accessToken string, etag string, secret
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string, envSlug string, secretPath string) ([]model.SingleEnvironmentVariable, model.RequestUpdateUpdateDetails, error) {
|
func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string, envSlug string, secretPath string, recursive bool) ([]model.SingleEnvironmentVariable, model.RequestUpdateUpdateDetails, error) {
|
||||||
serviceTokenParts := strings.SplitN(fullServiceToken, ".", 4)
|
serviceTokenParts := strings.SplitN(fullServiceToken, ".", 4)
|
||||||
if len(serviceTokenParts) < 4 {
|
if len(serviceTokenParts) < 4 {
|
||||||
return nil, model.RequestUpdateUpdateDetails{}, fmt.Errorf("invalid service token entered. Please double check your service token and try again")
|
return nil, model.RequestUpdateUpdateDetails{}, fmt.Errorf("invalid service token entered. Please double check your service token and try again")
|
||||||
@@ -106,6 +107,7 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string, en
|
|||||||
encryptedSecretsResponse, err := api.CallGetSecretsV3(httpClient, api.GetEncryptedSecretsV3Request{
|
encryptedSecretsResponse, err := api.CallGetSecretsV3(httpClient, api.GetEncryptedSecretsV3Request{
|
||||||
WorkspaceId: serviceTokenDetails.Workspace,
|
WorkspaceId: serviceTokenDetails.Workspace,
|
||||||
Environment: envSlug,
|
Environment: envSlug,
|
||||||
|
Recursive: recursive,
|
||||||
ETag: etag,
|
ETag: etag,
|
||||||
SecretPath: secretPath,
|
SecretPath: secretPath,
|
||||||
})
|
})
|
||||||
@@ -376,7 +378,7 @@ func ExpandSecrets(secrets []model.SingleEnvironmentVariable, infisicalToken str
|
|||||||
|
|
||||||
if crossRefSec, ok := crossEnvRefSecs[uniqKey]; !ok {
|
if crossRefSec, ok := crossEnvRefSecs[uniqKey]; !ok {
|
||||||
// if not in cross reference cache, fetch it from server
|
// if not in cross reference cache, fetch it from server
|
||||||
refSecs, _, err := GetPlainTextSecretsViaServiceToken(infisicalToken, "", env, secPath)
|
refSecs, _, err := GetPlainTextSecretsViaServiceToken(infisicalToken, "", env, secPath, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Could not fetch secrets in environment: %s secret-path: %s", env, secPath)
|
fmt.Printf("Could not fetch secrets in environment: %s secret-path: %s", env, secPath)
|
||||||
// HandleError(err, fmt.Sprintf("Could not fetch secrets in environment: %s secret-path: %s", env, secPath), "If you are using a service token to fetch secrets, please ensure it is valid")
|
// HandleError(err, fmt.Sprintf("Could not fetch secrets in environment: %s secret-path: %s", env, secPath), "If you are using a service token to fetch secrets, please ensure it is valid")
|
||||||
|
|||||||
Reference in New Issue
Block a user