dioxus-clerk 0.6.0

Clerk integration for Dioxus: components, hooks, and SSR initial state for web and fullstack apps
Documentation
#![cfg(feature = "server")]

use axum::http::StatusCode;
use axum::response::IntoResponse;
use dioxus_clerk::ClerkError;
use dioxus_clerk::server::{
    AuthRejection, ClerkAuth, ClerkAuthLayer, ClerkAuthLayerConfig, VerificationOutcome,
    current_auth, current_auth_opt, current_outcome,
};

#[test]
fn server_module_exposes_server_setup_interface() {
    let _layer = ClerkAuthLayer::new("sk_test_unused").expect("default config is valid");
    let _from_env: fn() -> Result<ClerkAuthLayer, dioxus_clerk::core::ClerkError> =
        ClerkAuthLayer::from_env;
    let _config = ClerkAuthLayerConfig::new("sk_test_unused")
        .with_backend_api_base_url("https://api.clerk.com/v1")
        .with_authorized_parties(["https://example.com"])
        .add_authorized_party("https://admin.example.com")
        .add_audience("api://default")
        .add_issuer("https://example.clerk.accounts.dev");
    let _config_from_env: fn() -> Result<ClerkAuthLayerConfig, dioxus_clerk::core::ClerkError> =
        ClerkAuthLayerConfig::from_env;

    let mut auth = ClerkAuth::new("user_2abc", 9_999_999_999);
    auth.session_id = Some("sess_2def".into());
    let outcome = VerificationOutcome::Valid(auth);
    assert!(matches!(&outcome, VerificationOutcome::Valid(_)));

    let _current_auth: fn() -> Result<ClerkAuth, dioxus_clerk::core::ClerkError> = current_auth;
    let _current_auth_opt: fn() -> Result<Option<ClerkAuth>, dioxus_clerk::core::ClerkError> =
        current_auth_opt;
    let _current_outcome: fn() -> Option<VerificationOutcome> = current_outcome;
    assert_eq!(
        AuthRejection::Missing.into_response().status(),
        StatusCode::UNAUTHORIZED
    );
    assert_eq!(
        AuthRejection::Invalid.into_response().status(),
        StatusCode::UNAUTHORIZED
    );
    assert_eq!(
        AuthRejection::Unavailable.into_response().status(),
        StatusCode::SERVICE_UNAVAILABLE
    );
}

#[test]
fn clerk_errors_convert_to_server_fn_errors() {
    let error: dioxus_fullstack_core::ServerFnError = ClerkError::Unauthenticated.into();
    let status: axum::http::StatusCode = error.into();

    assert_eq!(status, axum::http::StatusCode::UNAUTHORIZED);
}