{"id":13438932,"url":"https://github.com/zebradil/rustotpony","last_synced_at":"2025-04-07T13:09:56.910Z","repository":{"id":28310943,"uuid":"115939956","full_name":"Zebradil/rustotpony","owner":"Zebradil","description":"🐴 RusTOTPony — CLI manager of one-time password generators aka Google Authenticator","archived":false,"fork":false,"pushed_at":"2024-10-19T19:12:04.000Z","size":284,"stargazers_count":30,"open_issues_count":6,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-20T07:18:39.180Z","etag":null,"topics":["cli","otp","otpa","rust","totp"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/Zebradil.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["zebradil"],"custom":["https://www.paypal.me/zebradil"]}},"created_at":"2018-01-01T18:59:34.000Z","updated_at":"2024-09-26T22:26:53.000Z","dependencies_parsed_at":"2023-10-26T04:24:27.447Z","dependency_job_id":"0e0ee8d1-c561-4b0a-b828-1b988865819d","html_url":"https://github.com/Zebradil/rustotpony","commit_stats":{"total_commits":103,"total_committers":4,"mean_commits":25.75,"dds":"0.13592233009708743","last_synced_commit":"ad1b2b914464226727071bd7a4ac5be145cdac4f"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zebradil%2Frustotpony","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zebradil%2Frustotpony/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zebradil%2Frustotpony/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zebradil%2Frustotpony/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zebradil","download_url":"https://codeload.github.com/Zebradil/rustotpony/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247657281,"owners_count":20974345,"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","otp","otpa","rust","totp"],"created_at":"2024-07-31T03:01:09.748Z","updated_at":"2025-04-07T13:09:56.881Z","avatar_url":"https://github.com/Zebradil.png","language":"Rust","funding_links":["https://github.com/sponsors/zebradil","https://www.paypal.me/zebradil"],"categories":["Libraries","库","库 Libraries"],"sub_categories":["Cryptography","加密","密码学 Cryptography"],"readme":"# 🐴 RusTOTPony\n\n![crates.io](https://img.shields.io/crates/v/rustotpony.svg)\n![build](https://github.com/zebradil/rustotpony/workflows/build/badge.svg)\n\nCLI manager of [time-based one-time password](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) generators.\nIt is a desktop alternative to Google Authenticator.\n\n## Installation\n\n### Arch Linux\n\nPackages, available in [AUR](https://aur.archlinux.org/):\n\n- [rustotpony](https://aur.archlinux.org/packages/rustotpony/)\n- [rustotpony-bin](https://aur.archlinux.org/packages/rustotpony-bin/)\n\n### Other\n\nGrab an appropriate binary from [the latest release](https://github.com/Zebradil/rustotpony/releases/latest) and put it\nin a place of your choice. If you're on the \\*nix system, don't forget to set proper permissions: `chmod +x totp`.\n\n### Build manually\n\n#### From crates.io\n\nMake sure you have `$HOME/.cargo/bin` in your `$PATH`.\n\n```shell\ncargo install rustotpony\n```\n\n#### From source\n\n1. Clone this repo\n1. Run `cargo install` from the inside of the repo directory\n1. Keep calm and wait for the compilation\n\nProbably, you will need `gcc` (Linux) or `clang` (Mac OS) to compile dependencies.\n\n## Usage\n\n```text\n$ totp help\n🐴 RusTOTPony 0.3.2\n\nManager of one-time password generators\n\nUsage: totp [COMMAND]\nCommands:\n  dash       Show realtime dashboard with all generators\n  list       List all generators\n  add        Add a new generator\n  delete     Delete a generator\n  rename     Rename a generator\n  eradicate  Delete all generators\n  help       Print this message or the help of the given subcommand(s)\n\nOptions:\n  -h, --help     Print help information\n  -V, --version  Print version information\n```\n\n### Choose your password wisely\n\nOn the first run, `totp` will prompt you to create a password for a new database, which is stored at `$HOME/.rustotpony/totp.safe`.\nThis database is encrypted using the password you provide with age-encryption.\n\nIf you forget the password or wish to change it, you will need to delete the database file.\nWhile this process is currently a bit inconvenient,\nI'm working on improving usability and will be adding a command to facilitate password changes in the future.\n\n### Basic scenario\n\n1. Retrieve a secret key from your TOTP provider (it must be encoded with base32, for example, `GEZDGMZSGE2TKCQ=`)\n\n   ```shell\n   $ # Creating a fake secret key for demo purposes\n   $ echo 123321555 | base32\n   GEZDGMZSGE2TKNIK\n   ```\n\n1. Add new generator with `totp add \u003cNAME\u003e` (you will be asked for a secret and a password)\n\n   ```shell\n   $ # Adding a new TOTP generator\n   $ totp add demo\n   Enter your secret code:\n   Enter your database pass:\n   New application created: demo\n   ```\n\n1. Use `totp list` to check your secrets\n\n   ```shell\n   $ # Listing all secrets in the database\n   $ totp list\n   Enter your database pass:\n   +------+------------------+----------+\n   | name | key              | username |\n   +------+------------------+----------+\n   | demo | GEZDGMZSGE2TKNIK |          |\n   +------+------------------+----------+\n   ```\n\n1. Use `totp dash` or just `totp` for real-time dashboard\n\n   ```shell\n   $ # Display real-time dashboard with all generators\n   $ totp\n   Enter your database pass:\n   Welcome to RusTOTPony realtime dashboard! Press ^C to quit.\n   [=============================================               ]\n   009216 demo\n   ```\n\n1. After hitting ^C it'll clean up the dashboard\n\n   ```shell\n   $ totp\n   Enter your database pass:\n   I won't tell anyone about this 🤫\n   ```\n\n## TODO\n\n[./TODO.md](./TODO.md)\n\n## License\n\nLicensed under [the MIT License][MIT License].\n\n[MIT License]: https://github.com/zebradil/rustotpony/blob/master/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzebradil%2Frustotpony","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzebradil%2Frustotpony","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzebradil%2Frustotpony/lists"}