redirect.py 1.35 KB
#!/usr/bin/env python3

# python standard libraries
import argparse

# third party libraries
from tornado.web import RedirectHandler, Application
from tornado.ioloop import IOLoop


def main():
    default_url = 'https://bit.xdi.uevora.pt/'
    default_port = 8080

    # --- Commandline argument parsing
    argparser = argparse.ArgumentParser(
        description='Redirection server. '
        'Listen on a given port for HTTP requests and responds with a '
        '301 - Moved Permanently - so that the browser is redirected to the '
        'correct target address.'
        )
    argparser.add_argument(
        '-p', '--port', type=int, default=default_port,
        help=f'Port to listen to (default: {default_port})'
    )
    argparser.add_argument(
        '-t', '--target', type=str, default=default_url,
        help=f'Target address (default: {default_url})'
        )
    arg = argparser.parse_args()
    print(f'Redirecting from port {arg.port} to {arg.target}')

    # --- run server
    handlers = [(r'.*', RedirectHandler, {'url': arg.target})]
    app = Application(handlers)
    app.listen(arg.port)

    try:
        IOLoop.current().start()  # running...
    except Exception:
        IOLoop.current().stop()

    print('Redirection stopped!')


# ----------------------------------------------------------------------------
if __name__ == "__main__":
    main()