File size: 2,761 Bytes
95dc95a
1184b99
95dc95a
1184b99
 
 
 
 
 
 
 
 
 
 
95dc95a
 
 
 
1184b99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95dc95a
1184b99
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import requests
from flask import Flask, Response, request
import socket
from pathlib import Path
import streamlit.web.bootstrap
from streamlit import config as _config
import kangas as kg

proj_dir = Path(__file__).parent
filename = proj_dir / "app.py"

_config.set_option("server.headless", True)
_config.set_option("server.port", 7840)
args = []

hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)

application = Flask(__name__)

@application.route('/kangas',  strict_slashes=False)
@application.route('/kangas/<path:path>')
def kangas_proxy(path=None):
    query_string = request.query_string.decode('utf-8')

    if path is None and len(query_string) < 1:
        resp = requests.get(f'http://{ip_address}:7640/')
    else:
        if path is None:
            path = ''
        resp = requests.get(f'http://{ip_address}:7640/{str(path)}?{query_string}')
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
    response = Response(resp.content, resp.status_code, headers)
    return response

@application.route('/api/<path:path>')
def api_proxy(path):
    query_string = request.query_string.decode('utf-8')
    
    resp = requests.get(f'http://{ip_address}:7640/api/{path}?{query_string}')
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
    response = Response(resp.content, resp.status_code, headers)
    return response

@application.route('/_next/<path:path>')
def next_proxy(path=None):
    application.logger.info("PATH: %s" % path)
    resp = requests.get(f'http://{ip_address}:7640/_next/%s' % path)
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
    response = Response(resp.content, resp.status_code, headers)
    return response


@application.route('/<path>.png')
@application.route('/<path>.ico')
def image_proxy(path=None):
    application.logger.info(path)
    resp = requests.get(f'http://{ip_address}:7640/%s.png' % path)
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
    response = Response(resp.content, resp.status_code, headers)
    application.logger.info(response)
    return response


if __name__ == "__main__":
    application.run(debug=True)