this repo has no description
1use crate::auth::{extract_bearer_token_from_header, validate_bearer_token};
2use crate::state::AppState;
3use axum::{
4 Json,
5 extract::State,
6 http::{HeaderMap, StatusCode},
7 response::{IntoResponse, Response},
8};
9use serde::Serialize;
10use serde_json::json;
11
12#[derive(Serialize)]
13#[serde(rename_all = "camelCase")]
14pub struct CheckSignupQueueOutput {
15 pub activated: bool,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub place_in_queue: Option<i64>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub estimated_time_ms: Option<i64>,
20}
21
22pub async fn check_signup_queue(State(state): State<AppState>, headers: HeaderMap) -> Response {
23 if let Some(token) =
24 extract_bearer_token_from_header(headers.get("Authorization").and_then(|h| h.to_str().ok()))
25 && let Ok(user) = validate_bearer_token(&state.db, &token).await
26 && user.is_oauth {
27 return (
28 StatusCode::FORBIDDEN,
29 Json(json!({
30 "error": "Forbidden",
31 "message": "OAuth credentials are not supported for this endpoint"
32 })),
33 )
34 .into_response();
35 }
36 Json(CheckSignupQueueOutput {
37 activated: true,
38 place_in_queue: None,
39 estimated_time_ms: None,
40 })
41 .into_response()
42}