diff options
| author | mo khan <mo@mokhan.ca> | 2025-05-29 16:51:04 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-05-29 16:51:04 -0600 |
| commit | aa5d0a370f819b17efa10ec27aab611213576273 (patch) | |
| tree | c549276360a903e9df15304f5f5f14ad02a21688 /src | |
| parent | 7fe231a39484858a9f2268f76c675cb41e8629bd (diff) | |
refactor: extract an http module
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 42 | ||||
| -rw-r--r-- | src/main.rs | 4 | ||||
| -rw-r--r-- | src/server.rs | 41 |
3 files changed, 44 insertions, 43 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..1ea4cf2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,42 @@ +pub mod http { + use std::fs; + use std::io::BufReader; + use std::io::prelude::*; + use std::net::TcpListener; + use std::net::TcpStream; + pub struct Server { + bind: String, + } + + impl Server { + pub fn new(bind: String) -> Server { + Server { bind } + } + + pub fn start(&self) { + let listener = TcpListener::bind(self.bind.clone()).unwrap(); + for next_stream in listener.incoming() { + self.handle(next_stream.unwrap()); + } + } + + pub fn handle(&self, mut stream: TcpStream) { + let io = BufReader::new(&stream); + let request_line = io.lines().next().unwrap().unwrap(); + + let (status_line, filename) = match &request_line[..] { + "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "./public/index.html"), + "GET /.well-known/oauth-authorization-server HTTP/1.1" => { + ("HTTP/1.1 200 OK", "./public/metadata.json") + } + _ => ("HTTP/1.1 404 NOT FOUND", "./public/404.html"), + }; + + let contents = fs::read_to_string(filename).unwrap(); + let length = contents.len(); + let response = format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"); + + stream.write_all(response.as_bytes()).unwrap(); + } + } +} diff --git a/src/main.rs b/src/main.rs index a579181..d7633b4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ -mod server; +use sts::http::Server; fn main() { - let server = server::Server::new(String::from("127.0.0.1:7878")); + let server = Server::new(String::from("127.0.0.1:7878")); server.start(); } diff --git a/src/server.rs b/src/server.rs deleted file mode 100644 index 709aba1..0000000 --- a/src/server.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::fs; -use std::io::BufReader; -use std::io::prelude::*; -use std::net::TcpListener; -use std::net::TcpStream; - -pub struct Server { - bind: String, -} - -impl Server { - pub fn new(bind: String) -> Server { - Server { bind } - } - - pub fn start(&self) { - let listener = TcpListener::bind(self.bind.clone()).unwrap(); - for next_stream in listener.incoming() { - self.handle(next_stream.unwrap()); - } - } - - pub fn handle(&self, mut stream: TcpStream) { - let io = BufReader::new(&stream); - let request_line = io.lines().next().unwrap().unwrap(); - - let (status_line, filename) = match &request_line[..] { - "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "./public/index.html"), - "GET /.well-known/oauth-authorization-server HTTP/1.1" => { - ("HTTP/1.1 200 OK", "./public/metadata.json") - } - _ => ("HTTP/1.1 404 NOT FOUND", "./public/404.html"), - }; - - let contents = fs::read_to_string(filename).unwrap(); - let length = contents.len(); - let response = format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"); - - stream.write_all(response.as_bytes()).unwrap(); - } -} |
