diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7505e87 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM rust:1.77.2-alpine3.18 +COPY Cargo.toml ./ +COPY src ./src +RUN apk update +RUN apk add musl-dev +RUN cargo build --release +CMD [ "/target/release/acapair_follow_ban_api"] \ No newline at end of file diff --git a/README.md b/README.md index 193d95d..66c368f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,14 @@ [![Rust](https://github.com/Acapair/acapair_follow_ban_api/actions/workflows/rust.yml/badge.svg)](https://github.com/Acapair/acapair_follow_ban_api/actions/workflows/rust.yml) # Acapair Follow Ban API ->: means they are variable. +Container Start Config: + +>podman run --rm --net host -v ABSOLUTE_PATH_FROM_HOST:/configs:z -v ABSOLUTE_PATH_FROM_HOST:/certificates:z localhost/acapair_follow_ban_api:latest + ## Exposed URLs +>: means they are variable. + Alive Ping(get): "/" Create User(post): "/:username" diff --git a/configs/databaseconfig b/configs/database_config.txt similarity index 79% rename from configs/databaseconfig rename to configs/database_config.txt index 2440f62..90ca9b5 100644 --- a/configs/databaseconfig +++ b/configs/database_config.txt @@ -2,4 +2,4 @@ address=0.0.0.0:5000 username=root password=root namespace=acapair -database=acapair \ No newline at end of file +database=acapair diff --git a/configs/server_config.txt b/configs/server_config.txt new file mode 100644 index 0000000..ff50017 --- /dev/null +++ b/configs/server_config.txt @@ -0,0 +1,2 @@ +ip_address=127.0.0.1 +port=3434 \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 969873a..f28c33e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +use std::net::IpAddr; + use serde::{Deserialize, Serialize}; use surrealdb::{ engine::remote::ws::Client, @@ -19,6 +21,12 @@ pub struct DataBaseConfig { pub database: String, } +#[derive(Debug, Clone)] +pub struct ServerConfig { + pub ip_address: IpAddr, + pub port: u16, +} + #[derive(Debug, Clone)] pub struct AppState { pub db: Surreal, diff --git a/src/main.rs b/src/main.rs index 4aba1d8..c3e088f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,26 +1,17 @@ use acapair_follow_ban_api::{ db::db_operations::connect, routing, - utils::{database_config, tls_config}, + utils::{database_config, server_config, tls_config}, AppState, }; -use std::{env, net::SocketAddr}; - -fn take_args() -> String { - let mut bind_address: String = String::new(); - for element in env::args() { - bind_address = element; - } - println!("\n\n\tOn Air -> https://{}\n\n", bind_address); - bind_address -} +use std::net::SocketAddr; #[tokio::main] async fn main() { println!("Hello, world!"); let tls_config = tls_config().await; let database_config = database_config().await; - + let server_config = server_config().await; println!("{:#?}", database_config); let state = AppState { @@ -28,8 +19,11 @@ async fn main() { }; let app = routing::routing(axum::extract::State(state)).await; - let addr = take_args().parse::().unwrap(); - + let addr = SocketAddr::new(server_config.ip_address, server_config.port); + println!( + "\n\n\tOn Air -> https://{}\n\n", + format!("{}:{}", server_config.ip_address, server_config.port) + ); axum_server::bind_rustls(addr, tls_config) .serve(app.into_make_service()) .await diff --git a/src/utils.rs b/src/utils.rs index 749bcd6..3568e3c 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,7 +1,7 @@ use axum_server::tls_rustls::RustlsConfig; use tokio::{fs::File, io::AsyncReadExt}; -use crate::DataBaseConfig; +use crate::{DataBaseConfig, ServerConfig}; pub async fn tls_config() -> RustlsConfig { RustlsConfig::from_pem_file("certificates/fullchain.pem", "certificates/privkey.pem") @@ -10,7 +10,7 @@ pub async fn tls_config() -> RustlsConfig { } pub async fn database_config() -> DataBaseConfig { - let mut config_file = File::open("configs/databaseconfig").await.unwrap(); + let mut config_file = File::open("configs/database_config.txt").await.unwrap(); let mut config_unparsed = String::new(); config_file .read_to_string(&mut config_unparsed) @@ -33,3 +33,25 @@ pub async fn database_config() -> DataBaseConfig { database: configs_cleaned[4].to_string(), } } + +pub async fn server_config() -> ServerConfig { + let mut config_file = File::open("configs/server_config.txt").await.unwrap(); + let mut config_unparsed = String::new(); + config_file + .read_to_string(&mut config_unparsed) + .await + .unwrap(); + + let configs_parsed: Vec<&str> = config_unparsed.split_terminator('\n').collect(); + let mut configs_cleaned: Vec<&str> = vec![]; + + for element in configs_parsed { + let dirty: Vec<&str> = element.split('=').collect(); + configs_cleaned.push(dirty[1]); + } + + ServerConfig { + ip_address: configs_cleaned[0].parse().unwrap(), + port: configs_cleaned[1].parse().unwrap(), + } +}