Add email validation
Add a simple error display to base.jinja2 Build a bit of skeleton for saving letters to the DB.
This commit is contained in:
parent
86563761f2
commit
b3f56872d7
2
init
2
init
|
@ -38,7 +38,7 @@ commands=(
|
|||
"python3 -m venv $SCRIPT_DIR/.venv"
|
||||
"source .venv/bin/activate"
|
||||
"pip3 install -r requirements.txt"
|
||||
"mkdir $SCRIPT_DIR/outputs"
|
||||
"mkdir -p $SCRIPT_DIR/outputs"
|
||||
)
|
||||
|
||||
for com in "${commands[@]}"; do
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
bcrypt==4.0.0
|
||||
click==8.1.3
|
||||
email-validator==1.3.0
|
||||
Flask==2.2.2
|
||||
Flask-WTF==1.0.1
|
||||
Flask-SQLAlchemy==2.5.1
|
||||
|
|
|
@ -5,8 +5,9 @@ import subprocess
|
|||
import threading
|
||||
import urllib.parse
|
||||
|
||||
from flask import (Blueprint, render_template, request, make_response, session, redirect)
|
||||
from flask import (Blueprint, render_template, request, make_response, session, redirect, jsonify)
|
||||
from wtforms import Form, StringField, TextAreaField, validators
|
||||
from email_validator import validate_email, EmailNotValidError
|
||||
|
||||
import undercover.db as db
|
||||
from undercover.pdf_builder import CLData
|
||||
|
@ -103,10 +104,15 @@ def create_account_page():
|
|||
@writing_blueprint.route('/create_account', methods=['POST'])
|
||||
def create_account():
|
||||
email = request.form['login']
|
||||
user = db.get_user(email)
|
||||
if user:
|
||||
try:
|
||||
validate_email(email, check_deliverability=True)
|
||||
except EmailNotValidError as e:
|
||||
form = CLForm(request.form)
|
||||
return make_response(render_template('writing.jinja2', form=form, error=str(e)), 401)
|
||||
|
||||
if db.get_user(email):
|
||||
return make_response("A user with that email already exists!", 401)
|
||||
# TODO: Validate email address
|
||||
|
||||
db.add_user(email, request.form['password'])
|
||||
session['username'] = email
|
||||
return redirect('/')
|
||||
|
@ -121,7 +127,11 @@ def db_test_get():
|
|||
|
||||
@writing_blueprint.route('/update', methods=['POST'])
|
||||
def update_get():
|
||||
if os.environ['GITLAB_HOOK_TOKEN'] == request.headers['X-Gitlab-Token'] and request.headers['X-Gitlab-Event'] == "Push Hook":
|
||||
expected_token = os.environ['GITLAB_HOOK_TOKEN']
|
||||
given_token = request.headers['X-Gitlab-Token']
|
||||
event_type = request.headers['X-Gitlab-Event']
|
||||
|
||||
if expected_token == given_token and event_type == "Push Hook":
|
||||
print("Update notification received.")
|
||||
response = make_response("", 200)
|
||||
response.mimetype = "text/plain"
|
||||
|
@ -152,12 +162,22 @@ def index_post():
|
|||
body=form.body.data,
|
||||
)
|
||||
|
||||
email = session.get('login')
|
||||
if email:
|
||||
user = db.get_user(email)
|
||||
letters = db.get_user_letters(user.id)
|
||||
if True: # len(letters) == 0:
|
||||
db.add_letter(user.id, 'LETTER_TITLE', jsonify(data).get_data(True))
|
||||
else:
|
||||
print("TODO: Add letter editing!")
|
||||
# db.edit_letter()
|
||||
|
||||
(resp, errors) = data.generate_pdf()
|
||||
if errors:
|
||||
resp = make_response(render_template(
|
||||
'writing.jinja2',
|
||||
form=form,
|
||||
errors=errors,
|
||||
letter_errors=errors,
|
||||
))
|
||||
# Save entered data as cookies on user's machine
|
||||
for pair in data.get_pairs():
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
<h1><span class="logo left">Under</span><span class="logo right">Cover</span></h1>
|
||||
</a>
|
||||
<h2>The secret cover letter generator</h2>
|
||||
{% if error %}
|
||||
<div class="errors">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div
|
||||
{% block content %}
|
||||
{{ content }}
|
||||
{% endblock content %}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{% block head %}
|
||||
<script type="text/javascript">
|
||||
window.onload = () => {
|
||||
{% if errors %}
|
||||
{% if letter_errors %}
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
{% endif %}
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
|||
}
|
||||
|
||||
const clearErrors = () => {
|
||||
const e = document.getElementById('errors')
|
||||
const e = document.getElementById('letter_errors')
|
||||
e.parentNode.removeChild(e)
|
||||
}
|
||||
</script>
|
||||
|
@ -69,15 +69,15 @@
|
|||
{{ render_field(form.closingText) }}
|
||||
</dl>
|
||||
|
||||
{% if errors %}
|
||||
<div id=errors>
|
||||
{% if letter_errors %}
|
||||
<div id=letter_errors>
|
||||
<h3>Your letter has errors.</h3>
|
||||
<p>
|
||||
There is likely a typo in one of your variables (the {\blabla} bits).<br>
|
||||
Make sure each is spelled correctly, and has the correct brackets on either side
|
||||
</p>
|
||||
<p class=errors>
|
||||
{% for error in errors %}
|
||||
<p class=letter_errors>
|
||||
{% for error in letter_errors %}
|
||||
{{ error }}<br>
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
@ -86,7 +86,7 @@
|
|||
|
||||
<a href="javascript:void(0)"
|
||||
class="wipe up-wipe"
|
||||
{% if errors %}
|
||||
{% if letter_errors %}
|
||||
onclick="clearErrors();document.getElementById('letter-form').submit()"
|
||||
{% else %}
|
||||
onclick="document.getElementById('letter-form').submit()"
|
||||
|
|
Loading…
Reference in New Issue