summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs15
-rw-r--r--src/routes/device.rs4
-rw-r--r--src/routes/start.rs2
3 files changed, 15 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs
index e6c746c..b7306ea 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,6 +7,7 @@ use sqlx::postgres::PgPoolOptions;
7use time::util::local_offset; 7use time::util::local_offset;
8use tracing::{debug, info, level_filters::LevelFilter}; 8use tracing::{debug, info, level_filters::LevelFilter};
9use tracing_subscriber::{EnvFilter, fmt::{self, time::LocalTime}, prelude::*}; 9use tracing_subscriber::{EnvFilter, fmt::{self, time::LocalTime}, prelude::*};
10use crate::config::SETTINGS;
10use crate::routes::device::{get_device, post_device, put_device}; 11use crate::routes::device::{get_device, post_device, put_device};
11use crate::routes::start::start; 12use crate::routes::start::start;
12 13
@@ -37,13 +38,12 @@ async fn main() {
37 38
38 let version = env!("CARGO_PKG_VERSION"); 39 let version = env!("CARGO_PKG_VERSION");
39 40
40 info!("starting webol v{}", version); 41 info!("start webol v{}", version);
41 42
42 let db = init_db_pool().await; 43 let db = init_db_pool().await;
43 44
44 let shared_state = Arc::new(AppState { db }); 45 let shared_state = Arc::new(AppState { db });
45 46
46 // build our application with a single route
47 let app = Router::new() 47 let app = Router::new()
48 .route("/start", post(start)) 48 .route("/start", post(start))
49 .route("/device", get(get_device)) 49 .route("/device", get(get_device))
@@ -51,8 +51,9 @@ async fn main() {
51 .route("/device", post(post_device)) 51 .route("/device", post(post_device))
52 .with_state(shared_state); 52 .with_state(shared_state);
53 53
54 // TODO: Add to config 54 let addr = SETTINGS.get_string("serveraddr").unwrap_or("0.0.0.0:7229".to_string());
55 axum::Server::bind(&"0.0.0.0:3000".parse().unwrap()) 55 info!("start server on {}", addr);
56 axum::Server::bind(&addr.parse().unwrap())
56 .serve(app.into_make_service()) 57 .serve(app.into_make_service())
57 .await 58 .await
58 .unwrap(); 59 .unwrap();
@@ -63,9 +64,13 @@ pub struct AppState {
63} 64}
64 65
65async fn init_db_pool() -> PgPool { 66async fn init_db_pool() -> PgPool {
67 #[cfg(not(debug_assertions))]
68 let db_url = SETTINGS.get_string("database.url").unwrap();
69
70 #[cfg(debug_assertions)]
66 let db_url = env::var("DATABASE_URL").unwrap(); 71 let db_url = env::var("DATABASE_URL").unwrap();
67 72
68 debug!("attempting to connect dbPool to '{}'", db_url); 73 debug!("attempt to connect dbPool to '{}'", db_url);
69 74
70 let pool = PgPoolOptions::new() 75 let pool = PgPoolOptions::new()
71 .max_connections(5) 76 .max_connections(5)
diff --git a/src/routes/device.rs b/src/routes/device.rs
index d5d7144..025c7d0 100644
--- a/src/routes/device.rs
+++ b/src/routes/device.rs
@@ -4,11 +4,13 @@ use axum::headers::HeaderMap;
4use axum::Json; 4use axum::Json;
5use serde::{Deserialize, Serialize}; 5use serde::{Deserialize, Serialize};
6use serde_json::{json, Value}; 6use serde_json::{json, Value};
7use tracing::info;
7use crate::auth::auth; 8use crate::auth::auth;
8use crate::db::Device; 9use crate::db::Device;
9use crate::error::WebolError; 10use crate::error::WebolError;
10 11
11pub async fn get_device(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<GetDevicePayload>) -> Result<Json<Value>, WebolError> { 12pub async fn get_device(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<GetDevicePayload>) -> Result<Json<Value>, WebolError> {
13 info!("GET request");
12 let secret = headers.get("authorization"); 14 let secret = headers.get("authorization");
13 if auth(secret).map_err(WebolError::Auth)? { 15 if auth(secret).map_err(WebolError::Auth)? {
14 let device = sqlx::query_as!( 16 let device = sqlx::query_as!(
@@ -33,6 +35,7 @@ pub struct GetDevicePayload {
33} 35}
34 36
35pub async fn put_device(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<PutDevicePayload>) -> Result<Json<Value>, WebolError> { 37pub async fn put_device(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<PutDevicePayload>) -> Result<Json<Value>, WebolError> {
38 info!("PUT request");
36 let secret = headers.get("authorization"); 39 let secret = headers.get("authorization");
37 if auth(secret).map_err(WebolError::Auth)? { 40 if auth(secret).map_err(WebolError::Auth)? {
38 sqlx::query!( 41 sqlx::query!(
@@ -64,6 +67,7 @@ pub struct PutDeviceResponse {
64} 67}
65 68
66pub async fn post_device(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<PostDevicePayload>) -> Result<Json<Value>, WebolError> { 69pub async fn post_device(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<PostDevicePayload>) -> Result<Json<Value>, WebolError> {
70 info!("POST request");
67 let secret = headers.get("authorization"); 71 let secret = headers.get("authorization");
68 if auth(secret).map_err(WebolError::Auth)? { 72 if auth(secret).map_err(WebolError::Auth)? {
69 let device = sqlx::query_as!( 73 let device = sqlx::query_as!(
diff --git a/src/routes/start.rs b/src/routes/start.rs
index d16ea4e..2e6a648 100644
--- a/src/routes/start.rs
+++ b/src/routes/start.rs
@@ -28,7 +28,7 @@ pub async fn start(State(state): State<Arc<crate::AppState>>, headers: HeaderMap
28 28
29 let bind_addr = SETTINGS 29 let bind_addr = SETTINGS
30 .get_string("bindaddr") 30 .get_string("bindaddr")
31 .map_err(|err| WebolError::Server(Box::new(err)))?; 31 .unwrap_or("0.0.0.0:1111".to_string());
32 32
33 let _ = send_packet( 33 let _ = send_packet(
34 &bind_addr.parse().map_err(|err| WebolError::Server(Box::new(err)))?, 34 &bind_addr.parse().map_err(|err| WebolError::Server(Box::new(err)))?,