diff options
Diffstat (limited to 'src/routes/start.rs')
-rw-r--r-- | src/routes/start.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/routes/start.rs b/src/routes/start.rs index 163d58c..b45fe5b 100644 --- a/src/routes/start.rs +++ b/src/routes/start.rs | |||
@@ -14,7 +14,8 @@ use crate::error::WebolError; | |||
14 | pub async fn start(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<StartPayload>) -> Result<Json<Value>, WebolError> { | 14 | pub async fn start(State(state): State<Arc<crate::AppState>>, headers: HeaderMap, Json(payload): Json<StartPayload>) -> Result<Json<Value>, WebolError> { |
15 | info!("POST request"); | 15 | info!("POST request"); |
16 | let secret = headers.get("authorization"); | 16 | let secret = headers.get("authorization"); |
17 | if auth(secret).map_err(WebolError::Auth)? { | 17 | let authorized = auth(secret).map_err(WebolError::Auth)?; |
18 | if authorized { | ||
18 | let device = sqlx::query_as!( | 19 | let device = sqlx::query_as!( |
19 | Device, | 20 | Device, |
20 | r#" | 21 | r#" |
@@ -23,7 +24,7 @@ pub async fn start(State(state): State<Arc<crate::AppState>>, headers: HeaderMap | |||
23 | WHERE id = $1; | 24 | WHERE id = $1; |
24 | "#, | 25 | "#, |
25 | payload.id | 26 | payload.id |
26 | ).fetch_one(&state.db).await.map_err(|err| WebolError::Server(Box::new(err)))?; | 27 | ).fetch_one(&state.db).await.map_err(WebolError::DB)?; |
27 | 28 | ||
28 | info!("starting {}", device.id); | 29 | info!("starting {}", device.id); |
29 | 30 | ||
@@ -32,10 +33,14 @@ pub async fn start(State(state): State<Arc<crate::AppState>>, headers: HeaderMap | |||
32 | .unwrap_or("0.0.0.0:1111".to_string()); | 33 | .unwrap_or("0.0.0.0:1111".to_string()); |
33 | 34 | ||
34 | let _ = send_packet( | 35 | let _ = send_packet( |
35 | &bind_addr.parse().map_err(|err| WebolError::Server(Box::new(err)))?, | 36 | &bind_addr.parse().map_err(WebolError::IpParse)?, |
36 | &device.broadcast_addr.parse().map_err(|err| WebolError::Server(Box::new(err)))?, | 37 | &device.broadcast_addr.parse().map_err(WebolError::IpParse)?, |
37 | create_buffer(&device.mac).map_err(|err| WebolError::Server(Box::new(err)))? | 38 | create_buffer(&device.mac)? |
38 | ).map_err(|err| WebolError::Server(Box::new(err))); | 39 | )?; |
40 | |||
41 | if payload.ping.is_some_and(|ping| ping) { | ||
42 | tokio::spawn(async move {crate::services::ping::spawn(state.ping_send.clone()).await}); | ||
43 | } | ||
39 | Ok(Json(json!(StartResponse { id: device.id, boot: true }))) | 44 | Ok(Json(json!(StartResponse { id: device.id, boot: true }))) |
40 | } else { | 45 | } else { |
41 | Err(WebolError::Generic) | 46 | Err(WebolError::Generic) |
@@ -45,11 +50,11 @@ pub async fn start(State(state): State<Arc<crate::AppState>>, headers: HeaderMap | |||
45 | #[derive(Deserialize)] | 50 | #[derive(Deserialize)] |
46 | pub struct StartPayload { | 51 | pub struct StartPayload { |
47 | id: String, | 52 | id: String, |
48 | _test: Option<bool>, | 53 | ping: Option<bool>, |
49 | } | 54 | } |
50 | 55 | ||
51 | #[derive(Serialize)] | 56 | #[derive(Serialize)] |
52 | struct StartResponse { | 57 | struct StartResponse { |
53 | id: String, | 58 | id: String, |
54 | boot: bool, | 59 | boot: bool, |
55 | } \ No newline at end of file | 60 | } |