From 4dd4a71ee459ca6ed54ca5d847b100903c5d38dd Mon Sep 17 00:00:00 2001 From: Fredrik Wahlberg Date: Fri, 13 Jul 2018 14:50:49 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=A4ser=20fr=C3=A5n=20en=20backup-fil,=20tar?= =?UTF-8?q?=20argument=20fr=C3=A5n=20cmd.=20L=C3=B6ser=20#2=20och=20#3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alla.py | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100755 alla.py diff --git a/alla.py b/alla.py new file mode 100755 index 0000000..60fa482 --- /dev/null +++ b/alla.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +from __future__ import print_function +import base64 +import hashlib +import hmac +import struct +import sys +import time + +import json +from pprint import pprint + +import argparse + +# laddar filen +with open('/home/fredrik/otp_accounts.json') as filen: + data = json.load(filen) + + + +class TOTP(): + class TOTPException(Exception): + def __init__(self, msg): + self.msg = msg + + def __str__(self): + return repr(self.msg) + + + def __init__(self, secret): + if not secret: + raise TOTP.TOTPException('Invalid secret') + self.secret = secret + + def generate(self): + try: + key = base64.b32decode(self.secret) + num = int(time.time()) // 30 + msg = struct.pack('>Q', num) + + # Take a SHA1 HMAC of key and binary-packed time value + digest = hmac.new(key, msg, hashlib.sha1).digest() + + # Last 4 bits of the digest tells which 4 bytes to use + offset = ord(digest[19]) & 15 + token_base = digest[offset : offset+4] + + # Unpack that into an integer and strip it down + token_val = struct.unpack('>I', token_base)[0] & 0x7fffffff + token_num = token_val % 1000000 + + # Pad with leading zeroes + token = '{0:06d}'.format(token_num) + + return token + except: + raise TOTP.TOTPException('Invalid secret') + + +def showme(args): + if len(args): + token = sys.stdin.readline().strip() if args[0] == '-' else args[0] + elif not sys.stdin.isatty(): + token = sys.stdin.readline().strip() + else: + return 'Usage: totp ' + + try: + print(TOTP(token).generate()) + except TOTP.TOTPException as e: + return 'Error: ' + e.msg + +def main(): + for p in data: + print (TOTP(data["secret"]).generate()) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("site") + args = parser.parse_args() + + for p in data: + if p["label"].strip().lower() == args.site.lower(): + print(TOTP(p["secret"]).generate()) + +# try: +# sys.exit(main(sys.argv[1:])) +# except KeyboardInterrupt: +# sys.exit(1) + +