radrootsd

JSON-RPC bridge for Radroots event publishing
git clone https://radroots.dev/git/radrootsd.git
Log | Files | Refs | README | LICENSE

session_require_auth.rs (1251B)


      1 #![forbid(unsafe_code)]
      2 
      3 use anyhow::Result;
      4 use jsonrpsee::server::RpcModule;
      5 use serde::{Deserialize, Serialize};
      6 
      7 use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
      8 
      9 #[derive(Debug, Deserialize)]
     10 struct Nip46SessionRequireAuthParams {
     11     session_id: String,
     12     auth_url: String,
     13 }
     14 
     15 #[derive(Clone, Debug, Serialize)]
     16 struct Nip46SessionRequireAuthResponse {
     17     required: bool,
     18 }
     19 
     20 pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Result<()> {
     21     registry.track("nip46.session.require_auth");
     22     m.register_async_method("nip46.session.require_auth", |params, ctx, _| async move {
     23         let Nip46SessionRequireAuthParams {
     24             session_id,
     25             auth_url,
     26         } = params
     27             .parse()
     28             .map_err(|e| RpcError::InvalidParams(e.to_string()))?;
     29         if auth_url.trim().is_empty() {
     30             return Err(RpcError::InvalidParams("auth_url is empty".to_string()));
     31         }
     32         let required = ctx
     33             .state
     34             .nip46_sessions
     35             .require_auth(&session_id, auth_url)
     36             .await;
     37         Ok::<Nip46SessionRequireAuthResponse, RpcError>(Nip46SessionRequireAuthResponse {
     38             required,
     39         })
     40     })?;
     41     Ok(())
     42 }