-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfreeotp_to_andotp.py
executable file
·48 lines (38 loc) · 1.33 KB
/
freeotp_to_andotp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env python3
import base64
import json
import sys
import xml.etree.ElementTree
from pprint import pprint
def convert_freotp_to_andotp( freeotp_item ):
andotp_item = {
"algorithm": freeotp_item["algo"],
"digits": freeotp_item["digits"],
"type": freeotp_item["type"],
"period": freeotp_item["period"],
}
andotp_item["secret"] = base64.b32encode(
bytes(x & 0xff for x in freeotp_item["secret"])
).decode("utf8")
issuer = freeotp_item.get("issuerAlt") or \
freeotp_item.get("issuerExt") or \
freeotp_item.get("issuerInt")
label = freeotp_item.get("label") or freeotp_item.get("labelAlt")
if label and issuer:
freeotp_item_label = "%s - %s" % (issuer, label)
else:
freeotp_item_label = label or issuer
andotp_item["label"] = freeotp_item_label
return andotp_item
def main():
if sys.version_info.major < 3:
print("This script requires Python 3.")
sys.exit(1)
if len(sys.argv) != 2:
print("Usage: ./freeotp_backup_migrate.py <filename>")
sys.exit(1)
with open(sys.argv[1]) as f:
freeotp_data = json.load(f)
pprint([ convert_freotp_to_andotp(x) for x in freeotp_data['tokens'] ])
if __name__ == "__main__":
main()