use super::{BotApi, resource};
use crate::error::Result;
use crate::models::webhook::{
HttpIdentity, HttpReady, HttpSession, WebhookValidationRequest, WebhookValidationResponse,
};
use std::collections::HashMap;
use tracing::debug;
impl BotApi {
pub async fn create_session(&self, identity: &HttpIdentity) -> Result<HttpReady> {
debug!("Creating HTTP webhook session");
let response = self
.http
.post(
self.token(),
resource::WEBHOOK_SESSIONS,
None::<&()>,
Some(identity),
)
.await?;
Self::decode_json(response)
}
pub async fn check_sessions(&self) -> Result<Vec<HttpSession>> {
debug!("Checking HTTP webhook sessions");
let mut params = HashMap::new();
params.insert("action", "check");
let response = self
.http
.patch(
self.token(),
resource::WEBHOOK_SESSIONS,
Some(¶ms),
None::<&()>,
)
.await?;
Self::decode_json(response)
}
pub async fn session_list(&self) -> Result<Vec<HttpSession>> {
debug!("Listing HTTP webhook sessions");
let response = self
.http
.get(self.token(), resource::WEBHOOK_SESSIONS, None::<&()>)
.await?;
Self::decode_json(response)
}
pub async fn remove_session(&self, session_id: &str) -> Result<()> {
debug!("Removing HTTP webhook session {}", session_id);
let path = resource::webhook_session(session_id);
self.http.delete(self.token(), &path, None::<&()>).await?;
Ok(())
}
pub fn webhook_validation_response(
request: &WebhookValidationRequest,
signature: impl Into<String>,
data_version: impl Into<String>,
) -> WebhookValidationResponse {
WebhookValidationResponse {
plain_token: request.plain_token.clone(),
signature: signature.into(),
data_version: data_version.into(),
}
}
}