From 130ac4532eeb7b37794e1ecd80deb7318ced09fc Mon Sep 17 00:00:00 2001
From: Ben Busby <benbusby@protonmail.com>
Date: Wed, 6 May 2020 18:39:12 -0600
Subject: [PATCH] Refactored handling of user config

Now implemented as a flask global variable reads from the same json file
as before, but doesn't crash if it does not find an existing file.

Removed user config creation from run script
---
 app/routes.py  | 12 +++++-------
 whoogle-search |  5 -----
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/app/routes.py b/app/routes.py
index 778aded..5091cfc 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -13,12 +13,13 @@ import urllib.parse as urlparse
 app.config['APP_ROOT'] = os.getenv('APP_ROOT', os.path.dirname(os.path.abspath(__file__)))
 app.config['STATIC_FOLDER'] = os.getenv('STATIC_FOLDER', os.path.join(app.config['APP_ROOT'], 'static'))
 
-user_config = json.load(open(app.config['STATIC_FOLDER'] + '/config.json'))
+CONFIG_PATH = app.config['STATIC_FOLDER'] + '/config.json'
 
 
 @app.before_request
 def before_request_func():
     g.user_request = Request(request.headers.get('User-Agent'))
+    g.user_config = json.load(open(CONFIG_PATH)) if os.path.exists(CONFIG_PATH) else {}
 
 
 @app.errorhandler(404)
@@ -28,7 +29,7 @@ def unknown_page(e):
 
 @app.route('/', methods=['GET'])
 def index():
-    bg = '#000' if 'dark' in user_config and user_config['dark'] else '#fff'
+    bg = '#000' if 'dark' in g.user_config and g.user_config['dark'] else '#fff'
     return render_template('index.html', bg=bg, ua=g.user_request.modified_user_agent)
 
 
@@ -61,7 +62,7 @@ def search():
     user_agent = request.headers.get('User-Agent')
     mobile = 'Android' in user_agent or 'iPhone' in user_agent
 
-    content_filter = Filter(mobile, user_config, secret_key=app.secret_key)
+    content_filter = Filter(mobile, g.user_config, secret_key=app.secret_key)
     full_query = gen_query(q, request_params, content_filter.near)
     get_body = g.user_request.send(query=full_query)
 
@@ -73,17 +74,14 @@ def search():
 
 @app.route('/config', methods=['GET', 'POST'])
 def config():
-    global user_config
     if request.method == 'GET':
-        return json.dumps(user_config)
+        return json.dumps(g.user_config)
     else:
         config_data = request.form.to_dict()
         with open(app.config['STATIC_FOLDER'] + '/config.json', 'w') as config_file:
             config_file.write(json.dumps(config_data, indent=4))
             config_file.close()
 
-            user_config = config_data
-
         return redirect('/')
 
 
diff --git a/whoogle-search b/whoogle-search
index 65bf823..e8bcc7f 100755
--- a/whoogle-search
+++ b/whoogle-search
@@ -17,11 +17,6 @@ export STATIC_FOLDER=$APP_ROOT/static
 
 mkdir -p $STATIC_FOLDER
 
-# Create default config json if it doesn't exist
-if [[ ! -f $STATIC_FOLDER/config.json ]]; then
-    echo "{}" > $STATIC_FOLDER/config.json
-fi
-
 pkill flask
 
 # Check for regular vs test run