From b4f26dbe92ad078ea699c34c1eca065b2e5fcc7e Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Mon, 20 Jul 2020 18:23:57 +0700 Subject: [PATCH] Add connection-details script --- stage2/06-connection-details/00-run.sh | 7 ++ .../files/connection-details | 102 ++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100755 stage2/06-connection-details/00-run.sh create mode 100755 stage2/06-connection-details/files/connection-details diff --git a/stage2/06-connection-details/00-run.sh b/stage2/06-connection-details/00-run.sh new file mode 100755 index 0000000..d2ed372 --- /dev/null +++ b/stage2/06-connection-details/00-run.sh @@ -0,0 +1,7 @@ +#!/bin/bash -e + +echo "Installing connection-details and dependencies" + +on_chroot pip3 install qrcode +chmod +x files/connection-details +cp files/connection-details ${ROOTFS_DIR}/usr/local/bin/connection-details diff --git a/stage2/06-connection-details/files/connection-details b/stage2/06-connection-details/files/connection-details new file mode 100755 index 0000000..de791d2 --- /dev/null +++ b/stage2/06-connection-details/files/connection-details @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 + +import sys +import os +import time +from io import TextIOWrapper, BytesIO +import qrcode + +umbrel_ascii = ''' + ,;###GGGGGGGGGGl#Sp + ,##GGGlW""^' '`""%GGGG#S, + ,#GGG" "lGG#o + #GGl^ '$GG# + ,#GGb \GGG, + lGG" "GGG + #GGGlGGGl##p,,p##lGGl##p,,p###ll##GGGG + !GGGlW"""*GGGGGGG#""""WlGGGGG#W""*WGGGGS + "" "^ '" "" + + + @GGS lG# + !GGG !GGG + !GGG !GGG + !GGG !GGG + !GGG !GGG + !GGG !GGG + 'GGG $GGl + "GGG#psqp##GG# + "%GGGGGG#" +'''.strip('\n') + +def create_qr(data): + output_buffer = TextIOWrapper(BytesIO(), sys.stdout.encoding) + + qr = qrcode.QRCode(border=0, error_correction=qrcode.constants.ERROR_CORRECT_H) + qr.add_data(data) + qr.print_ascii(out=output_buffer) + + output_buffer.seek(0) + qr_ascii = output_buffer.read().strip() + + return qr_ascii + +def combine_ascii(left_ascii, right_ascii, spacing=0): + left_lines = left_ascii.split('\n') + right_lines = right_ascii.split('\n') + + no_left_lines = len(left_lines) + no_right_lines = len(right_lines) + + left_width = max(list(map(lambda line: len(line), left_lines))) + max_height = max(no_left_lines, no_right_lines) + + lines = [] + for i in range(max_height): + left_line = left_lines[i] if i < no_left_lines else "" + right_line = right_lines[i] if i < no_right_lines else "" + + padding = " " * ((left_width - len(left_line)) + spacing) + + lines.append(left_line + padding + right_line) + + return "\n".join(lines) + +def read_file_when_available(file_path, timeout): + start = time.time() + while not os.path.exists(file_path): + if (time.time() - start) > timeout: + return False + time.sleep(1) + + with open(file_path, "r") as file: + file_contents = file.read() + + return file_contents + + +def main(): + timeout = 30 + print(f"Attempting to get connection details for up to {timeout} seconds") + + tor_hostname_file = "/home/umbrel/tor/data/web/hostname" + tor_hostname = read_file_when_available(tor_hostname_file, timeout) + + if not tor_hostname: + print("Couldn't get connection details") + return + + tor_hostname_qr_ascii = create_qr(tor_hostname.strip()) + ascii_banner = combine_ascii(umbrel_ascii, tor_hostname_qr_ascii, spacing=10) + + print() + print() + print() + print(ascii_banner) + print() + print(" Your Umbrel is up and running at:") + print() + print(" http://umbrel.local") + print(f" http://{tor_hostname}") + +main()