Skip to content
Open
260 changes: 36 additions & 224 deletions packages/cmd/dynamic_secrets.go

Large diffs are not rendered by default.

76 changes: 16 additions & 60 deletions packages/cmd/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,69 +34,25 @@ var exportCmd = &cobra.Command{
Example: "infisical export --env=prod --format=json > secrets.json\ninfisical export --env=prod --format=json --output-file=secrets.json",
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
environmentName, _ := cmd.Flags().GetString("env")
if !cmd.Flags().Changed("env") {
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
}

shouldExpandSecrets, err := cmd.Flags().GetBool("expand")
if err != nil {
util.HandleError(err)
}

includeImports, err := cmd.Flags().GetBool("include-imports")
if err != nil {
util.HandleError(err)
}

projectId, err := cmd.Flags().GetString("projectId")
if err != nil {
util.HandleError(err)
}

token, err := util.GetInfisicalToken(cmd)
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
token, projectConfig := util.GetTokenAndProjectConfigFromCommand(cmd)

format, err := cmd.Flags().GetString("format")
if err != nil {
util.HandleError(err)
}
shouldExpandSecrets := util.GetBooleanArgument(cmd, "expand", "Unable to parse flag --expand")

templatePath, err := cmd.Flags().GetString("template")
if err != nil {
util.HandleError(err)
}
includeImports := util.GetBooleanArgument(cmd, "include-imports", "Unable to parse flag --include-imports")

secretOverriding, err := cmd.Flags().GetBool("secret-overriding")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
format := util.GetStringArgument(cmd, "format", "Unable to parse flag --format")

tagSlugs, err := cmd.Flags().GetString("tags")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
templatePath := util.GetStringArgument(cmd, "template", "Unable to parse flag --template")

secretsPath, err := cmd.Flags().GetString("path")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
secretOverriding := util.GetBooleanArgument(cmd, "secret-overriding", "Unable to parse flag --secret-overriding")

outputFile, err := cmd.Flags().GetString("output-file")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
outputFile := util.GetStringArgument(cmd, "output-file", "Unable to parse flag --output-file")

request := models.GetAllSecretsParameters{
Environment: environmentName,
TagSlugs: tagSlugs,
WorkspaceId: projectId,
SecretsPath: secretsPath,
Environment: projectConfig.Environment,
TagSlugs: projectConfig.TagSlugs,
WorkspaceId: projectConfig.WorkspaceId,
SecretsPath: projectConfig.SecretsPath,
IncludeImport: includeImports,
ExpandSecretReferences: shouldExpandSecrets,
}
Expand Down Expand Up @@ -132,7 +88,7 @@ var exportCmd = &cobra.Command{
return
}

secrets, err := util.GetAllEnvironmentVariables(request, "")
secrets, err := util.GetAllEnvironmentVariables(request)
if err != nil {
util.HandleError(err, "Unable to fetch secrets")
}
Expand All @@ -144,7 +100,7 @@ var exportCmd = &cobra.Command{
}

var output string
secrets = util.FilterSecretsByTag(secrets, tagSlugs)
secrets = util.FilterSecretsByTag(secrets, projectConfig.TagSlugs)
secrets = util.SortSecretsByKeys(secrets)

output, err = formatEnvs(secrets, format)
Expand Down Expand Up @@ -207,7 +163,7 @@ func resolveOutputPath(outputFile, format string) (string, error) {
defaultFilename := getDefaultFilename(format)
return filepath.Join(absPath, defaultFilename), nil
}

// Ensure the parent directory exists
parentDir := filepath.Dir(absPath)
if _, err := os.Stat(parentDir); os.IsNotExist(err) {
Expand All @@ -216,7 +172,7 @@ func resolveOutputPath(outputFile, format string) (string, error) {
return "", fmt.Errorf("failed to create parent directory %s: %w", parentDir, err)
}
}

// If no extension provided, add default extension based on format
if filepath.Ext(absPath) == "" {
ext := getDefaultExtension(format)
Expand Down Expand Up @@ -357,4 +313,4 @@ func escapeNewLinesIfRequired(env models.SingleEnvironmentVariable) string {
}

return env.Value
}
}
130 changes: 18 additions & 112 deletions packages/cmd/folder.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,36 +24,15 @@ var getCmd = &cobra.Command{
Use: "get",
Short: "Get folders in a directory",
Run: func(cmd *cobra.Command, args []string) {
token, projectConfig := util.GetTokenAndProjectConfigFromCommand(cmd)

environmentName, _ := cmd.Flags().GetString("env")
if !cmd.Flags().Changed("env") {
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
}
foldersPath := util.GetStringArgument(cmd, "path", "Unable to parse flag --path")

projectId, err := cmd.Flags().GetString("projectId")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}

token, err := util.GetInfisicalToken(cmd)
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
foldersPath, err := cmd.Flags().GetString("path")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
outputFormat, err := cmd.Flags().GetString("output")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
outputFormat := util.GetStringArgument(cmd, "output", "Unable to parse flag --output")

request := models.GetAllFoldersParameters{
Environment: environmentName,
WorkspaceId: projectId,
Environment: projectConfig.Environment,
WorkspaceId: projectConfig.WorkspaceId,
FoldersPath: foldersPath,
}

Expand Down Expand Up @@ -97,61 +76,23 @@ var createCmd = &cobra.Command{
Use: "create",
Short: "Create a folder",
Run: func(cmd *cobra.Command, args []string) {
environmentName, _ := cmd.Flags().GetString("env")
if !cmd.Flags().Changed("env") {
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
}
token, projectConfig := util.GetTokenAndProjectConfigFromCommand(cmd)

token, err := util.GetInfisicalToken(cmd)
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
folderPath := util.GetStringArgument(cmd, "path", "Unable to parse flag --path")

projectId, err := cmd.Flags().GetString("projectId")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
folderName := util.GetStringArgument(cmd, "name", "Unable to parse flag --name")

folderPath, err := cmd.Flags().GetString("path")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}

folderName, err := cmd.Flags().GetString("name")
if err != nil {
util.HandleError(err, "Unable to parse name flag")
}

outputFormat, err := cmd.Flags().GetString("output")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
outputFormat := util.GetStringArgument(cmd, "output", "Unable to parse flag --output")

if folderName == "" {
util.HandleError(errors.New("invalid folder name, folder name cannot be empty"))
}

if err != nil {
util.HandleError(err, "Unable to get workspace file")
}

if projectId == "" {
workspaceFile, err := util.GetWorkSpaceFromFile()
if err != nil {
util.PrintErrorMessageAndExit("Please either run infisical init to connect to a project or pass in project id with --projectId flag")
}

projectId = workspaceFile.WorkspaceId
}

params := models.CreateFolderParameters{
FolderName: folderName,
Environment: environmentName,
Environment: projectConfig.Environment,
FolderPath: folderPath,
WorkspaceId: projectId,
WorkspaceId: projectConfig.WorkspaceId,
}

if token != nil && (token.Type == util.SERVICE_TOKEN_IDENTIFIER || token.Type == util.UNIVERSAL_AUTH_TOKEN_IDENTIFIER) {
Expand Down Expand Up @@ -188,65 +129,30 @@ var deleteCmd = &cobra.Command{
Use: "delete",
Short: "Delete a folder",
Run: func(cmd *cobra.Command, args []string) {
token, projectConfig := util.GetTokenAndProjectConfigFromCommand(cmd)

environmentName, _ := cmd.Flags().GetString("env")
if !cmd.Flags().Changed("env") {
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
}

token, err := util.GetInfisicalToken(cmd)
if err != nil {
util.HandleError(err, "Unable to parse flag")
}

projectId, err := cmd.Flags().GetString("projectId")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}

folderPath, err := cmd.Flags().GetString("path")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
folderPath := util.GetStringArgument(cmd, "path", "Unable to parse flag --path")

folderName, err := cmd.Flags().GetString("name")
if err != nil {
util.HandleError(err, "Unable to parse name flag")
}
folderName := util.GetStringArgument(cmd, "name", "Unable to parse flag --name")

outputFormat, err := cmd.Flags().GetString("output")
if err != nil {
util.HandleError(err, "Unable to parse flag")
}
outputFormat := util.GetStringArgument(cmd, "output", "Unable to parse flag --output")

if folderName == "" {
util.HandleError(errors.New("invalid folder name, folder name cannot be empty"))
}

if projectId == "" {
workspaceFile, err := util.GetWorkSpaceFromFile()
if err != nil {
util.PrintErrorMessageAndExit("Please either run infisical init to connect to a project or pass in project id with --projectId flag")
}

projectId = workspaceFile.WorkspaceId
}

params := models.DeleteFolderParameters{
FolderName: folderName,
WorkspaceId: projectId,
Environment: environmentName,
WorkspaceId: projectConfig.WorkspaceId,
Environment: projectConfig.Environment,
FolderPath: folderPath,
}

if token != nil && (token.Type == util.SERVICE_TOKEN_IDENTIFIER || token.Type == util.UNIVERSAL_AUTH_TOKEN_IDENTIFIER) {
params.InfisicalToken = token.Token
}

_, err = util.DeleteFolder(params)
_, err := util.DeleteFolder(params)
if err != nil {
util.HandleError(err, "Unable to delete folder")
}
Expand Down
1 change: 1 addition & 0 deletions packages/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ func init() {
rootCmd.PersistentFlags().StringP("log-level", "l", "info", "log level (trace, debug, info, warn, error, fatal)")
rootCmd.PersistentFlags().Bool("telemetry", true, "Infisical collects non-sensitive telemetry data to enhance features and improve user experience. Participation is voluntary")
rootCmd.PersistentFlags().StringVar(&config.INFISICAL_URL, "domain", fmt.Sprintf("%s/api", util.INFISICAL_DEFAULT_US_URL), "Point the CLI to your own backend [can also set via environment variable name: INFISICAL_API_URL]")
rootCmd.PersistentFlags().String("project-config-dir", "", "The directory where the .infisical.json resides")
rootCmd.PersistentFlags().Bool("silent", false, "Disable output of tip/info messages. Useful when running in scripts or CI/CD pipelines.")
rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
silent, err := cmd.Flags().GetBool("silent")
Expand Down
Loading