feat(db): Prevent responses to closed threads
This concludes the thread-closing implementation!
This commit is contained in:
parent
a14ece6af3
commit
8901d5d73a
2 changed files with 14 additions and 1 deletions
13
src/db.rs
13
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)?)
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in a new issue