{"id":20398485,"url":"https://github.com/keeper-security/secrets-manager-go","last_synced_at":"2025-04-12T13:13:48.234Z","repository":{"id":38465671,"uuid":"409727388","full_name":"Keeper-Security/secrets-manager-go","owner":"Keeper-Security","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-14T18:09:23.000Z","size":246,"stargazers_count":7,"open_issues_count":5,"forks_count":2,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-12T13:13:42.767Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/Keeper-Security.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2021-09-23T19:58:10.000Z","updated_at":"2025-03-06T20:27:53.000Z","dependencies_parsed_at":"2024-06-19T01:25:47.157Z","dependency_job_id":"b860377c-87ec-4778-ba32-21c0dd534c26","html_url":"https://github.com/Keeper-Security/secrets-manager-go","commit_stats":{"total_commits":34,"total_committers":5,"mean_commits":6.8,"dds":0.6764705882352942,"last_synced_commit":"41c9c64ef61d99838136f5ffe85aa652ff7de316"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keeper-Security%2Fsecrets-manager-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keeper-Security%2Fsecrets-manager-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keeper-Security%2Fsecrets-manager-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Keeper-Security%2Fsecrets-manager-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Keeper-Security","download_url":"https://codeload.github.com/Keeper-Security/secrets-manager-go/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248571857,"owners_count":21126522,"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":[],"created_at":"2024-11-15T04:22:17.110Z","updated_at":"2025-04-12T13:13:48.208Z","avatar_url":"https://github.com/Keeper-Security.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Secrets Management Go SDK\n\n![Go](https://github.com/keeper-security/secrets-manager-go/actions/workflows/test.go.yml/badge.svg)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://docs.keeper.io/secrets-manager/secrets-manager/developer-sdk-library/golang-sdk\"\u003eView docs\u003c/a\u003e\n\u003c/p\u003e\n\nThis library provides interface to Keeper® Secrets Manager and can be used to access your Keeper vault, read and update existing records, rotate passwords and more. Keeper Secrets Manager is an open source project with contributions from Keeper's engineering team and partners.\n\n## Features:\n\n## Obtain a One-Time Access Token\nKeeper Secrets Manager authenticates your API requests using advanced encryption that uses locally stored private key, device id and client id.\nTo register your device and generate private key you will need to generate a One-Time Access Token via Web Vault or Keeper Commander CLI.\n\n### Via Web Vault\n**Secrets Manager \u003e Applications \u003e Create Application** - will let you chose application name, shared folder(s) and permissions and generate One-Time Access Token. _Note: Keeper does not store One-Time Access Tokens - save or copy the token offline for later use._\n\nOne-Time Access Tokens can be generated as needed: **Secrets Manager \u003e Applications \u003e Application Name \u003e Devices Tab \u003e Edit \u003e Add Device button** - will let you create new Device and generate its One-Time Access Token.\n\n[What is an application?](https://docs.keeper.io/secrets-manager/secrets-manager/overview/terminology)\n\n### Via Keeper Commander CLI\nLogin to Keeper with Commander CLI and perform following:\n1. Create Application\n    ```bash\n   $ sm app create [NAME]\n    ```\n\n2. Share Secrets to the Application\n    ```bash\n   $ sm share add --app [NAME] --secret [UID] --editable\n    ```\n    - `--app` - Name of the Application.\n    - `--secret` - Record UID or Shared Folder UID\n    - `--editable` - if omitted defaults to false\n\n3. Create client\n    ```bash\n   $ sm client add --app [NAME] --unlock-ip --count 1\n    ```\n\n### Install\n```bash\ngo get github.com/keeper-security/secrets-manager-go/core\n```\n\n### Quick Start\n\n```golang\npackage main\n\n// Import Secrets Manager\nimport ksm \"github.com/keeper-security/secrets-manager-go/core\"\n\nfunc main() {\n\t// Establish connection\n\t// One time secrets generated via Web Vault or Commander CLI\n\tclientOptions := \u0026ksm.ClientOptions{\n\t\tToken:  \"US:ONE_TIME_TOKEN_BASE64\",\n\t\tConfig: ksm.NewFileKeyValueStorage(\"ksm-config.json\")}\n\tsm := ksm.NewSecretsManager(clientOptions)\n\t// One time tokens can be used only once - afterwards use the generated config file\n\t// sm := ksm.NewSecretsManager(\u0026ksm.ClientOptions{Config: ksm.NewFileKeyValueStorage(\"ksm-config.json\")})\n\n\t// Retrieve all records\n\tallRecords, _ := sm.GetSecrets([]string{})\n\n\t// Get password from first record:\n\tpassword := allRecords[0].Password()\n\n\t// WARNING: Avoid logging sensitive data\n\tprint(\"My password from Keeper: \", password)\n}\n```\n\n## Samples\n### File Download\n```golang\nsm := ksm.NewSecretsManager(\u0026ksm.ClientOptions{Config: ksm.NewFileKeyValueStorage(\"ksm-config.json\")})\n\nif records, err := sm.GetSecrets([]string{}); err == nil {\n\tfor _, r := range records {\n\t\tfmt.Println(\"\\tTitle: \" + r.Title())\n\t\tfor i, f := range r.Files {\n\t\t\tfmt.Printf(\"\\t\\tfile #%d -\u003e name: %s\", i, f.Name)\n\t\t\tf.SaveFile(\"/tmp/\"+f.Name, true)\n\t\t}\n\t}\n}\n```\n\n### Update record\n```golang\nsm := ksm.NewSecretsManager(\u0026ksm.ClientOptions{Config: ksm.NewFileKeyValueStorage(\"ksm-config.json\")})\n\nif records, err := sm.GetSecrets([]string{}); err == nil \u0026\u0026 len(records) \u003e 0 {\n\trecord := records[0]\n\tnewPassword := fmt.Sprintf(\"Test Password - \" + time.Now().Format(time.RFC850))\n\trecord.SetPassword(newPassword)\n\n\tif err := sm.Save(record); err != nil {\n\t\tfmt.Println(\"Error saving record: \" + err.Error())\n\t}\n}\n```\n\n## Configuration\n\n### Types\n\nListed in priority order\n1. Environment variable\n1. Configuration store\n1. Code\n\n### Available configurations:\n\n- `clientKey` - One Time Access Token used during initialization\n- `hostname` - Keeper Backend host. Available values:\n    - `keepersecurity.com`\n    - `keepersecurity.eu`\n    - `keepersecurity.com.au`\n    - `govcloud.keepersecurity.us`\n\n## Adding more records or shared folders to the Application\n\n### Via Web Vault\nDrag\u0026Drop records into the shared folder or select from the record menu any of the options to CreateDuplicate/Move or create new records straight into the shared folder. As an alternative use: **Secrets Manager \u003e Application \u003e Application Name \u003e Folders \u0026 Records \u003e Edit** and use search field to add any folders or records then click Save.\n\n### Via Commander CLI\n```bash\nsm share add --app [NAME] --secret [UID2]\nsm share add --app [NAME] --secret [UID3] --editable\n```\n\n### Retrieve secret(s)\n```golang\nsm := ksm.NewSecretsManager(\u0026ksm.ClientOptions{Config: ksm.NewFileKeyValueStorage(\"ksm-config.json\")})\nallSecrets, _ := sm.GetSecrets([]string{})\n```\n\n### Update secret\n```golang\nsecretToUpdate = allSecrets[0]\nsecretToUpdate.SetPassword(\"NewPassword123$\")\nsecretsManager.Save(secretToUpdate)\n```\n\n# Change Log\n\n## 1.6.4\n\n* KSM-551 - Stop generating UIDs that start with \"-\"\n* KSM-555 - Added new field types and updated PAM field types\n\n## 1.6.3\n\n* KSM-497 - Expose additional methods to create record from data, options and UID\n\n## 1.6.2\n\n* KSM-467 - Fixed ExpiresOn conversion from UnixTimeMilliseconds.\n\n## 1.6.1\n\n* KSM-450 - Added `folderUid` and `innerFolderUid` to Record\n* KSM-451 - Fix `subFolderUid` crash on empty string value\n\n## 1.6.0\n\n* KSM-414 - Added support for Folders\n* KSM-435 - Improved Passkey field type support\n\n## 1.5.2\n\n* KSM-409 New field type: Passkey\n* KSM-404 New filed type: script and modification to some record types\n* KSM-384 Support for record Transactions\n\n\n## 1.5.0\n\n* KSM-317 - Notation improvements\n* KSM-356 - Create custom fields\n* KSM-365 - Fixed KEY_CLINET_KEY is missing error\n* KSM-366 - Avoid exceptions/panics and return errors instead\n* KSM-367 - Fixed license not shown on pkg.go.dev\n\n## 1.4.0\n\n* KSM-288 - Record removal\n* KSM-306 - Added support for Japan and Canada data centers\n* KSM-312 - Improve password generation entropy\n\nFor additional information please check our detailed [Go SDK docs](https://docs.keeper.io/secrets-manager/secrets-manager/developer-sdk-library/golang-sdk) for Keeper Secrets Manager.\n\n### Documentation\n[Secrets Manager Guide](https://docs.keeper.io/secrets-manager/secrets-manager/overview)\n\n[Enterprise Admin Guide](https://docs.keeper.io/enterprise-guide/)\n\n[Keeper Commander Guide](https://docs.keeper.io/secrets-manager/commander-cli/overview)\n\n[Keeper Security Website](https://www.keepersecurity.com/secrets-manager.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeeper-security%2Fsecrets-manager-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeeper-security%2Fsecrets-manager-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeeper-security%2Fsecrets-manager-go/lists"}