From 9b75ff869badf589000227740b41074c1dcc5d7d Mon Sep 17 00:00:00 2001 From: J-onasJones Date: Thu, 7 Dec 2023 20:15:01 +0100 Subject: [PATCH] something more --- src/logger/mod.rs | 8 +---- src/main.rs | 54 +++++-------------------------- src/server.rs | 35 ++++++++++++++++++++ src/std_error_respomses.rs | 62 ++++++++++++++++++++++++++++++++++++ src/tools/mod.rs | 61 +++++++++++++++++++++++++++++++++++ src/v1/kcomebacks/mod.rs | 3 ++ src/v1/minecraft/mod.rs | 0 src/v1/minecraft/mods/mod.rs | 0 8 files changed, 170 insertions(+), 53 deletions(-) create mode 100644 src/server.rs create mode 100644 src/std_error_respomses.rs create mode 100644 src/tools/mod.rs create mode 100644 src/v1/kcomebacks/mod.rs create mode 100644 src/v1/minecraft/mod.rs create mode 100644 src/v1/minecraft/mods/mod.rs diff --git a/src/logger/mod.rs b/src/logger/mod.rs index 368f555..881ef00 100644 --- a/src/logger/mod.rs +++ b/src/logger/mod.rs @@ -43,7 +43,7 @@ impl Logger { } pub fn format_time(timestamp: u64) -> String { - let datetime = NaiveDateTime::from_timestamp(timestamp as i64, 0); + let datetime = NaiveDateTime::from_timestamp_millis((timestamp * 1000).try_into().unwrap()).unwrap(); datetime.format("%H:%M:%S").to_string() } @@ -63,9 +63,3 @@ impl Logger { Self::log("PANIC", message); } } - -fn main() { - Logger::info("This is an informational log message."); - Logger::warn("This is a warning log message."); - Logger::error("This is an error log message."); -} diff --git a/src/main.rs b/src/main.rs index 7099504..f05dd0a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,56 +1,18 @@ -use warp::Filter; use dotenv::dotenv; -use std::env; -mod v1; -mod logger; +pub mod v1; +pub mod logger; +pub mod tools; +pub mod server; -use logger::Logger; +pub use logger::Logger; +pub use tools::parse_ip; -// load .env file -fn load_env() -> Vec { - dotenv().ok(); - - let env_var_value = match env::var("YOUR_ENV_VARIABLE") { - Ok(value) => value, - Err(_) => { - Logger::panic("Environment variable not found"); - std::process::exit(1); - } - }; - - env_var_value.split('.').map(String::from).collect() -} - #[tokio::main(flavor = "current_thread")] async fn main() { // load .env file - load_env(); + dotenv().ok(); - - - - logger::Logger::info("Starting server on {}:{}", ); - logger::Logger::warn("This is a warning!"); - logger::Logger::error("This is an error!"); - - v1::builtin_help(); - - //print env variables - println!("PORT: {}", env::var("API_PORT").unwrap()); - - // GET /hello/warp => 200 OK with body "Hello, warp!" - let hello = warp::path!("hello" / String) - .map(|name| format!("Hello, {}!", name)); - - let root = warp::path::end() - .map(|| warp::reply::html("

Hello, World!

")); - - - let routes = hello.or(root); - - warp::serve(routes) - .run(([127, 0, 0, 1], 3030)) - .await; + server::serve().await; } diff --git a/src/server.rs b/src/server.rs new file mode 100644 index 0000000..56e7553 --- /dev/null +++ b/src/server.rs @@ -0,0 +1,35 @@ +use std::env; + +use warp::Filter; + +use crate::{Logger, parse_ip}; + + +pub async fn serve() { + let api_ip = env::var("API_IP").unwrap(); + let api_port = env::var("API_PORT").unwrap(); + + Logger::info(&format!("Server started on {}:{}", api_ip, api_port)); + + let socket_addr = parse_ip(); + + // GET /hello/warp => 200 OK with body "Hello, warp!" + let hello = warp::path!("hello" / String) + .map(|name| format!("Hello, {}!", name)); + + let root = warp::path::end() + .map(|| warp::reply::html("

jonas_jones-api!

\n

this is a placeholder (hopefully)

")); + + let v1 = warp::path!("v1" / String) + .map(|name| format!("Hello, {}!", name)); + + + let routes = hello.or(v1).or(root); + + warp::serve(routes) + .run(socket_addr) + .await; + + Logger::info("Server stopped"); + +} diff --git a/src/std_error_respomses.rs b/src/std_error_respomses.rs new file mode 100644 index 0000000..ac7dc99 --- /dev/null +++ b/src/std_error_respomses.rs @@ -0,0 +1,62 @@ +pub fn internal_server_error() -> Response { + Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(Body::from("Internal Server Error")) + .unwrap() +} + +pub fn not_found_error() -> Response { + Response::builder() + .status(StatusCode::NOT_FOUND) + .body(Body::from("Not Found")) + .unwrap() +} + +pub fn bad_request_error() -> Response { + Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from("Bad Request")) + .unwrap() +} + +pub fn unauthorized_error() -> Response { + Response::builder() + .status(StatusCode::UNAUTHORIZED) + .body(Body::from("Unauthorized")) + .unwrap() +} + +pub fn forbidden_error() -> Response { + Response::builder() + .status(StatusCode::FORBIDDEN) + .body(Body::from("Forbidden")) + .unwrap() +} + +pub fn method_not_allowed_error() -> Response { + Response::builder() + .status(StatusCode::METHOD_NOT_ALLOWED) + .body(Body::from("Method Not Allowed")) + .unwrap() +} + +pub fn not_acceptable_error() -> Response { + Response::builder() + .status(StatusCode::NOT_ACCEPTABLE) + .body(Body::from("Not Acceptable")) + .unwrap() +} + +pub fn conflict_error() -> Response { + Response::builder() + .status(StatusCode::CONFLICT) + .body(Body::from("Conflict")) + .unwrap() +} + +pub fn gone_error() -> Response { + Response::builder() + .status(StatusCode::GONE) + .body(Body::from("Gone")) + .unwrap() +} diff --git a/src/tools/mod.rs b/src/tools/mod.rs new file mode 100644 index 0000000..1f23e67 --- /dev/null +++ b/src/tools/mod.rs @@ -0,0 +1,61 @@ +use std::net::{IpAddr, Ipv4Addr, SocketAddr}; + +use crate::logger::Logger; +use std::env; + +pub fn parse_ip() -> SocketAddr { + + let env_api_ip = return_env_var("API_IP"); + + let env_api_port = return_env_var("API_PORT"); + + let result: Result, _> = env_api_ip + .split('.') + .map(|s| s.parse::()) + .collect(); + + let ip_parts = match result { + Ok(numbers) => numbers, + Err(_4) => { + Logger::panic(&format!("Illegal character in Environment variable 'API_IP'")); + std::process::exit(1) + } + }; + + // Attempt to parse the string into a u16 + let parsed_env_api_port: u16 = match env_api_port.parse::() { + Ok(parsed_env_api_port) => parsed_env_api_port, + Err(_) => { + Logger::panic(&format!("Illegal character in Environment variable 'Api_PORT'")); + std::process::exit(1) + } + }; + + // Convert Vec to Ipv4Addr + let ipv4_addr: Ipv4Addr = Ipv4Addr::new( + ip_parts[0] as u8, + ip_parts[1] as u8, + ip_parts[2] as u8, + ip_parts[3] as u8, + ); + + // Convert Ipv4Addr to IpAddr + let ip_addr: IpAddr = IpAddr::V4(ipv4_addr); + + // Create SocketAddr from IpAddr and port + let socket_addr: SocketAddr = SocketAddr::new(ip_addr, parsed_env_api_port); + + return socket_addr; +} + + + +pub fn return_env_var(key: &str) -> String { + return match env::var(key) { + Ok(value) => value, + Err(_) => { + Logger::panic(&format!("Environment variable '{}' not found", key)); + std::process::exit(1); + } + }; +} \ No newline at end of file diff --git a/src/v1/kcomebacks/mod.rs b/src/v1/kcomebacks/mod.rs new file mode 100644 index 0000000..96850e3 --- /dev/null +++ b/src/v1/kcomebacks/mod.rs @@ -0,0 +1,3 @@ +pub fn main() { + +} \ No newline at end of file diff --git a/src/v1/minecraft/mod.rs b/src/v1/minecraft/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/v1/minecraft/mods/mod.rs b/src/v1/minecraft/mods/mod.rs new file mode 100644 index 0000000..e69de29