mirror of https://github.com/lukechilds/umbrel.git
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
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()
|
|
|