feat(errors): Introduce error variant for thread closing
(other minor change: log the user ID when invalid post editing requests were constructed)
This commit is contained in:
parent
c2a551146d
commit
a14ece6af3
2 changed files with 20 additions and 6 deletions
|
@ -56,8 +56,11 @@ pub enum ConverseError {
|
|||
#[fail(display = "error occured running timer: {}", error)]
|
||||
Timer { error: tokio_timer::Error },
|
||||
|
||||
#[fail(display = "user does not have permission to edit post {}", id)]
|
||||
PostEditForbidden { id: i32 },
|
||||
#[fail(display = "user {} does not have permission to edit post {}", user, id)]
|
||||
PostEditForbidden { user: i32, id: i32 },
|
||||
|
||||
#[fail(display = "thread {} is closed and can not be responded to", id)]
|
||||
ThreadClosed { id: i32 },
|
||||
|
||||
// This variant is used as a catch-all for wrapping
|
||||
// actix-web-compatible response errors, such as the errors it
|
||||
|
@ -119,7 +122,12 @@ impl From<tokio_timer::Error> for ConverseError {
|
|||
impl ResponseError for ConverseError {
|
||||
fn error_response(&self) -> HttpResponse {
|
||||
// Everything is mapped to internal server errors for now.
|
||||
HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR)
|
||||
.body(format!("An error occured: {}", self))
|
||||
match *self {
|
||||
ConverseError::ThreadClosed { id } => HttpResponse::SeeOther()
|
||||
.header("Location", format!("/thread/{}#edit-post", id))
|
||||
.finish(),
|
||||
_ => HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR)
|
||||
.body(format!("An error occured: {}", self))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -207,7 +207,10 @@ pub fn edit_form(state: State<AppState>,
|
|||
return Ok(post);
|
||||
}
|
||||
|
||||
Err(ConverseError::PostEditForbidden { id: post.id })
|
||||
Err(ConverseError::PostEditForbidden {
|
||||
user: user_id,
|
||||
id: post.id,
|
||||
})
|
||||
})
|
||||
.and_then(move |post| {
|
||||
let edit_msg = EditPostPage {
|
||||
|
@ -236,7 +239,10 @@ pub fn edit_post(state: State<AppState>,
|
|||
if user_id != 1 && post.user_id == user_id {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(ConverseError::PostEditForbidden { id: post.id })
|
||||
Err(ConverseError::PostEditForbidden {
|
||||
user: user_id,
|
||||
id: post.id,
|
||||
})
|
||||
}
|
||||
})
|
||||
.and_then(move |_| state.db.send(update.0).from_err())
|
||||
|
|
Loading…
Reference in a new issue