python retrieve_secrets docs

This commit is contained in:
Aashish-Upadhyay-101
2023-03-10 20:29:58 +05:45
parent ef4a316558
commit 42374a775d

View File

@@ -108,6 +108,90 @@ getSecrets();
``` ```
</Tab> </Tab>
<Tab title="Python">
```Python
import requests
import base64
from Cryptodome.Cipher import AES
BASE_URL = "http://app.infisical.com"
def decrypt(ciphertext, iv, tag, secret):
secret = bytes(secret, "utf-8")
iv = base64.standard_b64decode(iv)
tag = base64.standard_b64decode(tag)
ciphertext = base64.standard_b64decode(ciphertext)
cipher = AES.new(secret, AES.MODE_GCM, iv)
cipher.update(tag)
cleartext = cipher.decrypt(ciphertext).decode('utf-8')
return cleartext
def get_secrets():
service_token = "<your_service_token>"
service_token_secret = service_token[service_token.rindex(".") + 1:]
# 1. Get your Infisical Token data
service_token_data = requests.get(
f"{BASE_URL}/api/v2/service-token",
headers={
"Authorization": f"Bearer {service_token}"
}
).json()
# 2. Get secrets for your project and environment
data = requests.get(
f"{BASE_URL}/api/v2/secrets",
params={
"environment": service_token_data["environment"],
"workspaceId": service_token_data["workspace"]
},
headers={
"Authorization": f"Bearer {service_token}"
}
).json()
encrypted_secrets = data.get("secrets")
# 3. Decrypt the (encrypted) project key with the key from your Infisical Token
project_key = decrypt(
ciphertext=service_token_data.get("encryptedKey"),
iv=service_token_data.get("iv"),
tag=service_token_data.get("tag"),
secret=service_token_secret
)
# 4. Decrypt the (encrypted) secrets
secrets = []
for secret in encrypted_secrets:
secret_key = decrypt(
ciphertext=secret["secretKeyCiphertext"],
iv=secret["secretKeyIV"],
tag=secret["secretKeyTag"],
secret=project_key
)
secret_value = decrypt(
ciphertext=secret["secretValueCiphertext"],
iv=secret["secretValueIV"],
tag=secret["secretValueTag"],
secret=project_key
)
secrets.append({
"secret_key": secret_key,
"secret_value": secret_value,
})
print("secrets:", secrets)
get_secrets()
```
</Tab>
</Tabs> </Tabs>
<Info> <Info>