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)
|
|
|
|
}
|