infisical

package module
v0.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2024 License: MIT Imports: 9 Imported by: 10

README

infisical-go

Infisical client library for golang.

Usage

Sample Code
package main

import (
	"log"

	"github.com/meinside/infisical-go"
)

// NOTE: put yours here
const (
	// authentication
	apiKey       = "ak.1234567890.abcdefghijk"
	clientID     = "abcdefgh-0987-6543-xyzw-0123abcd4567"
	clientSecret = "abcdefghijklmnopqrstuvwxyz0123456789"

	workspaceID = "012345abcdefg"
	environment = "dev"
	keyPath     = "/folder1/folder2"

	//verbose = true // => for dumping HTTP requests & responses
	verbose = false
)

func main() {
	// create a client,
	client := infisical.NewClient(apiKey, clientID, clientSecret)
	//client.SetAPIBaseURL("https://app.infisical.com") // change API base URL (eg. for self-hosted infisical servers)
	client.Verbose = verbose

	// fetch all secrets at a path,
	if res, err := client.ListSecrets(infisical.NewParamsListSecrets().
		SetWorkspaceID(workspaceID).
		SetEnvironment(environment).
		SetSecretPath(keyPath),
	); err == nil {
		log.Printf("retrieved %d secret(s) at path '%s'", len(res.Secrets), keyPath)

		for _, secret := range res.Secrets {
			// fetch a value directly with path + key
			key := keyPath + "/" + secret.SecretKey

			if value, err := client.RetrieveSecretValue(secret.Workspace, secret.Environment, secret.Type, key); err == nil {
				log.Printf("retrieved value for secret keypath '%s' = '%s'", key, value)
			} else {
				panic(err)
			}
		}
	} else {
		panic(err)
	}
}

Output:

2023/08/16 14:30:33 retrieved 2 secret(s) at path '/folder1/folder2'
2023/08/16 14:30:34 retrieved value for secret key '/folder1/folder2/KEY_A' = 'value A'
2023/08/16 14:30:36 retrieved value for secret key '/folder1/folder2/KEY_B' = 'value B'
Helper Functions

Use helper.Value() for retrieving values:

package main

import (
	"log"

	"github.com/meinside/infisical-go"
	"github.com/meinside/infisical-go/helper"
)

// NOTE: put yours here
const (
	clientID     = "abcdefgh-0987-6543-xyzw-0123abcd4567"
	clientSecret = "abcdefghijklmnopqrstuvwxyz0123456789"

	workspaceID   = "012345abcdefg"
	environment   = "dev"
	secretType    = infisical.SecretTypeShared
	secretKeyPath = "/folder1/folder2/KEY_A"
)

func main() {
	value, err := helper.Value(clientID, clientSecret, workspaceID, environment, secretType, secretKeyPath)
	if err != nil {
		panic(err)
	}

	log.Printf("retrieved value for key: %s = %s", secretKeyPath, value)
}

Implemented APIs

  • Users (./users.go)
  • Identities (./identities.go)
  • Universal Auth (./universal_auth.go)
  • Organizations (./organizations.go)
  • Projects (./projects.go)
  • Environments (./environments.go)
  • Folders (./folders.go)
  • Secrets (./secrets.go)
  • Secret imports (./secret_imports.go)
  • Audit Logs (./audit_logs.go)

Error Codes

There is no detailed description in error responses from API (for now),

so it's sometimes quite hard to find out what is going wrong.

In my case, the reasons for common HTTP errors were:

  • HTTP 400: there were some missing parameters, or some of them were wrong/misformatted.
  • HTTP 401: was trying to access something with expired or wrong API key and/or token.
  • HTTP 403: was trying to access things that were not accessible with current API key and/or token.
  • HTTP 404: was trying to access something that doesn't exist; wrong key-path or etc.

Test

With some environment variables:

export INFISICAL_API_KEY=ak.1234567890.abcdefghijk
export INFISICAL_WORKSPACE_ID=01234567-abcd-efgh-0987-ijklmnopqrst
export INFISICAL_CLIENT_ID=abcdefgh-0987-6543-xyzw-0123abcd4567
export INFISICAL_CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz0123456789
export INFISICAL_ENVIRONMENT=dev
#export VERBOSE=true

run test:

$ go test

CLI

I built a CLI for testing and personal use.

Known Issues / Todos

E2EE

E2EE features were removed due to the deprecation of related endpoints.

So projects with E2EE setting enabled may not work.

Version v0.2.0 will be the last version with E2EE support.

Documentation

Index

Constants

View Source
const (
	DefaultAPIBaseURL = "https://app.infisical.com"
	TimeoutSeconds    = 10
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AuthMethod

type AuthMethod int
const (
	AuthMethodNormal     AuthMethod = 0
	AuthMethodAPIKeyOnly AuthMethod = 1 << iota
	AuthMethodTokenOnly  AuthMethod = 1 << iota
)

type Client

type Client struct {
	Verbose bool // NOTE: set `true` for dumping http requests & responses
	// contains filtered or unexported fields
}

Client struct

func NewClient

func NewClient(apiKey, clientID, clientSecret string) *Client

NewClient creates a new client and return it.

func NewClientWithoutAPIKey

func NewClientWithoutAPIKey(clientID, clientSecret string) *Client

NewClientWithoutAPIKey creates and returns a new client only with tokens.

func (*Client) CreateFolder

func (c *Client) CreateFolder(workspaceID, environment, name string, params ParamsCreateFolder) (result FolderData, err error)

CreateFolder creates a new folder with given parameters.

https://infisical.com/docs/api-reference/endpoints/folders/create

func (*Client) CreateSecret

func (c *Client) CreateSecret(workspaceID, environment, secretKey, secretValue string, params ParamsCreateSecret) (err error)

CreateSecret creates a secret with given parameters.

https://infisical.com/docs/api-reference/endpoints/secrets/create

func (*Client) DeleteFolder

func (c *Client) DeleteFolder(workspaceID, environment, folderID string, params ParamsDeleteFolder) (result FolderData, err error)

DeleteFolder deletes a folder with given parameters.

https://infisical.com/docs/api-reference/endpoints/folders/delete

func (*Client) DeleteSecret

func (c *Client) DeleteSecret(workspaceID, environment, secretKey string, params ParamsDeleteSecret) (err error)

DeleteSecret deletes a secret for given parameters.

https://infisical.com/docs/api-reference/endpoints/secrets/delete

func (*Client) ListFolders

func (c *Client) ListFolders(workspaceID, environment string, params ParamsListFolders) (result FoldersData, err error)

ListFolders lists folders for given parameters.

https://infisical.com/docs/api-reference/endpoints/folders/list

func (*Client) ListSecrets

func (c *Client) ListSecrets(params ParamsListSecrets) (result SecretsData, err error)

ListSecrets lists all secrets for given parameters.

https://infisical.com/docs/api-reference/endpoints/secrets/list

func (*Client) RetrieveOrganizations

func (c *Client) RetrieveOrganizations() (result OrganizationsData, err error)

RetrieveOrganizations retrieves all my organizations.

(DEPRECATED)

https://infisical.com/docs/api-reference/endpoints/users/my-organizations

func (*Client) RetrieveProjects

func (c *Client) RetrieveProjects(organizationID string) (result ProjectsData, err error)

RetrieveProjects retrieves all workspaces for given organization id.

https://infisical.com/docs/api-reference/endpoints/organizations/workspaces

func (*Client) RetrieveSecret

func (c *Client) RetrieveSecret(workspaceID, environment, secretKey string, params ParamsRetrieveSecret) (result SecretData, err error)

RetrieveSecret retrieves a secret for given parameters.

https://infisical.com/docs/api-reference/endpoints/secrets/read-one

func (*Client) RetrieveSecretValue

func (c *Client) RetrieveSecretValue(workspaceID, environment string, secretType SecretType, secretKeyWithPath string) (value string, err error)

RetrieveSecretValue retrieves a secret value for given path + key.

Just a helper function for `RetrieveSecret`.

`secretKeyWithPath` is in form of: "/folder1/folder2/.../secret_key_name"

func (*Client) SetAPIBaseURL

func (c *Client) SetAPIBaseURL(baseURL string)

SetAPIBaseURL changes the `baseURL`.

(eg. for using in self-hosted infisical servers)

func (*Client) UpdateFolder

func (c *Client) UpdateFolder(workspaceID, environment, folderID, name string, params ParamsUpdateFolder) (result FolderData, err error)

UpdateFolder updates a folder with given parameters.

https://infisical.com/docs/api-reference/endpoints/folders/update

func (*Client) UpdateSecret

func (c *Client) UpdateSecret(workspaceID, environment, secretKey, secretValue string, params ParamsUpdateSecret) (err error)

UpdateSecret updates a secret with given parameters.

https://infisical.com/docs/api-reference/endpoints/secrets/update

type Folder

type Folder struct {
	CreatedAt     string  `json:"createdAt"`
	EnvironmentID string  `json:"envId"`
	ID            string  `json:"id"`
	Name          string  `json:"name"`
	ParentID      *string `json:"parentId,omitempty"`
	UpdatedAt     string  `json:"updatedAt"`
	Version       int     `json:"version,omitempty"`
}

Folder struct

type FolderData

type FolderData struct {
	Folder Folder `json:"folder"`
}

type FoldersData

type FoldersData struct {
	Folders []Folder `json:"folders"`
}

FoldersData struct for folders response

type Organization

type Organization struct {
	AuthEnforced bool   `json:"authEnforced"`
	CreatedAt    string `json:"createdAt"`
	CustomerID   string `json:"customerId"`
	ID           string `json:"id"`
	Name         string `json:"name"`
	Slug         string `json:"slug"`
	UpdatedAt    string `json:"updatedAt"`
}

Organization struct for one organization

(DEPRECATED)

https://infisical.com/docs/api-reference/endpoints/users/my-organizations

type OrganizationsData

type OrganizationsData struct {
	Organizations []Organization `json:"organizations"`
}

OrganizationsData struct for organizations response

type ParamsCreateFolder

type ParamsCreateFolder map[string]any

func NewParamsCreateFolder

func NewParamsCreateFolder() ParamsCreateFolder

func (ParamsCreateFolder) SetDirectory

func (p ParamsCreateFolder) SetDirectory(directory string) ParamsCreateFolder

func (ParamsCreateFolder) SetPath

type ParamsCreateSecret

type ParamsCreateSecret map[string]any

func NewParamsCreateSecret

func NewParamsCreateSecret() ParamsCreateSecret

func (ParamsCreateSecret) SetSecretComment

func (p ParamsCreateSecret) SetSecretComment(secretComment string) ParamsCreateSecret

func (ParamsCreateSecret) SetSecretPath

func (p ParamsCreateSecret) SetSecretPath(secretPath string) ParamsCreateSecret

func (ParamsCreateSecret) SetType

type ParamsDeleteFolder

type ParamsDeleteFolder map[string]any

func NewParamsDeleteFolder

func NewParamsDeleteFolder() ParamsDeleteFolder

func (ParamsDeleteFolder) SetDirectory

func (p ParamsDeleteFolder) SetDirectory(directory string) ParamsDeleteFolder

func (ParamsDeleteFolder) SetPath

type ParamsDeleteSecret

type ParamsDeleteSecret map[string]any

func NewParamsDeleteSecret

func NewParamsDeleteSecret() ParamsDeleteSecret

func (ParamsDeleteSecret) SetSecretPath

func (p ParamsDeleteSecret) SetSecretPath(secretPath string) ParamsDeleteSecret

func (ParamsDeleteSecret) SetType

type ParamsListFolders

type ParamsListFolders map[string]any

func NewParamsListFolders

func NewParamsListFolders() ParamsListFolders

func (ParamsListFolders) SetDirectory

func (p ParamsListFolders) SetDirectory(directory string) ParamsListFolders

func (ParamsListFolders) SetPath

func (p ParamsListFolders) SetPath(path string) ParamsListFolders

type ParamsListSecrets

type ParamsListSecrets map[string]any

func NewParamsListSecrets

func NewParamsListSecrets() ParamsListSecrets

func (ParamsListSecrets) SetEnvironment

func (p ParamsListSecrets) SetEnvironment(environment string) ParamsListSecrets

func (ParamsListSecrets) SetIncludeImports

func (p ParamsListSecrets) SetIncludeImports(includeImports bool) ParamsListSecrets

func (ParamsListSecrets) SetSecretPath

func (p ParamsListSecrets) SetSecretPath(secretPath string) ParamsListSecrets

func (ParamsListSecrets) SetWorkspaceID

func (p ParamsListSecrets) SetWorkspaceID(workspaceID string) ParamsListSecrets

type ParamsRetrieveSecret

type ParamsRetrieveSecret map[string]any

func NewParamsRetrieveSecret

func NewParamsRetrieveSecret() ParamsRetrieveSecret

func (ParamsRetrieveSecret) SetSecretPath

func (p ParamsRetrieveSecret) SetSecretPath(secretPath string) ParamsRetrieveSecret

func (ParamsRetrieveSecret) SetType

type ParamsUpdateFolder

type ParamsUpdateFolder map[string]any

func NewParamsUpdateFolder

func NewParamsUpdateFolder() ParamsUpdateFolder

func (ParamsUpdateFolder) SetDirectory

func (p ParamsUpdateFolder) SetDirectory(directory string) ParamsUpdateFolder

func (ParamsUpdateFolder) SetPath

type ParamsUpdateSecret

type ParamsUpdateSecret map[string]any

func NewParamsUpdateSecret

func NewParamsUpdateSecret() ParamsUpdateSecret

func (ParamsUpdateSecret) SetSecretComment

func (p ParamsUpdateSecret) SetSecretComment(comment string) ParamsUpdateSecret

func (ParamsUpdateSecret) SetSecretPath

func (p ParamsUpdateSecret) SetSecretPath(secretPath string) ParamsUpdateSecret

func (ParamsUpdateSecret) SetType

type ProjectsData

type ProjectsData struct {
	Workspaces []Workspace `json:"workspaces"`
}

ProjectsData struct for projects response

type Secret

type Secret struct {
	ID_           string     `json:"_id"`
	Environment   string     `json:"environment"`
	ID            string     `json:"id"`
	SecretComment *string    `json:"secretComment,omitempty"`
	SecretKey     string     `json:"secretKey"`
	SecretValue   string     `json:"secretValue"`
	Type          SecretType `json:"type"`
	Version       int        `json:"version"`
	Workspace     string     `json:"workspace"`
}

Secret struct for one secret

type SecretData

type SecretData struct {
	Secret Secret `json:"secret"`
}

SecretData struct for secret response

type SecretImport

type SecretImport struct {
	Environment string   `json:"environment"`
	FolderID    *string  `json:"folderId,omitempty"`
	SecretPath  string   `json:"secretPath"`
	Secrets     []Secret `json:"secrets"`
}

type SecretType

type SecretType string

SecretType type and constants

const (
	SecretTypeShared   SecretType = "shared"
	SecretTypePersonal SecretType = "personal"
)

type SecretsData

type SecretsData struct {
	Imports []SecretImport `json:"imports"`
	Secrets []Secret       `json:"secrets"`
}

SecretsData struct for secrets response

type UniversalAuthToken

type UniversalAuthToken struct {
	AccessToken       string `json:"accessToken"`
	AccessTokenMaxTTL int64  `json:"accessTokenMaxTTL"`
	ExpiresIn         int64  `json:"expiresIn"`
	TokenType         string `json:"tokenType"`
}

UniversalAuthToken is a struct of universal-auth token

type Workspace

type Workspace struct {
	ID           string                 `json:"id"`
	Name         string                 `json:"name"`
	Organization string                 `json:"organization"`
	Environments []WorkspaceEnvironment `json:"environments"`
}

Workspace struct for project

type WorkspaceEnvironment

type WorkspaceEnvironment struct {
	Name string `json:"name"`
	Slug string `json:"slug"`
}

WorkspaceEnvironment struct for environments

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL