use actix_web::HttpRequest;
use arc_core::audit::ANONYMOUS_ACTOR;
use arc_core::command_bus::CommandContext;
use uuid::Uuid;
pub fn for_actor(req: &HttpRequest, actor_id: impl Into<String>) -> CommandContext {
CommandContext {
actor_id: actor_id.into(),
session_id: None,
source_ip: req
.connection_info()
.realip_remote_addr()
.map(str::to_string),
user_agent: req
.headers()
.get("User-Agent")
.and_then(|v| v.to_str().ok())
.map(str::to_string),
correlation_id: correlation_from(req),
causation_id: None,
}
}
pub fn anonymous(req: &HttpRequest) -> CommandContext {
for_actor(req, ANONYMOUS_ACTOR)
}
fn correlation_from(req: &HttpRequest) -> Uuid {
req.headers()
.get("X-Correlation-Id")
.and_then(|v| v.to_str().ok())
.and_then(|s| Uuid::parse_str(s).ok())
.unwrap_or_else(Uuid::new_v4)
}