Example #1
0
def send_message(recipient=False):
    try:
        g.user.username
    except AttributeError:
        abort(401)

    t = Thread(redis=g.r, user=g.user)
    m = Message(redis=g.r, key=False, user=g.user)
    if recipient:
        try:
            t.parse_recipients(recipient)
        except InvalidRecipients:
            pass

    if request.method == "POST":
        try:
            t.subject = request.form["subject"]
            m.update(request.form)
            t.parse_recipients(request.form["recipients"])
            t.save()
            t.add_message(m)
            m.send()
            flash(
                "Your message has been successfully wired, \
                    and should arrive shortly.",
                "success",
            )
            return redirect(url_for("view_thread", thread_id=t.key))
        except MessageValidationError:
            for error in m.validation_errors:
                flash(error, "error")
        except InvalidRecipients:
            for recipient in t.invalid_recipients:
                flash("%s is not a valid recipient" % recipient, "error")
    return render_template("forms/message.html", new=True, message=m, thread=t, recipients=t.get_form_recipients())
Example #2
0
def view_thread(thread_id):
    encryption_key = False
    if str(thread_id) not in g.user.get_threads():
        abort(401)

    t = Thread(redis=g.r, user=g.user)
    try:
        t.load(thread_id)
        if request.method == "POST":
            if request.form["action"] == "reply":
                m = Message(redis=g.r, key=False, user=g.user)
                m.update(request.form)
                t.save()
                t.add_message(m)
                m.send()
                t.load(thread_id)
                flash("Reply has been sent.", "success")
                return redirect(url_for("view_thread", thread_id=t.key))
            try:
                encryption_key = request.form["encryption_key"]
                t.decrypt(encryption_key)
                flash("Thread successfully decrypted.", "success")
            except DecryptFailed:
                flash("Decryption was unsuccessful.", "error")
                return redirect(url_for("view_thread", thread_id=thread_id))
            except DestroyedThreadError:
                flash("System error. Message lost.", "error")
                return redirect(url_for("inbox"))
            except KeyError:
                pass
        if t.decrypted:
            t.reset_unread_count()
        return render_template(
            "thread.html",
            messages=t.messages,
            thread=t,
            decrypted=t.decrypted,
            encryption_key=encryption_key,
            subject=t.subject,
        )
    except ThreadError:
        abort(404)