From 14c1e3039f80a2fc50194b4da13a4f9964b7a1b3 Mon Sep 17 00:00:00 2001 From: Lena Date: Sun, 1 Mar 2026 00:00:00 +0000 Subject: Enter otp Authenticator codes from the terminal, stdlib only, no phone and no third-party dependency. Secrets are a private plain-text file, or the output of a command so encrypted stores work unchanged. --- cli.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100755 cli.py (limited to 'cli.py') diff --git a/cli.py b/cli.py new file mode 100755 index 0000000..2ab5369 --- /dev/null +++ b/cli.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +import sys + +import otp + + +def main(): + if len(sys.argv) > 2: + sys.exit("usage: cli.py [name]") + try: + entries = otp.load_entries() + if len(sys.argv) > 1: + name = sys.argv[1] + for n, key, period, digits, digest in entries: + if n == name: + print(otp.totp(key, period, digits, digest)) + return + sys.exit(f"cli: no entry named {name!r}") + for name, key, period, digits, digest in entries: + print(name, otp.totp(key, period, digits, digest)) + except otp.SecretsError as error: + print(f"cli: {error}", file=sys.stderr) + return error.status + + +if __name__ == "__main__": + sys.exit(main()) -- cgit v1.2.3