#!/usr/bin/env python3 """ Simple tab server for remote newsbeuter. Opens tabs on local desktop from a newsbeuter running elsewhere. Expected to be port forwarded to the remote server and then used over curl as newsbeuter"s browser command. 1. RemoteForward 1424 localhost:1424 2. browser "curl -F"a=%u" http://localhost:1424" 3. Profit?! """ import os import sys import subprocess import webbrowser from cgi import FieldStorage from argparse import ArgumentParser from wsgiref.simple_server import make_server at_work = os.environ.get("AT_WORK", "false").lower() == "true" parser = ArgumentParser() parser.add_argument("-b", "--browser", help="Browser to use") parser.add_argument("-a", "--addr", default="127.0.0.1", help="Bind address") parser.add_argument("-p", "--port", help="Bind port", type=int, default="1425" if at_work else "1424") args = parser.parse_args() opener = webbrowser.get(args.browser).open_new_tab try: with open("/dev/null", "w") as fp: subprocess.call(["open"], stderr=fp) use_open = True except OSError: use_open = False def simple_app(environ, start_response): if environ["REMOTE_ADDR"] != "127.0.0.1": start_response("403 Forbidden", [("Content-type", "text/plain")]) return "Go away." else: start_response("200 OK", [("Content-type", "text/plain")]) url = FieldStorage(fp=environ["wsgi.input"], environ=environ).getvalue("a") if use_open: subprocess.call(['open', url], shell=False) return "" else: return opener(url) and "" try: print("Listening on {}:{}...".format(args.addr, args.port)) make_server(args.addr, args.port, simple_app).serve_forever() except KeyboardInterrupt: print("Shutting down...") sys.exit(0)