Browse Source

Show specific error for oversized content

master
Dylan Baker 5 years ago
parent
commit
6599d13394
2 changed files with 21 additions and 0 deletions
  1. 2
    0
      src/main.rs
  2. 19
    0
      src/routes.rs

+ 2
- 0
src/main.rs View File

@@ -22,6 +22,7 @@ mod routes;
22 22
 mod schema;
23 23
 mod snippet;
24 24
 
25
+use crate::routes::static_rocket_catch_info_for_bad_request;
25 26
 use crate::routes::static_rocket_route_info_for_create_snippet;
26 27
 use crate::routes::static_rocket_route_info_for_index;
27 28
 use crate::routes::static_rocket_route_info_for_show_snippet;
@@ -32,5 +33,6 @@ fn main() {
32 33
         .attach(Template::fairing())
33 34
         .manage(connection::init_pool())
34 35
         .mount("/", routes![index, show_snippet, create_snippet])
36
+        .register(catchers![bad_request])
35 37
         .launch();
36 38
 }

+ 19
- 0
src/routes.rs View File

@@ -1,5 +1,6 @@
1 1
 use diesel::result::Error;
2 2
 use rocket::http::Status;
3
+use rocket::request::Request;
3 4
 use rocket::response::status;
4 5
 use rocket_contrib::json::Json;
5 6
 use rocket_contrib::templates::Template;
@@ -53,3 +54,21 @@ pub fn create_snippet<'a>(
53 54
         .map(|snippet| status::Created(String::from(""), Some(Json(snippet))))
54 55
         .map_err(error_response)
55 56
 }
57
+
58
+#[catch(400)]
59
+pub fn bad_request(req: &Request) -> String {
60
+    req.headers().get_one("content-length").map_or(
61
+        String::from("{\"message\": \"Bad request\"}"),
62
+        |length| {
63
+            if length
64
+                .parse::<i32>()
65
+                .expect("Content length is non-numeric")
66
+                > 1_000_000
67
+            {
68
+                String::from("{\"message\": \"Snippet must be under 1mb\"}")
69
+            } else {
70
+                String::from("{\"message\": \"Bad request\"}")
71
+            }
72
+        },
73
+    )
74
+}

Loading…
Cancel
Save