2 changed files with 109 additions and 0 deletions
@ -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 |
@ -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() |
Loading…
Reference in new issue