{"id":15540264,"url":"https://github.com/rm-hull/zaup","last_synced_at":"2026-01-20T15:32:41.098Z","repository":{"id":44190753,"uuid":"67953771","full_name":"rm-hull/zaup","owner":"rm-hull","description":"TOTP authentication using ZeroSeg","archived":false,"fork":false,"pushed_at":"2025-10-18T19:02:49.000Z","size":271,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-19T11:37:14.935Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/rm-hull.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.rst","contributing":"CONTRIBUTING.rst","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}},"created_at":"2016-09-11T20:53:12.000Z","updated_at":"2025-10-18T19:02:47.000Z","dependencies_parsed_at":"2024-12-20T08:28:34.324Z","dependency_job_id":"e621f2a6-9752-41ba-b8f5-3d154887fea1","html_url":"https://github.com/rm-hull/zaup","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/rm-hull/zaup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rm-hull","download_url":"https://codeload.github.com/rm-hull/zaup/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rm-hull%2Fzaup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28606142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T14:45:23.139Z","status":"ssl_error","status_checked_at":"2026-01-20T14:44:16.929Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-10-02T12:13:23.586Z","updated_at":"2026-01-20T15:32:41.078Z","avatar_url":"https://github.com/rm-hull.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zaup\n[![Maintenance](https://img.shields.io/maintenance/yes/2020.svg?maxAge=2592000)]()\n\nTOTP authentication using [ZeroSeg](https://thepihut.com/products/zeroseg) and Web.\n\nZaup uses the same sqlite3 database format as [Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\u0026hl=en_GB);\nthis means that if you can copy the database file from your android device (see\nreferences for links on how to do this) onto a Raspberry Pi, then you can use\nyour Pi (or a web browser) to display your existing TOTP 2-factor-authentication codes.\n\n## Requirements\n\nZaup is a 21st-century Python app, and as such requires Python3.\n\nTOTP authentication requires an accurate time source to operate correctly: The\nRaspberry Pi must either be connected to the internet to sync against an NTP\nserver or should employ the use of a RTC add-on board.\n\n```diff\n- Always keep your Raspberry Pi secure: change the default password, especially\n- as the authenticator database has TOTP secrets that could be used to compromise\n- your online accounts.\n```\n\n## Setup / installation\n\nOn your Raspberry Pi:\n\n    $ git clone https://github.com/rm-hull/zaup.git\n    $ cd zaup\n    $ sudo apt-get install python3-pip\n    $ sudo pip3 install -r requirements.txt\n\nNext, assuming you have managed to grab a copy of\n`/data/data/com.google.android.apps.authenticator2/databases/databases` from\nyour android device, copy this file to the **zaup** directory. It is generally\na good idea to lock down the file permissions:\n\n    $ chmod og-rwx databases\n\nNext, check that the database content is as expected:\n\n    $ sqlite3 ./databases\n\n    sqlite\u003e pragma table_info(accounts);\n    0|_id|INTEGER|0||1\n    1|email|TEXT|1||0\n    2|secret|TEXT|1||0\n    3|counter|INTEGER|0|0|0\n    4|type|INTEGER|0||0\n    5|provider|INTEGER|0|0|0\n    6|issuer|TEXT|0|NULL|0\n    7|original_name|TEXT|0|NULL|0\n\n    sqlite\u003e select * from accounts;\n    1|Google:fred@example.com|sdfsdfsdfsdfsfsdfsfsfsdfsfs|0|0|0|Google|Google:fred@example.com\n    2|Google:jim@example.com|weqeqwewqeqeqweqwewqeqeqewq|0|0|0|Google|Google:jim@example.com\n    3|github.com/alice|hfhfghfhfhfghf|0|0|0|GitHub|github.com/alice\n\n    sqlite\u003e ^D\n    $\n\n_Obviously, your database records will be different to the made-up ones shown\nabove._\n\n## Running ZAUP\n\nIf you want **zaup** to start automatically when the Raspberry Pi is booted,\nadd the following to the `/etc/rc.local` file _before_ the `exit 0` line\n(obviously pick the correct directory, based on where you cloned the repo):\n\n    /home/pi/zaup/zaup/main.py \u0026\n\nelse, to just run it on the command-line, enter the following in the _zaup_\ndirectory:\n\n    $ ./zaup/main.py\n\nCycle through the list of different authenticator codes using the PREV and NEXT\nbuttons on the ZeroSeg. Observe the flashing dot which indicates the program\nis continuously running.\n\n## Starting a Web Server\n\nIf you want to use **Zaup** through it's web interface, you must first run a script\nto add one or more user/password combinations - the app is protected by a basic\nauthentication scheme. From the _zaup_ directory, enter the following:\n\n\n    $ ./zaup/add_user.py\n\n    This script will add a username/password combination to 'zaup/config.py', for\n    use with basic authentication on the web user interface\n\n      Enter a username: jeff\n      Type a password: ******\n      Re-enter password: ******\n\n    zaup/config.py updated\n\nThe `add_user.py` script can be run multiple times to add more users.\n\nStart the web server as follows:\n\n    $ ./zaup/main.py\n    Loading sqlite3 database from: databases\n    Event loop running forever, press Ctrl+C to interrupt.\n    pid 98617: send SIGINT or SIGTERM to exit.\n    ======== Running on http://0.0.0.0:9000 ========\n    (Press CTRL+C to quit)\n\nThe server runs on port 9000, and can be terminated by pressing _Ctrl-C_. Any users\nattempting to connect will be challenged with an authentication request.\n\n## TODO\n\n* Config settings for systemd startup\n* ability to add secrets\n* Demo video\n* Improve error handling when no database file / no records\n* Add countdown timer for web-view\n\n## References\n\n* https://thepihut.com/products/zeroseg\n* http://www.howtogeek.com/130755/how-to-move-your-google-authenticator-credentials-to-a-new-android-phone-or-tablet/\n* https://dpron.com/3-ways-to-move-google-authenticator/\n\n## License\n\n### MIT License\n\nCopyright (c) 2017-18 Richard Hull and contributors\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%2Fzaup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frm-hull%2Fzaup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frm-hull%2Fzaup/lists"}