You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

109 lines
2.8 KiB

#!/usr/bin/env python3
import sys
import os
import time
import subprocess
import io
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 = io.TextIOWrapper(io.BytesIO(), sys.stdout.encoding)
qr = qrcode.QRCode(border=0, error_correction=qrcode.constants.ERROR_CORRECT_Q)
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 run(command):
result = subprocess.run(command, stdout=subprocess.PIPE)
return result.stdout.decode('utf-8').rstrip("\n")
def main():
timeout = 30
tor_hostname_file = "/home/umbrel/umbrel/tor/data/web/hostname"
tor_hostname = read_file_when_available(tor_hostname_file, timeout)
ip = run(['hostname', '-I']).split(" ")[0]
if not tor_hostname or not ip:
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)
connection_details = f"""
{ascii_banner}
Your Umbrel is up and running at:
http://umbrel.local
http://{ip}
http://{tor_hostname}
"""
print(connection_details)
main()