From 229599b8de3a34333bab0a34182d858e51846ae9 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 23 Jul 2024 15:27:11 +0200 Subject: [PATCH] docs: ruby sdk documentation --- docs/mint.json | 1 + docs/sdks/languages/ruby.mdx | 437 +++++++++++++++++++++++++++++++++++ docs/sdks/overview.mdx | 4 + 3 files changed, 442 insertions(+) create mode 100644 docs/sdks/languages/ruby.mdx diff --git a/docs/mint.json b/docs/mint.json index f03320e1e..9b1a64f6b 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -413,6 +413,7 @@ "sdks/languages/node", "sdks/languages/python", "sdks/languages/go", + "sdks/languages/ruby", "sdks/languages/java", "sdks/languages/csharp" ] diff --git a/docs/sdks/languages/ruby.mdx b/docs/sdks/languages/ruby.mdx new file mode 100644 index 000000000..abbfd9796 --- /dev/null +++ b/docs/sdks/languages/ruby.mdx @@ -0,0 +1,437 @@ +--- +title: "Infisical Ruby SDK" +sidebarTitle: "Ruby" +icon: "diamond" +--- + + + +If you're working with Ruby , the official [Infisical Ruby SDK](https://github.com/infisical/sdk) package is the easiest way to fetch and work with secrets for your application. + +- [Ruby Package](https://rubygems.org/gems/infisical-sdk) +- [Github Repository](https://github.com/infisical/sdk) + +## Basic Usage + +```ruby +require 'infisical-sdk' + +# 1. Create the Infisical client +infisical = InfisicalSDK::InfisicalClient.new('https://app.infisical.com') + +infisical.auth.universal_auth(client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET') + +test_secret = infisical.secrets.get( + secret_name: 'API_KEY', + project_id: 'project-id', + environment: 'dev' +) +puts "Secret: #{single_test_secret}" +``` + +This example demonstrates how to use the Infisical Ruby SDK in a simple Ruby application. The application retrieves a secret named `API_KEY` from the `dev` environment of the `YOUR_PROJECT_ID` project. + + + We do not recommend hardcoding your [Machine Identity Tokens](/platform/identities/overview). Setting it as an environment variable would be best. + + +# Installation + +```console +$ gem install infisical-sdk +``` +# Configuration + +Import the SDK and create a client instance. + +```ruby +infisical = InfisicalSDK::InfisicalClient.new('https://app.infisical.com') # Optional parameter, default is https://api.infisical.com +``` + +### ClientSettings methods + + + + + The URL of the Infisical API. Default is `https://api.infisical.com`. + + + + How long the client should cache secrets for. Default is 5 minutes. Disable by setting to 0. + + + + + +### Authentication + +The SDK supports a variety of authentication methods. The most common authentication method is Universal Auth, which uses a client ID and client secret to authenticate. + +#### Universal Auth + +**Using environment variables** + +Call `auth.universal_auth()` with empty arguments to use the following environment variables: + +- `INFISICAL_UNIVERSAL_AUTH_CLIENT_ID` - Your machine identity client ID. +- `INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET` - Your machine identity client secret. + +**Using the SDK directly** +```ruby +infisical.auth.universal_auth(client_id: 'your-client-id', client_secret: 'your-client-secret') +``` + +#### GCP ID Token Auth + + Please note that this authentication method will only work if you're running your application on Google Cloud Platform. + Please [read more](/documentation/platform/identities/gcp-auth) about this authentication method. + + +**Using environment variables** + +Call `.auth.gcp_id_token_auth()` with empty arguments to use the following environment variables: + +- `INFISICAL_GCP_AUTH_IDENTITY_ID` - Your Infisical Machine Identity ID. + +**Using the SDK directly** +```ruby +infisical.auth.gcp_id_token_auth(identity_id: 'MACHINE_IDENTITY_ID') +``` + +#### GCP IAM Auth + +**Using environment variables** + +Call `.auth.gcp_iam_auth()` with empty arguments to use the following environment variables: + +- `INFISICAL_GCP_IAM_AUTH_IDENTITY_ID` - Your Infisical Machine Identity ID. +- `INFISICAL_GCP_IAM_SERVICE_ACCOUNT_KEY_FILE_PATH` - The path to your GCP service account key file. + +**Using the SDK directly** +```ruby +infisical.auth.gcp_iam_auth(identity_id: 'MACHINE_IDENTITY_ID', service_account_key_file_path: 'SERVICE_ACCOUNT_KEY_FILE_PATH') +``` + +#### AWS IAM Auth + + Please note that this authentication method will only work if you're running your application on AWS. + Please [read more](/documentation/platform/identities/aws-auth) about this authentication method. + + +**Using environment variables** + +Call `.auth.aws_iam_auth()` with empty arguments to use the following environment variables: + +- `INFISICAL_AWS_IAM_AUTH_IDENTITY_ID` - Your Infisical Machine Identity ID. + +**Using the SDK directly** +```ruby +infisical.auth.aws_iam_auth(identity_id: 'MACHINE_IDENTITY_ID') +``` + + +#### Azure Auth + + Please note that this authentication method will only work if you're running your application on Azure. + Please [read more](/documentation/platform/identities/azure-auth) about this authentication method. + + +**Using environment variables** + +Call `.auth.azure_auth()` with empty arguments to use the following environment variables: + +- `INFISICAL_AZURE_AUTH_IDENTITY_ID` - Your Infisical Machine Identity ID. + +**Using the SDK directly** +```ruby +infisical.auth.azure_auth(identity_id: 'MACHINE_IDENTITY_ID') +``` + +#### Kubernetes Auth + + Please note that this authentication method will only work if you're running your application on Kubernetes. + Please [read more](/documentation/platform/identities/kubernetes-auth) about this authentication method. + + +**Using environment variables** + +Call `.auth.kubernetes_auth()` with empty arguments to use the following environment variables: + +- `INFISICAL_KUBERNETES_IDENTITY_ID` - Your Infisical Machine Identity ID. +- `INFISICAL_KUBERNETES_SERVICE_ACCOUNT_TOKEN_PATH_ENV_NAME` - The environment variable name that contains the path to the service account token. This is optional and will default to `/var/run/secrets/kubernetes.io/serviceaccount/token`. + +**Using the SDK directly** +```ruby +# Service account token path will default to /var/run/secrets/kubernetes.io/serviceaccount/token if empty value is passed +infisical.auth.kubernetes_auth(identity_id: 'MACHINE_IDENTITY_ID', service_account_token_path: nil) +``` + +## Working with Secrets + +### client.secrets.list(options) + +```ruby +secrets = infisical.secrets.list( + project_id: 'PROJECT_ID', + environment: 'dev', + path: '/foo/bar', +) +``` + +Retrieve all secrets within the Infisical project and environment that client is connected to + +#### Parameters + + + + + The slug name (dev, prod, etc) of the environment from where secrets should be fetched from. + + + + The project ID where the secret lives in. + + + + The path from where secrets should be fetched from. + + + + Whether or not to set the fetched secrets to the process environment. If true, you can access the secrets like so `System.getenv("SECRET_NAME")`. + + + + Whether or not to include imported secrets from the current path. Read about [secret import](/documentation/platform/secret-reference) + + + + Whether or not to fetch secrets recursively from the specified path. Please note that there's a 20-depth limit for recursive fetching. + + + + Whether or not to expand secret references in the fetched secrets. Read about [secret reference](/documentation/platform/secret-reference) + + + + + +### client.secrets.get(options) + +```ruby +secret = infisical.secrets.get( + secret_name: 'API_KEY', + project_id: project_id, + environment: env_slug +) +``` + +Retrieve a secret from Infisical. + +By default, `Secrets().Retrieve()` fetches and returns a shared secret. + +#### Parameters + + + + + The key of the secret to retrieve. + + + The project ID where the secret lives in. + + + The slug name (dev, prod, etc) of the environment from where secrets should be fetched from. + + + The path from where secret should be fetched from. + + + The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared". + + + + +### client.secrets.create(options) + +```ruby +new_secret = infisical.secrets.create( + secret_name: 'NEW_SECRET', + secret_value: 'SECRET_VALUE', + project_id: 'PROJECT_ID', + environment: 'dev', +) +``` + +Create a new secret in Infisical. + +#### Parameters + + + + + The key of the secret to create. + + + The value of the secret. + + + A comment for the secret. + + + The project ID where the secret lives in. + + + The slug name (dev, prod, etc) of the environment from where secrets should be fetched from. + + + The path from where secret should be created. + + + The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared". + + + + +### client.secrets.update(options) + +```ruby +updated_secret = infisical.secrets.update( + secret_name: 'SECRET_KEY_TO_UPDATE', + secret_value: 'NEW_SECRET_VALUE', + project_id: 'PROJECT_ID', + environment: 'dev', +) +``` + +Update an existing secret in Infisical. + +#### Parameters + + + + + The key of the secret to update. + + + The new value of the secret. + + + Whether or not to skip multiline encoding for the new secret value. + + + The project ID where the secret lives in. + + + The slug name (dev, prod, etc) of the environment from where secrets should be fetched from. + + + The path from where secret should be updated. + + + The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared". + + + + +### client.secrets.delete(options) + +```ruby +deleted_secret = infisical.secrets.delete( + secret_name: 'SECRET_TO_DELETE', + project_id: 'PROJECT_ID', + environment: 'dev', +) +``` + +Delete a secret in Infisical. + +#### Parameters + + + + + The key of the secret to update. + + + The project ID where the secret lives in. + + + The slug name (dev, prod, etc) of the environment from where secrets should be fetched from. + + + The path from where secret should be deleted. + + + The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared". + + + + + +## Cryptography + +### Create a symmetric key + +Create a base64-encoded, 256-bit symmetric key to be used for encryption/decryption. + +```ruby +key = infisical.cryptography.create_symmetric_key +``` + +#### Returns (string) +`key` (string): A base64-encoded, 256-bit symmetric key, that can be used for encryption/decryption purposes. + +### Encrypt symmetric +```ruby +encrypted_data = infisical.cryptography.encrypt_symmetric(data: "Hello World!", key: key) +``` + +#### Methods + + + + + The plaintext you want to encrypt. + + + The symmetric key to use for encryption. + + + + +#### Returns (object) +`tag` (string): A base64-encoded, 128-bit authentication tag. +`iv` (string): A base64-encoded, 96-bit initialization vector. +`ciphertext` (string): A base64-encoded, encrypted ciphertext. + + +### Decrypt symmetric +```ruby +decrypted_data = infisical.cryptography.decrypt_symmetric( + ciphertext: encrypted_data['ciphertext'], + iv: encrypted_data['iv'], + tag: encrypted_data['tag'], + key: key +) +``` + +#### Methods + + + + The ciphertext you want to decrypt. + + + The symmetric key to use for encryption. + + + The initialization vector to use for decryption. + + + The authentication tag to use for decryption. + + + + +#### Returns (string) +`Plaintext` (string): The decrypted plaintext. \ No newline at end of file diff --git a/docs/sdks/overview.mdx b/docs/sdks/overview.mdx index 3f779f187..4ab664680 100644 --- a/docs/sdks/overview.mdx +++ b/docs/sdks/overview.mdx @@ -25,6 +25,10 @@ From local development to production, Infisical SDKs provide the easiest way for Manage secrets for your C#/.NET application on demand + + + Manage secrets for your Ruby application on demand + ## FAQ