saleor-apps-rs/saleor-app-template/src/routes/register.rs

41 lines
1.2 KiB
Rust
Raw Normal View History

2024-02-21 21:37:06 +00:00
use anyhow::Context;
use axum::{
2024-02-27 16:50:48 +00:00
extract::Json,
2024-02-21 21:37:06 +00:00
extract::State,
http::{HeaderMap, StatusCode},
};
2024-02-27 16:50:48 +00:00
use saleor_app_sdk::{apl::APL, AuthData, AuthToken};
2024-02-21 21:37:06 +00:00
use tracing::{debug, info};
2024-02-27 16:50:48 +00:00
use crate::app::{AppError, AppState};
2024-02-21 21:37:06 +00:00
pub async fn register<A: APL>(
headers: HeaderMap,
State(state): State<AppState<A>>,
2024-02-27 16:50:48 +00:00
Json(auth_token): Json<AuthToken>,
2024-02-21 21:37:06 +00:00
) -> Result<StatusCode, AppError> {
debug!(
"/api/register:\nsaleor_api_url:{:?}\nauth_token:{:?}",
headers.get("saleor-api-url"),
auth_token
);
if auth_token.auth_token.is_empty() {
return Err(anyhow::anyhow!("missing auth_token").into());
}
let app = state.saleor_app.lock().await;
let saleor_api_url = headers.get("saleor-api-url").context("missing api field")?;
let saleor_api_url = saleor_api_url.to_str()?.to_owned();
let auth_data = AuthData {
jwks: None,
token: auth_token.auth_token,
domain: Some(state.config.app_api_base_url),
app_id: state.config.saleor_app_id,
saleor_api_url: saleor_api_url.clone(),
};
app.apl.set(auth_data).await?;
info!("registered app for{:?}", &saleor_api_url);
Ok(StatusCode::OK)
}