oxinbox-backend 0.1.3

HTTP/WS API server for the oxinbox GTD productivity system
Documentation
use axum::Json;
use axum::extract::State;
use axum::http::StatusCode;
use serde::Deserialize;
use tracing::instrument;

use crate::auth::AuthState;

#[derive(Debug, Deserialize)]
pub struct SubscribeRequest {
    pub endpoint: String,
    pub p256dh: String,
    pub auth: String,
}

#[instrument(skip(state))]
pub async fn subscribe_push(
    State(state): State<AuthState>,
    Json(req): Json<SubscribeRequest>,
) -> Result<(), StatusCode> {
    let sub = crate::push::PushSubscription {
        endpoint: req.endpoint,
        p256dh: req.p256dh,
        auth: req.auth,
    };
    state.push.subscribe(0, sub).await;
    tracing::info!("push subscription registered");
    Ok(())
}

#[derive(Debug, Deserialize)]
pub struct UnsubscribeRequest {
    pub endpoint: String,
}

#[instrument(skip(state))]
pub async fn unsubscribe_push(
    State(state): State<AuthState>,
    Json(req): Json<UnsubscribeRequest>,
) -> Result<(), StatusCode> {
    state.push.unsubscribe(0, &req.endpoint).await;
    tracing::info!("push subscription removed");
    Ok(())
}