diff --git a/app/plugins/traefik/api_provider.py b/app/plugins/traefik/api_provider.py index 510fbbb..c33b6dc 100644 --- a/app/plugins/traefik/api_provider.py +++ b/app/plugins/traefik/api_provider.py @@ -28,7 +28,7 @@ def read(id=False): # GET # provider['http']['middlewares']['chain']={"chain":{"middlewares":["redirect", "strip"]} } # provider['http']['middlewares']['redirect']={"redirectregex":{"regex":"^(https?://[^/]+/[a-z0-9_]+)$", "replacement":"${1}/"} } - provider['http']['middlewares']['strip'] = {"stripprefixregex":{"regex":"/[a-z0-9_]+"} } + provider['http']['middlewares']['strip'] = {"stripPrefixRegex":{"regex":"/[a-z0-9_]+"} } mode_data = json.loads((requests.get('http://localhost:8080/plugins/mode/visitor_mode')).text) screen_data = json.loads((requests.get('http://localhost:8080/plugins/screens/manage_screen')).text) @@ -43,17 +43,24 @@ def read(id=False): # GET screen_host = re.match("^(https?://[^/]+)/(.*)$", screen['url']).groups()[0] screen_path = re.match("^(https?://[^/]+)/(.*)$", screen['url']).groups()[1] - provider['http']['routers']['router_'+screen['id']] = {'entryPoints':['web', 'websecure'], 'service':'service_'+screen['id'], 'rule':'HOST(`'+screen['id']+'.'+os.environ["SSP_DOMAIN"]+'`)', 'middlewares':['redirect_'+screen['id'], 'header_'+screen['id']], 'tls':{'certResolver':'myresolver'}} + provider['http']['routers']['router_'+screen['id']] = {'entryPoints':['web', 'websecure'], 'service':'service_'+screen['id'], 'rule':'HOST(`'+screen['id']+'.'+os.environ["SSP_DOMAIN"]+'`)', 'middlewares':['redirect_'+screen['id']], 'tls':{'certResolver':'myresolver'}} + provider['http']['services']['service_'+screen['id']] = {"loadBalancer":{"servers":[{'url':screen_host}], "passHostHeader": False } } - provider['http']['middlewares']['redirect_'+screen['id']] = {"redirectregex":{"regex":"^(https?://[^/]+/?)$", "replacement":"${1}"+screen_path} } + provider['http']['middlewares']['redirect_'+screen['id']] = {"redirectRegex":{"regex":"^(https?://[^/]+/?)$", "replacement":"${1}"+screen_path} } upstream_headers = {} - try: - upstream_headers = json.loads(screen['headers']) - except: - pass + raw_headers = screen.get('headers', '') + if isinstance(raw_headers, str) and raw_headers.strip(): + try: + parsed = json.loads(raw_headers) + if isinstance(parsed, dict): + upstream_headers = {str(k): str(v) for k, v in parsed.items() if v is not None} + except Exception: + pass - provider['http']['middlewares']['header_'+screen['id']] = {"headers": {"customRequestHeaders" : upstream_headers} } + if upstream_headers: + provider['http']['routers']['router_'+screen['id']]['middlewares'].append('header_'+screen['id']) + provider['http']['middlewares']['header_'+screen['id']] = {"headers": {"customRequestHeaders" : upstream_headers} } except: print("error parsing URL")