diff --git a/servicePoints/templates/confirmSubmission.html b/servicePoints/templates/confirmSubmission.html new file mode 100644 index 0000000000000000000000000000000000000000..5d8a185faafd9cb161425f6c852da5df5b7c4f5e --- /dev/null +++ b/servicePoints/templates/confirmSubmission.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> + <body> + <p> + Your submission has been sent to {{leader}} + </p> + <form action="/accounts/confirmSubmission/" method="post" enctype="multipart/form-data"> + <input type="submit" name="return" value="Return to Homepage"/> + </form> + </body> +</html> \ No newline at end of file diff --git a/servicePoints/templates/delete.html b/servicePoints/templates/delete.html index 9a5db10b0d93eed24a9f6b87e5e5e940391fd1a0..8ef2fd1bcd8cd8628b44023c71a99b8b73bded26 100644 --- a/servicePoints/templates/delete.html +++ b/servicePoints/templates/delete.html @@ -7,14 +7,9 @@ <body> <h1> - <a href="/">/ </a> - | - <a href="/u/{{username}}/">{{username}}</a> + <a href="/">Back to Homepage</a> </h1> <p>{{username}}</p> - <p> - {{username}} - </p> <form action="/accounts/delete/" method="post" enctype="multipart/form-data"> <input type="submit" name="delete" value="confirm delete account"/> </form> diff --git a/servicePoints/templates/index.html b/servicePoints/templates/index.html index 38f815182d8e99cee2fee0effa298b4da4ea7878..3810b909e90f6ffb90ed68e9dfa40a69985b9050 100644 --- a/servicePoints/templates/index.html +++ b/servicePoints/templates/index.html @@ -21,7 +21,7 @@ <a href="/accounts/mask/"> <img src=/images/tutor.png alt="mask"> </a> - <a href="/accounts/mask/"> + <a href="/accounts/submitPoints/"> <img src=/images/submit.png alt="mask"> </a> diff --git a/servicePoints/templates/submitPoints.html b/servicePoints/templates/submitPoints.html new file mode 100644 index 0000000000000000000000000000000000000000..cd49ae0ec261d785431c108af1150eb663e951ea --- /dev/null +++ b/servicePoints/templates/submitPoints.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <link rel="stylesheet" type="text/css" href="/css/style.css"> + <h1 style="text-align:center">Submit Points</h1> + <p>{{username}}</p> + <p>{{org}}</p> + <p>Hours: {{hours}}</p> + <a href="/accounts/index/">Back to Homepage</a> + </head> + + <form action="/accounts/submitPoints/" method="post" enctype="multipart/form-data"> + <p> + <label for="service">Select the type of service:</label> + + <select name="service" id="service"> + <option value="mask">Mask-Making</option> + <option value="blood">Donating Blood</option> + <option value="tutor">Tutoring</option> + <option value="food">Donating Food</option> + </select> + </p> + <p> + Photo for proof of service + <input type="file" name="file"> + </p> + <p> + <input type="submit" name="update" value="submit" /> + </p> + </form> +</html> \ No newline at end of file diff --git a/servicePoints/views/__pycache__/accounts.cpython-36.pyc b/servicePoints/views/__pycache__/accounts.cpython-36.pyc index 865419fc28b3340d4bb6e9312e8ea0508d78d314..eb1ed6e4f1999df8fe3ef75147131ce55ee8d14b 100644 Binary files a/servicePoints/views/__pycache__/accounts.cpython-36.pyc and b/servicePoints/views/__pycache__/accounts.cpython-36.pyc differ diff --git a/servicePoints/views/accounts.py b/servicePoints/views/accounts.py index e42976a4ea3967a269a80ce9853e43c3321e7d91..a35f8bc71863e7d8830a104198d5d364f75faaca 100644 --- a/servicePoints/views/accounts.py +++ b/servicePoints/views/accounts.py @@ -2,6 +2,8 @@ import hashlib import uuid import os import flask +import shutil +import tempfile from flask import render_template import servicePoints APP = flask.Flask(__name__) @@ -68,10 +70,14 @@ def create(): if cursor.fetchone() is None: return flask.redirect(flask.url_for('orgNotFound')) - # If a user tries to create an account with an empty string as the - # password, abort(400) - if password == '': - flask.abort(400) + if len(str(flask.request.form['password'])) is 0 or len(str(flask.request.form['fullname'])) is 0: + return flask.redirect(flask.url_for('incompleteForm', prev="create")) + + if len(str(flask.request.form['orgName'])) is 0 or len(str(flask.request.form['email'])) is 0: + return flask.redirect(flask.url_for('incompleteForm', prev="create")) + + if len(str(flask.request.form['username'])) is 0: + return flask.redirect(flask.url_for('incompleteForm', prev="create")) flask.session['username'] = flask.request.form['username'] flask.session['fullname'] = flask.request.form['fullname'] @@ -247,3 +253,77 @@ def images(filename): return flask.send_from_directory( servicePoints.app.config['IMAGES_FOLDER'], filename, as_attachment=True) return flask.redirect(flask.url_for('login')) + +@servicePoints.app.route('/accounts/submitPoints/', methods=['GET', 'POST']) +def submitPoints(): + if flask.request.method == 'POST': + dummy, temp_filename = tempfile.mkstemp() + file = flask.request.files["file"] + serviceType = flask.request.form["service"] + file.save(temp_filename) + + # Compute filename + hash_txt = sha256sum(temp_filename) + dummy, suffix = os.path.splitext(file.filename) + hash_filename_basename = hash_txt + suffix + hash_filename = os.path.join( + servicePoints.app.config["IMAGES_FOLDER"], + hash_filename_basename + ) + + # Move temp file to permanent location + shutil.move(temp_filename, hash_filename) + cursor = servicePoints.model.get_db() + username = flask.session["username"] + studentOrgCur = cursor.execute('SELECT orgName FROM users WHERE ' + 'username =:who', + {"who": username}) + results = studentOrgCur.fetchone() + orgName = results["orgName"] + studentOrgLeader = cursor.execute('SELECT username FROM orgs WHERE ' + 'orgName =:who', + {"who": orgName}) + results = studentOrgLeader.fetchone() + leader = results["username"] + cursor.execute('INSERT INTO requests(member, leader, service, filename) VALUES ' + '(:one,:two,:three,:four)', {"one": username, "two": leader, "three": serviceType, "four": hash_filename_basename}) + return flask.redirect(flask.url_for('confirmSubmission')) + username = flask.session["username"] + cursor = servicePoints.model.get_db() + studentOrgCur = cursor.execute('SELECT orgName, hours FROM users WHERE ' + 'username =:who', + {"who": username}) + results = studentOrgCur.fetchone() + context = {'username': username, 'org': results["orgName"], 'hours': results["hours"]} + return render_template('submitPoints.html', **context) + +@servicePoints.app.route('/accounts/confirmSubmission/', methods=['GET', 'POST']) +def confirmSubmission(): + if flask.request.method == 'POST': + return flask.redirect(flask.url_for('index')) + username = flask.session["username"] + cursor = servicePoints.model.get_db() + studentOrgCur = cursor.execute('SELECT orgName FROM users WHERE ' + 'username =:who', + {"who": username}) + results = studentOrgCur.fetchone() + orgName = results["orgName"] + studentOrgLeader = cursor.execute('SELECT username FROM orgs WHERE ' + 'orgName =:who', + {"who": orgName}) + results = studentOrgLeader.fetchone() + leader = results["username"] + studentOrgLeaderFull = cursor.execute('SELECT fullname FROM users WHERE ' + 'username =:who', + {"who": leader}) + results = studentOrgLeaderFull.fetchone() + context = {"leader": results["fullname"]} + return render_template('confirmSubmission.html', **context) + + + +def sha256sum(filename): + """Return sha256 hash of file content, similar to UNIX sha256sum.""" + content = open(filename, 'rb').read() + sha256_obj = hashlib.sha256(content) + return sha256_obj.hexdigest() \ No newline at end of file diff --git a/sql/schema.sql b/sql/schema.sql index cf8c4be358d347da9c7ccf3bb92779695c01c261..5779cd8260f8b76f9242b071d69ed73fd14c1411 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -14,4 +14,13 @@ CREATE TABLE orgs( username VARCHAR(20) NOT NULL, orgName VARCHAR(40) NOT NULL, PRIMARY KEY(orgName) +); + +CREATE TABLE requests( + postid INTEGER NOT NULL, + member VARCHAR(20) NOT NULL, + leader VARCHAR(40) NOT NULL, + service VARCHAR(40) NOT NULL, + filename VARCHAR(64) NOT NULL, + PRIMARY KEY(postid) ); \ No newline at end of file diff --git a/var/images/c0cf17efda2368530bb66b4e2fb68456865edbbdaa67c99783de324711384437.jpg b/var/images/c0cf17efda2368530bb66b4e2fb68456865edbbdaa67c99783de324711384437.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7f849e6e752e3a8331fe22bb1261a55ce6965e8 Binary files /dev/null and b/var/images/c0cf17efda2368530bb66b4e2fb68456865edbbdaa67c99783de324711384437.jpg differ diff --git a/var/images/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 b/var/images/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/var/servicePoints.sqlite3 b/var/servicePoints.sqlite3 index 12b075764feae87c8ab17d440739fe167aa7a16e..d8f2f0286c34dc7b57ddc6ecf5e2c42001235257 100644 Binary files a/var/servicePoints.sqlite3 and b/var/servicePoints.sqlite3 differ