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())
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)