diff --git a/templates/bin/wifi-pass b/templates/bin/wifi-pass new file mode 100755 index 0000000..b4d7c95 --- /dev/null +++ b/templates/bin/wifi-pass @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +import argparse +from io import StringIO +import subprocess +import urllib.parse + + +def main(): + parser = argparse.ArgumentParser( + description=""" + Fetch the wifi password and generate a QR code. + + This program assumes that the network PSK is stored + in the password-store, and will look for it + at the path `wifi/`. + """, + ) + parser.add_argument( + "-H", + "--hidden", + action="store_true", + help="Indicate that this network's SSID is hidden.", + ) + parser.add_argument("essid", help="ESSID for this network") + + args = parser.parse_args() + + psk = subprocess.check_output(["pass", f"wifi/{args.essid}"], text=True).strip() + + hidden_data = "H:true;" if args.hidden else "" + qr_data = f"WIFI:T:WPA;S:{quote(args.essid)};{hidden_data}P:{quote(psk)};;" + + proc = subprocess.Popen(["qrencode", "-tANSI"], stdin=subprocess.PIPE, text=True) + proc.communicate(qr_data) + + +PRINTABLE = [*range(0x20, 0x3B), *range(0x3C, 0x7F)] + + +def quote(s: str) -> str: + return urllib.parse.quote(s, safe=PRINTABLE) + + +if __name__ == "__main__": + main()