{"id":15540290,"url":"https://github.com/rm-hull/zaup2","last_synced_at":"2025-04-23T17:02:03.716Z","repository":{"id":37822871,"uuid":"431265587","full_name":"rm-hull/zaup2","owner":"rm-hull","description":"A TOTP authenticator for the web","archived":false,"fork":false,"pushed_at":"2025-04-20T08:29:22.000Z","size":12564,"stargazers_count":3,"open_issues_count":6,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-20T09:44:03.171Z","etag":null,"topics":["google-authenticator","react","totp","typescript"],"latest_commit_sha":null,"homepage":"https://www.destructuring-bind.org/zaup2/","language":"TypeScript","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/rm-hull.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2021-11-23T21:59:15.000Z","updated_at":"2025-04-20T08:28:17.000Z","dependencies_parsed_at":"2023-02-18T04:45:34.641Z","dependency_job_id":"adb01d46-100b-4d87-9c63-c5229a307b41","html_url":"https://github.com/rm-hull/zaup2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rm-hull","download_url":"https://codeload.github.com/rm-hull/zaup2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250477808,"owners_count":21437049,"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":["google-authenticator","react","totp","typescript"],"created_at":"2024-10-02T12:13:27.672Z","updated_at":"2025-04-23T17:02:03.528Z","avatar_url":"https://github.com/rm-hull.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZAUP 2\n\nZAUP 2 is a [TOTP](https://en.wikipedia.org/wiki/Time-based_one-time_password) authenticator app for the web: It acts much like\n[Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\u0026hl=en\u0026gl=US),\nbut stores TOTP secrets in your browser's local storage, and they never leave your machine. Data in local storage is encrypted\nusing AES using a master password.\n\n![main](./doc/screenshots/main.webp)\n\nGo to https://www.destructuring-bind.org/zaup2 to see it in action. There are a set of demo OTPs that you\ncan import to see how it works to try it out. You will need to choose a master password first though:\n\n![security](./doc/screenshots/security.webp)\n\nThen import:\n\n![import](./doc/screenshots/import.webp)\n\nOnce imported, the TOTP codes will contiunally display and update. The settings page will allow a certain level of\ncustomisation:\n\n![settings](./doc/screenshots/settings.webp)\n\n## Importing from Google Authenticator\n\nGoogle Authenticator has a feature that allows you to export. At the moment, this is a bit tricky, but follow these steps:\n\n1. Export the codes from Google Authenticator on your phone\n2. Take a screenshot of the resulting QR codes\n3. Use Google Lens to read the resultant URI (it should start with `otpauth-migration://offline?data=`)\n4. Use something like Slack or WhatsApp to make that URI available on your computer.\n5. Copy the URI into the text field on the import page.\n\nOr, if you have a webcam on your computer, pick the '**Scan QR Code**' on the import page, allow access to your camera, and\ncenter the QR code from Google Authenticator in the preview window. Once the code is recognised, it will populate the\ntext field, and import.\n\n![scan_qr_code](./doc/screenshots/scan_qr_code.webp)\n\n## Running locally\n\nYou must have Node 20 and Yarn installed. To begin:\n\n```console\nexport VITE_GOOGLE_API_CLIENT_ID=\u003cyour-google-api-client-id\u003e\nyarn install\nyarn dev\n```\n\nYou will need to create a project in [Google Developer Console](https://console.cloud.google.com/apis/credentials) and\ncreate an OAuth 2.0 Client ID. This can probably skipped if you dont enable **Sync to Google Drive** in the settings.\n\n## FAQ\n\nWhy?\n: It's more convenient having TOTP's available locally that can be copy-pasted rather than on my phone. It also serves as a backup if you ever loose you phone or dont have it to hand.\n\nIsn't it less secure?\n: Possibly, but the data is encrypted with AES using [Crypto-JS](https://github.com/brix/crypto-js).\n\n## License\n\n### MIT License\n\nCopyright (c) 2021 Richard Hull\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frm-hull%2Fzaup2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frm-hull%2Fzaup2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frm-hull%2Fzaup2/lists"}