UnderCover/undercover/routes.py

142 lines
3.9 KiB
Python
Raw Normal View History

# Copyright Sage Vaillancourt 2021
import os
2022-09-22 15:43:36 -04:00
import subprocess
import threading
import urllib.parse
from flask import (Blueprint, render_template, request, make_response, session, redirect)
from wtforms import Form, StringField, TextAreaField, validators
2021-07-23 23:09:08 -04:00
import undercover.db as db
from undercover.pdf_builder import CLData
index_cache = None
writing_blueprint = Blueprint('writing', __name__,)
class CLForm(Form):
username = StringField(
'Username:',
[validators.Length(min=4, max=99)],
default="Sage"
)
company = StringField(
'Company:',
[validators.Length(min=2, max=99)],
default="BananaCorp"
)
jobAndPronoun = StringField(
'Job and Pronoun (a/an):',
[validators.Length(min=4, max=99)],
2021-07-24 01:08:18 -04:00
default="a banana stocker"
)
skillTypes = StringField(
'Skill Type:',
[validators.Length(min=2, max=99)],
default="practical"
)
mySkills = StringField(
'My Skills:',
[validators.Length(min=2, max=99)],
2021-07-24 01:08:18 -04:00
default="stocking bananas"
)
closingText = TextAreaField(
'Closing Text:',
[validators.Length(min=2, max=99)],
default="I look forward to hearing from you"
)
body = TextAreaField(
'Body:',
[validators.Length(min=4, max=9999)],
2022-09-22 15:47:51 -04:00
default=(
"My name is {\\username}. I'm excited for the opportunity to work as "
"{\\jobAndPronoun} with your company. I think my {\\skillTypes} knowledge "
2022-09-22 16:58:12 -04:00
"of {\\mySkills} could contribute well to your team.\n\n"
2022-09-22 15:47:51 -04:00
"I am passionate about what I do, and I think we would work well together.\n\n"
"Thank you for your consideration."
)
)
@writing_blueprint.route('/login', methods=['POST'])
def login_post():
username = request.form['username']
if db.login(username, request.form['password']):
session['username'] = username
return redirect('/')
return make_response("", 401)
@writing_blueprint.route('/', methods=['GET'])
def index_get():
global index_cache
if not index_cache:
index_cache = render_template(
'writing.jinja2',
form=CLForm()
)
return index_cache
@writing_blueprint.route('/dbtest', methods=['GET'])
def db_test_get():
response = make_response(db.get_user_letters(1)[0].contents, 200)
response.mimetype = "text/plain"
return response
@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":
print("Update notification received.")
response = make_response("", 200)
response.mimetype = "text/plain"
2022-09-22 15:43:36 -04:00
threading.Timer(5, git_update, []).start()
return response
else:
return make_response("", 404)
2022-09-22 15:43:36 -04:00
def git_update():
script = os.environ['UPDATE_SCRIPT_PATH']
if not script:
return
subprocess.run(['bash', '-c', "test -f " + script + " && " + script])
@writing_blueprint.route('/', methods=['POST'])
def index_post():
form = CLForm(request.form)
if form.validate():
2021-07-23 23:09:08 -04:00
data = CLData(
username=form.username.data,
company=form.company.data,
jobAndPronoun=form.jobAndPronoun.data,
skillTypes=form.skillTypes.data,
mySkills=form.mySkills.data,
closingText=form.closingText.data,
2021-07-23 23:09:08 -04:00
body=form.body.data,
)
(resp, errors) = data.generate_pdf()
if errors:
resp = make_response(render_template(
'writing.jinja2',
form=form,
errors=errors,
))
# Save entered data as cookies on user's machine
for pair in data.get_pairs():
resp.set_cookie(pair[0], urllib.parse.quote(pair[1]))
return resp
return render_template(
'writing.jinja2',
form=form,
)