feat: implement GetUsername for Forgejo adapter

This commit is contained in:
Aravinth Manivannan 2024-05-10 20:32:19 +05:30
parent 54840987b5
commit c82e2ea4a2
Signed by: realaravinth
GPG key ID: F8F50389936984FF

View file

@ -0,0 +1,35 @@
use serde::{Deserialize, Serialize};
use super::Forgejo;
use crate::auth::application::port::out::forge::{
errors::OutForgePortResult, get_username::GetUsername,
};
use crate::auth::domain::OAuthAccessToken;
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
struct ForgejoUserResponse {
login: String,
}
#[async_trait::async_trait]
impl GetUsername for Forgejo {
async fn get_username(&self, access_token: &OAuthAccessToken) -> OutForgePortResult<String> {
let u = {
let mut u = self.url().to_owned();
u.set_path("/api/v1/user");
u
};
let res = self
.http_client
.get(u)
.header(
reqwest::header::AUTHORIZATION,
format!("token {}", access_token.access_token),
)
.send()
.await
.unwrap();
let res: ForgejoUserResponse = res.json().await.unwrap();
Ok(res.login)
}
}