Преглед на файлове

Show specific error for oversized content

master
Dylan Baker преди 5 години
родител
ревизия
6599d13394
променени са 2 файла, в които са добавени 21 реда и са изтрити 0 реда
  1. 2
    0
      src/main.rs
  2. 19
    0
      src/routes.rs

+ 2
- 0
src/main.rs Целия файл

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

+ 19
- 0
src/routes.rs Целия файл

1
 use diesel::result::Error;
1
 use diesel::result::Error;
2
 use rocket::http::Status;
2
 use rocket::http::Status;
3
+use rocket::request::Request;
3
 use rocket::response::status;
4
 use rocket::response::status;
4
 use rocket_contrib::json::Json;
5
 use rocket_contrib::json::Json;
5
 use rocket_contrib::templates::Template;
6
 use rocket_contrib::templates::Template;
53
         .map(|snippet| status::Created(String::from(""), Some(Json(snippet))))
54
         .map(|snippet| status::Created(String::from(""), Some(Json(snippet))))
54
         .map_err(error_response)
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…
Отказ
Запис