diff --git a/docs/sdks/languages/csharp.mdx b/docs/sdks/languages/csharp.mdx new file mode 100644 index 000000000..70c583a86 --- /dev/null +++ b/docs/sdks/languages/csharp.mdx @@ -0,0 +1,391 @@ +--- +title: "C#" +icon: "C#" +--- + +If you're working with C#, the official [Infisical C# SDK](https://github.com/Infisical/sdk/tree/main/languages/csharp) package is the easiest way to fetch and work with secrets for your application. + +## Basic Usage + +```cs +using Infisical.Sdk; + +namespace Example +{ + class Program + { + static void Main(string[] args) + { + + var settings = new ClientSettings + { + ClientId = "CLIENT_ID", + ClientSecret = "CLIENT_SECRET", + // SiteUrl = "http://localhost:8080", <-- This line can be omitted if you're using Infisical Cloud. + }; + var infisical = new InfisicalClient(settings); + + var options = new GetSecretOptions + { + SecretName = "TEST", + ProjectId = "PROJECT_ID", + Environment = "dev", + }; + var secret = infisical.GetSecret(options); + + + Console.WriteLine($"The value of secret '{secret.SecretKey}', is: {secret.SecretValue}"); + } + } +} +``` + +This example demonstrates how to use the Infisical C# SDK in a C# application. The application retrieves a secret named `TEST` from the `dev` environment of the `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 + +Run `npm` to add `@infisical/sdk` to your project. + +```console +$ dotnet add package Infisical.Sdk +``` +# Configuration + +Import the SDK and create a client instance with your [Machine Identity](/platform/identities/universal-auth). + +```cs +using Infisical.Sdk; + +namespace Example +{ + class Program + { + static void Main(string[] args) + { + + var settings = new ClientSettings + { + ClientId = "CLIENT_ID", + ClientSecret = "CLIENT_SECRET", + }; + + var infisical = new InfisicalClient(settings); // <-- Your SDK instance! + } + } +} +``` + +### ClientSettings methods + + + + + Your machine identity client ID. + + + Your machine identity client secret. + + + + An access token obtained from the machine identity login endpoint. + + + + Time-to-live (in seconds) for refreshing cached secrets. + If manually set to 0, caching will be disabled, this is not recommended. + + + + Your self-hosted absolute site URL including the protocol (e.g. `https://app.infisical.com`) + + + + + +### Caching + +To reduce the number of API requests, the SDK temporarily stores secrets it retrieves. By default, a secret remains cached for 5 minutes after it's first fetched. Each time it's fetched again, this 5-minute timer resets. You can adjust this caching duration by setting the "cacheTTL" option when creating the client. + +## Working with Secrets + +### client.ListSecrets(options) + +```cs +var options = new ListSecretsOptions +{ + ProjectId = "PROJECT_ID", + Environment = "dev", + Path = "/foo/bar", + AttachToProcessEnv = false, +}; + +var secrets = infisical.ListSecrets(options); +``` + +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) + + + + + +### client.GetSecret(options) + +```cs +var options = new GetSecretOptions + { + SecretName = "AAAA", + ProjectId = "659c781eb2d4fe3e307b77bd", + Environment = "dev", + }; +var secret = infisical.GetSecret(options); +``` + +Retrieve a secret from Infisical. + +By default, `GetSecret()` 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.CreateSecret(options) + +```cs +var options = new CreateSecretOptions { + Environment = "dev", + ProjectId = "PROJECT_ID", + + SecretName = "NEW_SECRET", + SecretValue = "NEW_SECRET_VALUE", + SecretComment = "This is a new secret", +}; + +var newSecret = infisical.CreateSecret(options); +``` + +Create a new secret in Infisical. + +#### Parameters + + + + + The key of the secret to create. + + + The value of 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.UpdateSecret(options) + +```cs +var options = new UpdateSecretOptions { + Environment = "dev", + ProjectId = "PROJECT_ID", + + SecretName = "SECRET_TO_UPDATE", + SecretValue = "NEW VALUE" +}; + +var updatedSecret = infisical.UpdateSecret(options); +``` + +Update an existing secret in Infisical. + +#### Parameters + + + + + The key of the secret to update. + + + The new value of 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 updated. + + + The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared". + + + + +### client.DeleteSecret(options) + +```cs +var options = new DeleteSecretOptions +{ + Environment = "dev", + ProjectId = "PROJECT_ID", + SecretName = "NEW_SECRET", +}; + +var deletedSecret = infisical.DeleteSecret(options); +``` + +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. + +```cs +var key = infisical.CreateSymmetricKey(); +``` + +#### Returns (string) +`key` (string): A base64-encoded, 256-bit symmetric key, that can be used for encryption/decryption purposes. + +### Encrypt symmetric +```cs +var options = new EncryptSymmetricOptions +{ + Plaintext = "Infisical is awesome!", + Key = key, +}; + +var encryptedData = infisical.EncryptSymmetric(options); +``` + +#### Parameters + + + + + 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 +```cs +var decryptOptions = new DecryptSymmetricOptions +{ + Key = key, + Ciphertext = encryptedData.Ciphertext, + Iv = encryptedData.Iv, + Tag = encryptedData.Tag, +}; + +var decryptedPlaintext = infisical.DecryptSymmetric(decryptOptions); +``` + +#### Parameters + + + + 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. +