use rama_core::extensions::Extension;
use rama_tls::ApplicationProtocol;
use rama_tls::fingerprint::{PeetComputeError, PeetPrint};
use rama_tls::{
ProtocolVersion,
client::ClientHello,
fingerprint::{Ja3, Ja3ComputeError, Ja4, Ja4ComputeError},
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Extension, Serialize, Deserialize)]
#[extension(tags(ua, tls))]
pub struct TlsProfile {
pub client_hello: ClientHello,
pub ws_client_config_overwrites: Option<WsClientConfigOverwrites>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WsClientConfigOverwrites {
pub alpn: Option<Vec<ApplicationProtocol>>,
}
impl TlsProfile {
pub fn compute_ja3(
&self,
negotiated_tls_version: Option<ProtocolVersion>,
) -> Result<Ja3, Ja3ComputeError> {
Ja3::compute_from_client_hello(&self.client_hello, negotiated_tls_version)
}
pub fn compute_ja4(
&self,
negotiated_tls_version: Option<ProtocolVersion>,
) -> Result<Ja4, Ja4ComputeError> {
Ja4::compute_from_client_hello(&self.client_hello, negotiated_tls_version)
}
pub fn compute_peet(&self) -> Result<PeetPrint, PeetComputeError> {
PeetPrint::compute_from_client_hello(&self.client_hello)
}
}