71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""Endpoints for contacting the site owner."""
|
|
|
|
from flask import Blueprint, request, redirect, url_for, flash
|
|
|
|
from rophako.utils import template, send_email, remote_addr
|
|
from rophako.settings import Config
|
|
|
|
mod = Blueprint("contact", __name__, url_prefix="/contact")
|
|
|
|
|
|
@mod.route("/")
|
|
def index():
|
|
return template("contact/index.html")
|
|
|
|
|
|
@mod.route("/send", methods=["POST"])
|
|
def send():
|
|
"""Submitting the contact form."""
|
|
name = request.form.get("name", "") or "Anonymous"
|
|
email = request.form.get("email", "")
|
|
subject = request.form.get("subject", "") or "[No Subject]"
|
|
message = request.form.get("message", "")
|
|
|
|
# Spam traps.
|
|
trap1 = request.form.get("contact", "x") != ""
|
|
trap2 = request.form.get("website", "x") != "http://"
|
|
if trap1 or trap2:
|
|
flash("Wanna try that again?")
|
|
return redirect(url_for(".index"))
|
|
|
|
# Message is required.
|
|
if len(message) == 0:
|
|
flash("The message is required.")
|
|
return redirect(url_for(".index"))
|
|
|
|
# Email looks valid?
|
|
reply_to = None
|
|
if "@" in email and "." in email:
|
|
reply_to = email
|
|
|
|
# Send the e-mail.
|
|
send_email(
|
|
to=Config.site.notify_address,
|
|
reply_to=reply_to,
|
|
subject="Contact Form on {}: {}".format(Config.site.site_name, subject),
|
|
message="""A visitor to {site_name} has sent you a message!
|
|
|
|
IP Address: {ip}
|
|
User Agent: {ua}
|
|
Referrer: {referer}
|
|
Name: {name}
|
|
E-mail: {email}
|
|
Subject: {subject}
|
|
|
|
{message}""".format(
|
|
site_name=Config.site.site_name,
|
|
ip=remote_addr(),
|
|
ua=request.user_agent.string,
|
|
referer=request.headers.get("Referer", ""),
|
|
name=name,
|
|
email=email,
|
|
subject=subject,
|
|
message=message,
|
|
)
|
|
)
|
|
|
|
flash("Your message has been delivered.")
|
|
return redirect(url_for("index"))
|