Sbeam working

This commit is contained in:
jpk 2019-08-19 22:55:49 +02:00
parent 3dc8ec72f0
commit 4ef0cdede9
2 changed files with 35 additions and 19 deletions

View File

@ -16,10 +16,6 @@ from SuperBeam.RequestHandlers import (
) )
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
class SuperBeamServer(BaseHTTPRequestHandler): class SuperBeamServer(BaseHTTPRequestHandler):
def do_GET(self): def do_GET(self):
@ -70,24 +66,19 @@ def get_primary_ip():
return IP return IP
def show_qrcode(): def get_qrcode():
primary_ip = get_primary_ip() primary_ip = get_primary_ip()
octets = [1] octets = [1]
octets.extend([int(_) for _ in primary_ip.split('.')[::-1]]) octets.extend([int(_) for _ in primary_ip.split('.')[::-1]])
url = 'http://superbe.am/q?' + base64.b64encode( url = 'http://superbe.am/q?' + base64.b64encode(
struct.pack('BBBBB', *octets) struct.pack('BBBBB', *octets)
).decode('utf-8') ).decode('utf-8')
qrcode = pyqrcode.create(url) return pyqrcode.create(url)
print('\033[1;37;37m████████' + '██'*(len(qrcode.code[0])))
for row in qrcode.code:
print('\033[1;37;37m████', end='') def show_qrcode():
for block in row: qrcode = get_qrcode()
if block == 1: print(qrcode.terminal())
print('\033[1;30;30m ', end='')
else:
print('\033[1;37;37m██', end='')
print('\033[1;37;37m████')
print('\033[1;37;37m████████' + '██'*(len(qrcode.code[0])))
def build_filelist(paths, recursive=True): def build_filelist(paths, recursive=True):

View File

@ -41,6 +41,10 @@ def cli():
help='Recurse into sub directories') help='Recurse into sub directories')
@click.argument('filename', nargs=-1, type=click.Path(exists=True)) @click.argument('filename', nargs=-1, type=click.Path(exists=True))
def serve(recursive, filename): def serve(recursive, filename):
"""Start a SuperBeam serve to serve FILENAME [FILENAME ...].
FILENAME can be one or more files or directories.
"""
filelist = SuperBeam.build_filelist(filename, recursive) filelist = SuperBeam.build_filelist(filename, recursive)
SuperBeam.serve_forever(filelist) SuperBeam.serve_forever(filelist)
@ -48,6 +52,10 @@ def serve(recursive, filename):
@cli.command() @cli.command()
@click.argument('host', default='127.0.0.1') @click.argument('host', default='127.0.0.1')
def superlist(host): def superlist(host):
"""Fetch superlist from HOST running SupberBeam.
HOST is the IP of the SuperBeam server.
"""
with requests.get(f'http://{host}:8080/superlist', with requests.get(f'http://{host}:8080/superlist',
headers={'User-Agent': 'sbeam'}) as response: headers={'User-Agent': 'sbeam'}) as response:
assert response.status_code == 200 assert response.status_code == 200
@ -56,8 +64,14 @@ def superlist(host):
@cli.command() @cli.command()
@click.argument('host', default='127.0.0.1') @click.argument('host', default='127.0.0.1')
@click.argument('filename', default='received.bin', type=click.File('w')) @click.argument('filename', default='received.bin')
def receive(host, filename): def receive(host, filename):
"""Download a SuperBeam stream from HOST and save as FILENAME.
HOST is the IP of the SuperBeam server. The SuperBeam stream will be saved
as FILENAME. To split the files into individual files, the `split-stream`
command with the Superlist from the `superlist` command has to be used.
"""
with requests.get(f'http://{host}:8080/getstream', stream=True, with requests.get(f'http://{host}:8080/getstream', stream=True,
headers={'User-Agent': 'sbeam'}) as response: headers={'User-Agent': 'sbeam'}) as response:
assert response.status_code == 200 assert response.status_code == 200
@ -70,8 +84,14 @@ def receive(host, filename):
@click.argument('filename', default='received.bin', type=click.File('r')) @click.argument('filename', default='received.bin', type=click.File('r'))
@click.argument('superlist', default='superlist', type=click.File('r')) @click.argument('superlist', default='superlist', type=click.File('r'))
@click.argument('directory', default='received', type=click.File('w')) @click.argument('directory', default='received', type=click.File('w'))
def split_stream(data, superlist, directory): def split_stream(filename, superlist, directory):
with open(data, 'rb') as blob: """Split FILENAME with SUPERLIST into single files.
The SuperBeam stream FILENAME from the `receive` command is split into
individual files as described by SUPERLIST. The SUPERLIST can be downloaded
with the `superlist` command. The individual files are stored in DIRECTORY.
"""
with open(filename, 'rb') as blob:
for item in superlist: for item in superlist:
if not item: if not item:
break break
@ -83,6 +103,11 @@ def split_stream(data, superlist, directory):
handle.write(blob.read(int(filesize))) handle.write(blob.read(int(filesize)))
@cli.command()
def tui():
SuperBeam.tui.run()
if __name__ == '__main__': if __name__ == '__main__':
cli() cli()
# to_download = 0 # to_download = 0