diff --git a/.gitignore b/.gitignore index 13a4f63..c46230f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ __pycache__/ *.json sites/templates/ + +images/ diff --git a/avatar.py b/avatar.py new file mode 100644 index 0000000..40c82a7 --- /dev/null +++ b/avatar.py @@ -0,0 +1,41 @@ +import os +import dotenv +import db +import random +import json + + +IMAGE_LOCATION = os.getenv('IMAGE_LOCATION') +if IMAGE_LOCATION == None: + IMAGE_LOCATION = "/data" + +ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'} +MAIN_DOMAIN = os.getenv('MAIN_DOMAIN') +if MAIN_DOMAIN == None: + MAIN_DOMAIN = "shakecities.com" + +if MAIN_DOMAIN == "127.0.0.1:5000": + MAIN_DOMAIN = f"http://{MAIN_DOMAIN}" +else: + MAIN_DOMAIN = f"https://{MAIN_DOMAIN}" + + +def allowed_file(filename): + return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + +def save_avatar(file,owner): + filename = file.filename + while os.path.exists(f"{IMAGE_LOCATION}/{filename}"): + filename = f"{random.randint(0,1000000)}-{filename}" + file.save(f"{IMAGE_LOCATION}/{filename}") + user_data = db.get_website_data_raw(owner) + user_data['avatar'] = MAIN_DOMAIN + "/avatar/" + filename + db.update_website_data_raw(owner,json.dumps(user_data)) + return filename + +def clear(owner): + user_data = db.get_website_data_raw(owner) + filename = user_data['avatar'].split('/')[-1] + os.remove(f"{IMAGE_LOCATION}/{filename}") + user_data['avatar'] = "" + db.update_website_data_raw(owner,json.dumps(user_data)) diff --git a/main.py b/main.py index 03999d9..2432dc4 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ import accounts import db import varo import re +import avatar app = Flask(__name__) dotenv.load_dotenv() @@ -22,9 +23,13 @@ dbargs = { 'database':os.getenv('DB_NAME') } + CITY_DOMAIN = os.getenv('CITY_DOMAIN') if CITY_DOMAIN == None: CITY_DOMAIN = "exampledomainnathan1" +IMAGE_LOCATION = os.getenv('IMAGE_LOCATION') +if IMAGE_LOCATION == None: + IMAGE_LOCATION = "/data" random_sites = "" @@ -33,6 +38,10 @@ random_sites = "" def assets(path): return send_from_directory('templates/assets', path) +@app.route('/avatar/') +def avatar_view(path): + return send_from_directory(IMAGE_LOCATION, path) + def error(message): return render_template('error.html', message=message) @@ -243,6 +252,50 @@ def save_hnschat(): return redirect('/hnschat') +@app.route('/upload', methods=['POST']) +def upload_avatar(): + token = request.cookies['token'] + if not accounts.validate_token(token): + return error('Sorry we had an issue verifying your account') + # Verify token + user = accounts.validate_token(token) + if not user: + # Remove cookie + resp = make_response(redirect('/login')) + resp.set_cookie('token', '', expires=0) + return resp + + if 'file' not in request.files: + return error('We couldn\'t find a file in your request') + file = request.files['file'] + + if file.filename == '': + return error('We couldn\'t find a file in your request') + + if file and avatar.allowed_file(file.filename): + # Save the file to the upload folder + avatar.save_avatar(file,user['domain']) + return redirect('/edit') + + + return error('Sorry we couldn\'t upload your file') + +@app.route('/avatar/clear') +def avatar_clear(): + token = request.cookies['token'] + if not accounts.validate_token(token): + return error('Sorry we had an issue verifying your account') + # Verify token + user = accounts.validate_token(token) + if not user: + # Remove cookie + resp = make_response(redirect('/login')) + resp.set_cookie('token', '', expires=0) + return resp + + avatar.clear(user['domain']) + return redirect('/edit') + @app.route('/') def catch_all(path): @@ -282,6 +335,7 @@ def catch_all(path): return render_template(path + '.html',account=account,account_link=account_link,account_link_name=account_link_name,site=site,CITY_DOMAIN=CITY_DOMAIN,domain=domain) return redirect('/') # 404 catch all + # 404 catch all @app.errorhandler(404) def not_found(e): diff --git a/templates/edit.html b/templates/edit.html index 0209019..e026088 100644 --- a/templates/edit.html +++ b/templates/edit.html @@ -42,7 +42,8 @@

Edit your page

-
+ Clear
+