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 cae455973550683014d2d63bf0b5d577cef1df7e..49bb50a9ec36a7c25e6430b1dd27d870381f2a94 100644 --- a/servicePoints/templates/index.html +++ b/servicePoints/templates/index.html @@ -21,7 +21,7 @@ <a href="/accounts/tutorsu/"> <img src=/images/tutor.png alt="tutorsu"> </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/accounts.py b/servicePoints/views/accounts.py index 055fd37de57cc0b0650d85c318a628c8f7df826d..8a3b12a13e8ba10b7da47d303d7689a5b641ead5 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'] @@ -284,4 +290,79 @@ def tutorsu(): return flask.redirect(flask.url_for('index')) context = {} - return render_template('tutor.html', **context) \ No newline at end of file + return render_template('tutor.html', **context) + +@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() + diff --git a/sql/schema.sql b/sql/schema.sql index 74cd21f483ee9512aa8b4e43b40795e7723f5800..0e5ffc94d83f3b8047e3492ea6698eb32df4b6ff 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -16,10 +16,20 @@ CREATE TABLE orgs( PRIMARY KEY(orgName) ); +<<<<<<< HEAD CREATE TABLE tutors( username VARCHAR(20) NOT NULL, subject VARCHAR(40) NOT NULL, time VARCHAR(80) NOT NULL, PRIMARY KEY(username) +======= +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) +>>>>>>> a13a88a5b357d5ce4091c99247484845da5be53e ); \ 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