diff --git a/Tweeder.py b/Tweeder.py index 28b3606..159abb0 100644 --- a/Tweeder.py +++ b/Tweeder.py @@ -1,5 +1,5 @@ -from flask import Flask, render_template, request, redirect, url_for, session -from backend import accounts, timeline +from flask import Flask, render_template, request, redirect, url_for, session, make_response, abort +from backend import accounts, timeline, files app = Flask(__name__) app.secret_key = "eVZ4EmVK70iETb03KqDAXV5sBHb3T73t" @@ -127,16 +127,26 @@ def user_settings(): else: return redirect(url_for('login')) elif request.method == "POST": + print(request.files) + print(request.form) if 'username' not in session.keys(): return redirect(url_for('login')) - profile = { + updated_profile = { 'bio': request.form['bio'], 'gender': request.form['gender'], 'location': request.form['location'] } + if 'profile_pic' in request.files.keys(): + if request.files['profile_pic'].filename == '': + if accounts.account_details(session['username'].lower())['profile']['profile_pic']: + profile_pic = accounts.account_details(session['username'].lower())['profile']['profile_pic'] + updated_profile['profile_pic'] = profile_pic + else: + profile_pic = files.upload_file(request.files['profile_pic']) + updated_profile['profile_pic'] = profile_pic accounts.set_theme(session['username'].lower(), request.form['theme']) username = session['username'] - accounts.update_profile(username, profile) + accounts.update_profile(username, updated_profile) return redirect(request.referrer) @@ -216,5 +226,15 @@ def unlike_post(post_id): elif request.method == "GET": pass + +@app.route("/files/", methods=['GET']) +def get_file(oid): + fl = files.get_file(oid) + if not fl: return abort(404) + response = make_response(fl.read()) + response.mimetype = fl.content_type + return response + + if __name__ == '__main__': app.run(host="127.0.0.1", debug=True) diff --git a/backend/files.py b/backend/files.py new file mode 100644 index 0000000..2eded9d --- /dev/null +++ b/backend/files.py @@ -0,0 +1,25 @@ +from pymongo import MongoClient +from bson.objectid import ObjectId +from gridfs.errors import NoFile +from werkzeug.utils import secure_filename +import gridfs + +client = MongoClient() +db = client.tweeder +files_db = gridfs.GridFS(client.tweeder_files) +accounts_db = db.accounts + + +def get_file(oid): + try: + return files_db.get(ObjectId(oid)) + except NoFile: + return False + + +def upload_file(file_to_upload): + if file_to_upload.filename == '': + return False + filename = secure_filename(file_to_upload.filename) + obj = files_db.put(file_to_upload, content_type=file_to_upload.content_type, filename=filename) + return obj diff --git a/templates/profile.html b/templates/profile.html index 278ee17..2f30c0e 100644 --- a/templates/profile.html +++ b/templates/profile.html @@ -3,6 +3,9 @@ {% block content %}
+ {% if user.profile.profile_pic %} + + {% endif %}

{% if user.verified %} {% endif %}{{ user.displayname }} on Tweeder

{% if user.profile.bio %} @@ -11,6 +14,7 @@ Tweeder user since 1984 {% endif %}

+
diff --git a/templates/settings.html b/templates/settings.html index da4ac77..eb8c8e0 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -3,8 +3,10 @@ {% block content %}

Settings for {{ logged_in }}


-
+
+

Profile Picture

+

Profile Fields