diff --git a/app/main.py b/app/main.py index df9aac9..207fea3 100644 --- a/app/main.py +++ b/app/main.py @@ -7,11 +7,7 @@ app = Flask(__name__) - - - # Setup redirect and hosting of frontend - @app.route('/') def base(): return render_template('index.html', projecturl=os.environ["DOC_PROJECT_URL"], projectname=os.environ["DOC_PROJECT_NAME"]) @@ -87,8 +83,6 @@ def swaggerjson(): swagger_json["paths"]["/{}/{}".format(plugin,feature)] = paths return swagger_json - - if __name__ == '__main__': app.debug = True app.run(port=8080, host="0.0.0.0") diff --git a/app/plugins/mode/visitor_mode.py b/app/plugins/mode/visitor_mode.py index c838ff5..d074980 100644 --- a/app/plugins/mode/visitor_mode.py +++ b/app/plugins/mode/visitor_mode.py @@ -1,3 +1,4 @@ +import base64 import json import os #todo input sanitization @@ -9,8 +10,17 @@ def create(id): # POST return {"error":'Visitormode already exists'} else: + # Get the directory where the script is located + script_dir = os.path.dirname(os.path.realpath(__file__)) + + # Construct the full path to the image file + sample_image_path = os.path.join(script_dir, "visitor_mode_sample.png") + + with open(sample_image_path, "rb") as image_file: + encoded_sample_image = base64.b64encode(image_file.read()).decode('utf-8') + f = open(configpath, "w+") - content = {"id":"visitormode", "enabled":False} + content = {"id":"visitormode", "is_enabled":False, "base64_placeholder_image": encoded_sample_image} f.write(json.dumps(content)) f.close() return {'ok':'Visitor Mode Created'} @@ -27,6 +37,9 @@ def read(id=False): # GET content += [json.loads(mode_content)] return {'table':content} + elif id == "visitor_mode_image": + return '
' + else: #return specific mode configpath = "/data/modes/visitormode" if os.path.isfile(configpath) == False: @@ -38,14 +51,14 @@ def read(id=False): # GET f.close() return {'form':json.loads(content)} -def update(id, enabled): # POST +def update(id, is_enabled, base64_placeholder_image): # POST configpath = "/data/modes/visitormode" if os.path.isfile(configpath) == False: return {"error":'Mode does not exist'} else: f = open(configpath, "w+") - content = {"id":"visitormode", "enabled":enabled} + content = {"id":"visitormode", "is_enabled":is_enabled, "base64_placeholder_image": base64_placeholder_image} f.write(json.dumps(content)) f.close() return {'ok':'Mode config updated'} diff --git a/app/plugins/mode/visitor_mode_sample.png b/app/plugins/mode/visitor_mode_sample.png new file mode 100644 index 0000000..ec206c8 Binary files /dev/null and b/app/plugins/mode/visitor_mode_sample.png differ diff --git a/app/plugins/traefik/api_provider.py b/app/plugins/traefik/api_provider.py index 53fc11c..63130ac 100644 --- a/app/plugins/traefik/api_provider.py +++ b/app/plugins/traefik/api_provider.py @@ -12,9 +12,6 @@ def read(id=False): # GET else: provider = {"http":{"routers": {},"services": {}, "middlewares": {}}} - r = requests.get('http://localhost:8080/plugins/screens/manage_screen') - data = json.loads(r.text) - # add ssp admin panel provider['http']['routers']['admin'] = {'entryPoints': ['web', 'websecure'], 'service': 'admin', 'rule': 'HOST(`'+os.environ['SSP_DOMAIN']+'`)', 'tls': {'certResolver': 'myresolver'}, 'middlewares': ['ssp-auth']} provider['http']['services']['admin'] = {'loadBalancer': {"servers": [ {'url': 'http://ssp:8080'} ] } } @@ -33,12 +30,18 @@ def read(id=False): # GET # provider['http']['middlewares']['redirect']={"redirectregex":{"regex":"^(https?://[^/]+/[a-z0-9_]+)$", "replacement":"${1}/"} } provider['http']['middlewares']['strip'] = {"stripprefixregex":{"regex":"/[a-z0-9_]+"} } -#^(https?://[^/]+/?)$ + 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) + # add configured screens - for screen in data['table']: + for screen in screen_data['table']: try: - screen_host = re.match("^(https?://[^/]+)/(.*)$", screen['url']).groups()[0] - screen_path = re.match("^(https?://[^/]+)/(.*)$", screen['url']).groups()[1] + if len(mode_data['table']) > 0 and mode_data['table'][0]['is_enabled'] == 'true': + screen_host = 'http://ssp:8080' + screen_path = '/plugins/mode/visitor_mode?id=visitor_mode_image' + else: + 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':['service_'+screen['id']], 'tls':{'certResolver':'myresolver'}} provider['http']['services']['service_'+screen['id']] = {"loadBalancer":{"servers":[{'url':screen_host}], "passHostHeader": False } } diff --git a/app/static/main.js b/app/static/main.js index f42efe2..b2945d3 100644 --- a/app/static/main.js +++ b/app/static/main.js @@ -1,6 +1,6 @@ // Helper Functions String.prototype.niceify = function() { - return this.replace('_', ' ').replace(/\b[a-z]/g, function(letter) { + return this.replaceAll('_', ' ').replace(/\b[a-z]/g, function(letter) { return letter.toUpperCase(); }); } @@ -44,11 +44,19 @@ function start_feature_read(plugin, feature, id) { tablecode = '' document.getElementById("results").innerHTML = tablecode } - else { + else + dev_visiter_mode tablecode = '| ' - Object.keys(data['table'][0]).forEach((element) => tablecode+=' | '+element+' | '); + Object.keys(data['table'][0]).forEach((element) => tablecode+=''+element.niceify()+' | '); tablecode += '|
|---|---|---|---|
| Edit | Delete | '+Object.values(element).join(' | ')+' |
| Edit | Delete | '+Object.values(element).join(' | ')+' |
| NEW | '; // Object.keys(data['table'][0]).forEach((element) => tablecode+=''); // tablecode += ' |