colink 0.3.10

CoLink Rust SDK
Documentation
use colink::{
    decode_jwt_without_validation,
    extensions::instant_server::{InstantRegistry, InstantServer},
    generate_user, prepare_import_user_signature, CoLink,
};

#[tokio::test]
async fn test_user_management() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
    let _ir = InstantRegistry::new();
    let is = InstantServer::new();
    let cl = is.get_colink();
    let core_addr = cl.get_core_addr()?;

    let expiration_timestamp = chrono::Utc::now().timestamp() + 86400 * 31;
    let (pk, sk) = generate_user();
    let core_pub_key = cl.request_info().await?.core_public_key;
    let (signature_timestamp, sig) =
        prepare_import_user_signature(&pk, &sk, &core_pub_key, expiration_timestamp);

    let user_jwt = cl
        .import_user(&pk, signature_timestamp, expiration_timestamp, &sig)
        .await?;
    let user_id = decode_jwt_without_validation(&user_jwt)?.user_id;

    let cl = CoLink::new(&core_addr, &user_jwt);
    let new_expiration_timestamp = chrono::Utc::now().timestamp() + 86400 * 60;
    let guest_jwt = cl
        .generate_token_with_expiration_time(new_expiration_timestamp, "guest")
        .await?;
    let guest_auth_content = decode_jwt_without_validation(&guest_jwt)?;
    assert!(guest_auth_content.user_id == user_id);
    assert!(guest_auth_content.privilege == "guest");
    assert!(guest_auth_content.exp == new_expiration_timestamp);

    let cl = CoLink::new(&core_addr, "");
    let (new_signature_timestamp, new_sig) =
        prepare_import_user_signature(&pk, &sk, &core_pub_key, new_expiration_timestamp);
    let new_user_jwt = cl
        .generate_token_with_signature(
            &pk,
            new_signature_timestamp,
            new_expiration_timestamp,
            &new_sig,
        )
        .await?;
    let user_auth_content = decode_jwt_without_validation(&new_user_jwt)?;
    assert!(user_auth_content.user_id == user_id);
    assert!(user_auth_content.privilege == "user");
    assert!(user_auth_content.exp == new_expiration_timestamp);

    Ok(())
}