76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
from os import getenv
|
|
|
|
from dotenv import load_dotenv
|
|
from flask import Flask
|
|
from flask import current_app
|
|
from flask import json
|
|
from flask import jsonify
|
|
from flask import make_response
|
|
from flask import request
|
|
from flask_mail import Mail
|
|
from flask_mail import Message
|
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
|
|
|
|
|
load_dotenv()
|
|
|
|
app = Flask(__name__)
|
|
app.config.update(
|
|
DEBUG=getenv("FLASK_DEBUG") == "True",
|
|
MAIL_SERVER=getenv("FLASK_MAIL_SERVER"),
|
|
MAIL_PORT=getenv("FLASK_MAIL_PORT"),
|
|
MAIL_USE_SSL=getenv("FLASK_MAIL_USE_SSL"),
|
|
MAIL_DEBUG=False,
|
|
MAIL_USERNAME=getenv("FLASK_MAIL_USERNAME"),
|
|
MAIL_PASSWORD=getenv("FLASK_MAIL_PASSWORD"),
|
|
MAIL_RECIPIENT=getenv("FLASK_MAIL_RECIPIENT"),
|
|
MAIL_SENDER=getenv("FLASK_MAIL_SENDER")
|
|
)
|
|
app.wsgi_app = ProxyFix(app.wsgi_app)
|
|
|
|
mail = Mail(app)
|
|
|
|
|
|
@app.after_request
|
|
def after(response):
|
|
response.headers["Access-Control-Allow-Origin"] = "*"
|
|
response.headers["Access-Control-Allow-Headers"] = "*"
|
|
return response
|
|
|
|
|
|
@app.route("/rfq", methods=["POST"])
|
|
def send_rfq():
|
|
payload = request.json
|
|
payload = json.loads(json.htmlsafe_dumps(payload))
|
|
|
|
if payload is None:
|
|
resp = jsonify(error="invalid data")
|
|
return make_response(resp, 400)
|
|
|
|
if "email" not in payload:
|
|
resp = jsonify(error="missing email")
|
|
return make_response(resp, 400)
|
|
|
|
if "note" not in payload:
|
|
resp = jsonify(error="missing note")
|
|
return make_response(resp, 400)
|
|
|
|
if "configuration" not in payload:
|
|
resp = jsonify(error="missing configuration")
|
|
return make_response(resp, 400)
|
|
|
|
sender = current_app.config["MAIL_SENDER"]
|
|
recipient = current_app.config["MAIL_RECIPIENT"]
|
|
|
|
msg = Message(
|
|
"RFQ for Sinara hardware from {}".format(payload["email"]),
|
|
sender=sender,
|
|
recipients=[recipient, payload["email"]])
|
|
msg.body = ("From: {}\nConfiguration: {}\nNote: {}"
|
|
.format(payload["email"], payload["configuration"], payload["note"]))
|
|
|
|
with mail.connect() as conn:
|
|
conn.send(msg)
|
|
|
|
return jsonify("ok")
|