1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
use std::io::{Error, ErrorKind};
use tokio_http2::http::{Request, Response, HttpProto};
use tokio_http2::{StatusCode, Method};
use files::*;
use api::get_head;
pub fn route(req: Request, base_path: String) -> Response {
let verb = req.method();
match req.path() {
"" => {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", "0")
.with_status(StatusCode::NoContent)
},
"/" | "/index.html" => {
load_default(base_path, verb)
},
file_path => {
match req.header("x-lambda-api") {
Some(header) => {
let req = req.clone();
get_head::route(req, &base_path, header)
},
None => {
match read(&format!("{}{}", base_path, file_path)) {
Ok(file_body) => {
if verb == Method::Get {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", &file_body.content_length.to_string())
.with_header("Content-Type", &file_body.content_type)
.with_body(file_body.body)
.with_status(StatusCode::Ok)
} else {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", &file_body.content_length.to_string())
.with_header("Content-Type", &file_body.content_type)
.with_status(StatusCode::Ok)
}
},
Err(e) => {
if e.kind() == ErrorKind::NotFound {
load_default(base_path, verb)
} else {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", "0")
.with_status(StatusCode::NotImplemented)
}
}
}
}
}
},
}
}
fn load_default(base_path: String, verb: Method) -> Response {
match read(&format!("{}{}", base_path, "/index.html")) {
Ok(file_body) => {
if verb == Method::Get {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", &file_body.content_length.to_string())
.with_header("Content-Type", &file_body.content_type)
.with_body(file_body.body)
.with_status(StatusCode::Ok)
} else {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", &file_body.content_length.to_string())
.with_header("Content-Type", &file_body.content_type)
.with_status(StatusCode::Ok)
}
},
Err(e) => {
Response::new()
.with_header("Server", "lsioHTTPS")
.with_header("Content-Length", "0")
.with_status(StatusCode::NotFound)
}
}
}