about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2018-05-27T12·12+0200
committerVincent Ambo <github@tazj.in>2018-05-27T13·00+0200
commit8901d5d73a50ce2d426aece1f8ab0ff0216278ef (patch)
treeb2de277f94a230910c114afbe3565045be27d352
parenta14ece6af3a2d0f03af072c337ef50e311a79066 (diff)
feat(db): Prevent responses to closed threads
This concludes the thread-closing implementation!
-rw-r--r--src/db.rs13
-rw-r--r--src/errors.rs2
2 files changed, 14 insertions, 1 deletions
diff --git a/src/db.rs b/src/db.rs
index bfbdd193c4c7..3c44172b15c2 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -208,6 +208,19 @@ impl Handler<CreatePost> for DbExecutor {
 
         let conn = self.0.get()?;
 
+        let closed: bool = {
+            use schema::threads::dsl::*;
+            threads.select(closed)
+                .find(msg.0.thread_id)
+                .first(&conn)?
+        };
+
+        if closed {
+            return Err(ConverseError::ThreadClosed {
+                id: msg.0.thread_id
+            })
+        }
+
         Ok(diesel::insert_into(posts::table)
            .values(&msg.0)
            .get_result(&conn)?)
diff --git a/src/errors.rs b/src/errors.rs
index c73379f0cafb..dd0e12c0450e 100644
--- a/src/errors.rs
+++ b/src/errors.rs
@@ -124,7 +124,7 @@ impl ResponseError for ConverseError {
         // Everything is mapped to internal server errors for now.
         match *self {
             ConverseError::ThreadClosed { id } => HttpResponse::SeeOther()
-                .header("Location", format!("/thread/{}#edit-post", id))
+                .header("Location", format!("/thread/{}#post-reply", id))
                 .finish(),
             _ => HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR)
                 .body(format!("An error occured: {}", self))