use crate::models::apps::{AppAuthorization, CreateScopedAccessToken, TokenBody};
use crate::{Octocrab, Result};
pub struct ApplicationHandler<'octo> {
crab: &'octo Octocrab,
client_id: String,
}
impl<'octo> ApplicationHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, client_id: String) -> Self {
Self { crab, client_id }
}
pub async fn delete_grant(&self, access_token: impl Into<String>) -> Result<()> {
let route = format!("/applications/{}/grant", self.client_id);
let body = TokenBody {
access_token: access_token.into(),
};
let resp = self.crab._delete(route, Some(&body)).await?;
crate::map_github_error(resp).await?;
Ok(())
}
pub async fn check_token(&self, access_token: impl Into<String>) -> Result<AppAuthorization> {
let route = format!("/applications/{}/token", self.client_id);
let body = TokenBody {
access_token: access_token.into(),
};
self.crab.post(route, Some(&body)).await
}
pub async fn reset_token(&self, access_token: impl Into<String>) -> Result<AppAuthorization> {
let route = format!("/applications/{}/token", self.client_id);
let body = TokenBody {
access_token: access_token.into(),
};
self.crab.patch(route, Some(&body)).await
}
pub async fn delete_token(&self, access_token: impl Into<String>) -> Result<()> {
let route = format!("/applications/{}/token", self.client_id);
let body = TokenBody {
access_token: access_token.into(),
};
let resp = self.crab._delete(route, Some(&body)).await?;
crate::map_github_error(resp).await?;
Ok(())
}
pub async fn scoped_token(&self, body: &CreateScopedAccessToken) -> Result<AppAuthorization> {
let route = format!("/applications/{}/token/scoped", self.client_id);
self.crab.post(route, Some(body)).await
}
}