{"id":27150204,"url":"https://github.com/huantrinh1802/secret_template_renderer","last_synced_at":"2026-03-09T19:40:09.166Z","repository":{"id":278660518,"uuid":"936363205","full_name":"huantrinh1802/secret_template_renderer","owner":"huantrinh1802","description":"CLI tool and library for using Jinja template to render secrets from various providers.","archived":false,"fork":false,"pushed_at":"2025-03-23T05:10:05.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-23T05:24:16.276Z","etag":null,"topics":["cli","developer-tools","development-environment","devops","docker-compose","python","secret-sharing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/huantrinh1802.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-21T00:36:36.000Z","updated_at":"2025-03-23T05:09:41.000Z","dependencies_parsed_at":"2025-02-21T01:35:13.262Z","dependency_job_id":"26e0fc03-c64b-4db4-966a-3ef0524eff6a","html_url":"https://github.com/huantrinh1802/secret_template_renderer","commit_stats":null,"previous_names":["huantrinh1802/temv","huantrinh1802/secret_template_renderer"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huantrinh1802%2Fsecret_template_renderer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huantrinh1802%2Fsecret_template_renderer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huantrinh1802%2Fsecret_template_renderer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huantrinh1802%2Fsecret_template_renderer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/huantrinh1802","download_url":"https://codeload.github.com/huantrinh1802/secret_template_renderer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247856559,"owners_count":21007620,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","developer-tools","development-environment","devops","docker-compose","python","secret-sharing"],"created_at":"2025-04-08T13:54:02.963Z","updated_at":"2025-12-13T16:26:58.647Z","avatar_url":"https://github.com/huantrinh1802.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Secret Template Renderer\n\nThis project is a Jinja template renderer that supports fetching secrets from various providers.\n\n## Features\n\n- Load built-in and user-defined plugins to extend the functionality\n- Register multiple secret providers\n- Render Jinja templates with secrets\n\n## Installation\n\n### Using pip\n\n1. Clone the repository\n2. Install the required dependencies\n\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n### Using pipx\n\n```bash\npipx install secret_template_renderer\n\n```\n\n## Usage\n\n### Template Utilities\n\n- `import_env`: import dotenv file\n- `get_secret`:  retrieve secret via secret providers\n- `shell`: execute shell command\n- `random`: generate a random string with the following parameters:\n  - length: int = 16,\n  - type: string | password = 'string',\n  - lower_case: bool = True,\n  - numbers: bool = True,\n  - has_special_chars: bool = False,\n  - must_has_special_chars: bool = False,\n  - exclude_characters: str = \"\",\n\n### Command Line Interface\n\n- `-d`, `--debug`: Enable debug mode\n\n#### Generate\n\n```bash\nstr generate [-f \u003ctemplate_path\u003e] [-o \u003coutput_path\u003e] [-i \u003cinput_string\u003e] [-p \u003cpassword\u003e]\n```\n\n- `-f`, `--file`: Path to the Jinja template file\n- `-o`, `--output`:   Path to the output file\n- `-i`, `--input`:   Input string to be rendered\n- `-p`, `--password`:   Password to be used for encryption\n\n#### Encryption\n\n```bash\nstr encrypt|decrypt [-f \u003ctemplate_path\u003e] [-o \u003coutput_path\u003e] [-i \u003cinput_string\u003e] [-p \u003cpassword\u003e]\n```\n\n- `-f`, `--file`: Path to the Jinja template file\n- `-o`, `--output`:   Path to the output file\n- `-i`, `--input`:   Input string to be rendered\n- `-p`, `--password`:   Password to be used for encryption\n\n#### Example\n\n```dotenv\n\n{{ import_env('.default.env') }} # Importing another dotenv file\nDATABASE_PWD={{ get_secret('bitwarden', 'database_system_a', 'login.password') }} # Use the bitwarden plugins to load Bitwarden\nNAME=app-{{ random(10) }} # Generate the randomised strings\nPWD={{ decrypt(\"SfB505whBisKznrdHKLvQ0hhaESDP0MqvWFsYNkI0to=\", \"password\") }}\nUID={{ shell('echo $UID') }}\n\n```\n\n## Custom plugins\n\nTo load custom plugins, place your plugin `.py` files in `~/.config/temv/plugins/[plugin_type]/[plugin_name]`. Currently, there are 2 plugins: `secrets` and `encryptions`.\n\nEach plugin must have a `register` function that takes a dictionary of secret providers as an argument.\n\nSecret example:\n\n```python\nimport subprocess\nfrom collections.abc import Callable\n\n\ndef get_custom_secret(item_name: str, path: str) -\u003e str | None:\n    pass\n\n\ndef register(secrets_providers: dict[str, Callable[[str, str], str | None]]):\n    \"\"\"Register secret provider.\"\"\"\n    secrets_providers[\"custom_provider\"] = get_custom_secret\n```\n\nEncryption example:\n\n```python\nimport subprocess\nfrom collections.abc import Callable\n\n\ndef encrypt(value: str, password: str) -\u003e str | None:\n    pass\n\n\ndef decrypt(value: str, password: str) -\u003e str | None:\n    pass\n\n\ndef register(providers: dict[str, Callable[[str, str], str | None]]):\n    \"\"\"Register encryption provider.\"\"\"\n    providers[\"custom_provider\"] = {\"encrypt\": encrypt, \"decrypt\": decrypt}\n```\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuantrinh1802%2Fsecret_template_renderer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuantrinh1802%2Fsecret_template_renderer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuantrinh1802%2Fsecret_template_renderer/lists"}