pulpod 0.0.43

Pulpo daemon — manages agent sessions via tmux/Docker
use std::time::Duration;

use anyhow::Result;

use crate::peers::PeerRegistry;

#[derive(Debug, Clone)]
pub struct RemoteNodeTarget {
    pub node_name: String,
    pub base_url: String,
    pub token: Option<String>,
}

pub fn normalize_http_base(address: &str) -> String {
    if address.contains("://") {
        address.to_owned()
    } else {
        format!("http://{address}")
    }
}

pub fn apply_remote_auth(
    request: reqwest::RequestBuilder,
    token: Option<&str>,
) -> reqwest::RequestBuilder {
    if let Some(token) = token {
        request.bearer_auth(token)
    } else {
        request
    }
}

pub fn remote_client() -> Result<reqwest::Client> {
    Ok(reqwest::Client::builder()
        .timeout(Duration::from_secs(5))
        .build()?)
}

pub async fn resolve_peer_target(
    peer_registry: &PeerRegistry,
    target_node: &str,
) -> Option<RemoteNodeTarget> {
    let peer = peer_registry.get(target_node).await?;
    let token = peer_registry.get_token(target_node).await;
    Some(RemoteNodeTarget {
        node_name: target_node.to_owned(),
        base_url: normalize_http_base(&peer.address),
        token,
    })
}