mirror of
https://github.com/shiroyashik/sculptor.git
synced 2025-12-06 13:01:12 +03:00
Dev workflow update and enhance sculptor API:
Some checks failed
Push Dev / docker (push) Has been cancelled
Some checks failed
Push Dev / docker (push) Has been cancelled
+ remove unused types + added sending to all + enhance logging
This commit is contained in:
parent
c7c3bd881f
commit
bac1203df8
5 changed files with 51 additions and 44 deletions
5
.github/workflows/dev-release.yml
vendored
5
.github/workflows/dev-release.yml
vendored
|
|
@ -2,7 +2,10 @@ name: Push Dev
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "dev" ]
|
branches:
|
||||||
|
- "**"
|
||||||
|
tags-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker:
|
docker:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
## Use port 80 for HTTP or port 443 for HTTPS.
|
|
||||||
## If running in a Docker container, leave this as default.
|
## If running in a Docker container, leave this as default.
|
||||||
listen = "0.0.0.0:6665"
|
listen = "0.0.0.0:6665"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,14 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use axum::extract::{Query, State};
|
use axum::extract::{Query, State};
|
||||||
use tracing::{debug, trace, warn};
|
use tracing::instrument;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{api::errors::{error_and_log, internal_and_log}, auth::Token, ApiResult, AppState};
|
use crate::{api::errors::{error_and_log, internal_and_log}, auth::Token, ApiResult, AppState};
|
||||||
use super::types::UserUuid;
|
|
||||||
|
/*
|
||||||
|
FIXME: need to refactor
|
||||||
|
*/
|
||||||
|
|
||||||
pub(super) async fn verify(
|
pub(super) async fn verify(
|
||||||
Token(token): Token,
|
Token(token): Token,
|
||||||
|
|
@ -13,55 +19,62 @@ pub(super) async fn verify(
|
||||||
Ok("ok")
|
Ok("ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(skip(token, state, body))]
|
||||||
pub(super) async fn raw(
|
pub(super) async fn raw(
|
||||||
Token(token): Token,
|
Token(token): Token,
|
||||||
Query(query): Query<UserUuid>,
|
Query(query): Query<HashMap<String, String>>,
|
||||||
State(state): State<AppState>,
|
State(state): State<AppState>,
|
||||||
body: String,
|
body: String,
|
||||||
) -> ApiResult<&'static str> {
|
) -> ApiResult<&'static str> {
|
||||||
trace!(body = body);
|
tracing::trace!(body = body);
|
||||||
state.config.read().await.clone().verify_token(&token)?;
|
state.config.read().await.clone().verify_token(&token)?;
|
||||||
let mut payload = vec![0; body.len() / 2];
|
let mut payload = vec![0; body.len() / 2];
|
||||||
faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?;
|
faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { tracing::warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?;
|
||||||
debug!("{:?}", payload);
|
|
||||||
|
|
||||||
match query.uuid {
|
if query.contains_key("uuid") == query.contains_key("all") {
|
||||||
Some(uuid) => {
|
tracing::warn!("invalid query params");
|
||||||
// for only one
|
return Err(crate::ApiError::BadRequest);
|
||||||
let tx = state.session.get(&uuid).ok_or_else(|| { warn!("unknown uuid"); crate::ApiError::NotFound })?;
|
}
|
||||||
tx.value().send(crate::api::figura::SessionMessage::Ping(payload)).await.map_err(internal_and_log)?;
|
|
||||||
Ok("ok")
|
if let Some(uuid) = query.get("uuid") {
|
||||||
},
|
// for one
|
||||||
None => {
|
let uuid = Uuid::parse_str(uuid).map_err(|err| { tracing::warn!("invalid uuid"); error_and_log(err, crate::ApiError::BadRequest) })?;
|
||||||
// for all
|
let tx = state.session.get(&uuid).ok_or_else(|| { tracing::warn!("unknown uuid"); crate::ApiError::NotFound })?;
|
||||||
warn!("uuid doesnt defined");
|
tx.value().send(crate::api::figura::SessionMessage::Ping(payload)).await.map_err(internal_and_log)?;
|
||||||
Err(crate::ApiError::NotFound)
|
Ok("ok")
|
||||||
},
|
} else if query.contains_key("all") {
|
||||||
|
// for all
|
||||||
|
for tx in state.session.iter() {
|
||||||
|
if let Err(e) = tx.value().send(crate::api::figura::SessionMessage::Ping(payload.clone())).await {
|
||||||
|
tracing::debug!(error = ?e , "error while sending to session");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Ok("ok")
|
||||||
|
} else {
|
||||||
|
tracing::error!("unreachable code!");
|
||||||
|
Err(crate::ApiError::Internal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(skip(token, state, body))]
|
||||||
pub(super) async fn sub_raw(
|
pub(super) async fn sub_raw(
|
||||||
Token(token): Token,
|
Token(token): Token,
|
||||||
Query(query): Query<UserUuid>,
|
Query(query): Query<HashMap<String, String>>,
|
||||||
State(state): State<AppState>,
|
State(state): State<AppState>,
|
||||||
body: String,
|
body: String,
|
||||||
) -> ApiResult<&'static str> {
|
) -> ApiResult<&'static str> {
|
||||||
trace!(body = body);
|
tracing::trace!(body = body);
|
||||||
state.config.read().await.clone().verify_token(&token)?;
|
state.config.read().await.clone().verify_token(&token)?;
|
||||||
let mut payload = vec![0; body.len() / 2];
|
let mut payload = vec![0; body.len() / 2];
|
||||||
faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?;
|
faster_hex::hex_decode(body.as_bytes(), &mut payload).map_err(|err| { tracing::warn!("not raw data"); error_and_log(err, crate::ApiError::NotAcceptable) })?;
|
||||||
debug!("{:?}", payload);
|
|
||||||
|
|
||||||
match query.uuid {
|
if let Some(uuid) = query.get("uuid") {
|
||||||
Some(uuid) => {
|
let uuid = Uuid::parse_str(uuid).map_err(|err| { tracing::warn!("invalid uuid"); error_and_log(err, crate::ApiError::BadRequest) })?;
|
||||||
// for only one
|
let tx = state.subscribes.get(&uuid).ok_or_else(|| { tracing::warn!("unknown uuid"); crate::ApiError::NotFound })?;
|
||||||
let tx = state.subscribes.get(&uuid).ok_or_else(|| { warn!("unknown uuid"); crate::ApiError::NotFound })?;
|
tx.value().send(payload).map_err(internal_and_log)?;
|
||||||
tx.value().send(payload).map_err(internal_and_log)?;
|
Ok("ok")
|
||||||
Ok("ok")
|
} else {
|
||||||
},
|
tracing::warn!("uuid doesnt defined");
|
||||||
None => {
|
Err(crate::ApiError::NotFound)
|
||||||
warn!("uuid doesnt defined");
|
|
||||||
Err(crate::ApiError::NotFound)
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,7 +3,6 @@ use crate::AppState;
|
||||||
|
|
||||||
mod http2ws;
|
mod http2ws;
|
||||||
mod users;
|
mod users;
|
||||||
mod types;
|
|
||||||
mod avatars;
|
mod avatars;
|
||||||
|
|
||||||
pub fn router(limit: usize) -> Router<AppState> {
|
pub fn router(limit: usize) -> Router<AppState> {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
use serde::Deserialize;
|
|
||||||
use uuid::Uuid;
|
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
pub(super) struct UserUuid {
|
|
||||||
pub uuid: Option<Uuid>,
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue