よしなに

This commit is contained in:
2024-07-19 14:12:59 +09:00
parent 456464ee0e
commit d9b587c0a5
3 changed files with 47 additions and 46 deletions

View File

@ -1,12 +1,13 @@
use anyhow::Ok;
use reqwest::StatusCode;
use tokio::sync::RwLock;
use crate::types;
pub struct Client {
pub token: String,
pub token: RwLock<String>,
pub refresh_token: String,
pub last_refresh: std::time::Instant,
pub last_refresh: RwLock<std::time::Instant>,
pub host_id: String,
token_valid_time: u32,
}
@ -19,32 +20,32 @@ impl Client {
let token = refresh_token(refresh_token_req).await.unwrap();
Ok(Self {
refresh_token: token.refresh_token,
token: token.id_token,
last_refresh: std::time::Instant::now(),
token: RwLock::new(token.id_token),
last_refresh: RwLock::new(std::time::Instant::now()),
host_id: token.uid,
token_valid_time: 3600,
})
}
pub async fn refresh_token(&mut self) -> anyhow::Result<()> {
pub async fn refresh_token(&self) -> anyhow::Result<()> {
let refresh_token_req = types::request::RefreshTokenRequest {
refresh_token: self.refresh_token.clone(),
};
let token = refresh_token(refresh_token_req).await.unwrap();
self.token = token.id_token;
self.last_refresh = std::time::Instant::now();
*self.token.write().await = token.id_token;
*self.last_refresh.write().await = std::time::Instant::now();
Ok(())
}
pub async fn list_files(
&mut self,
&self,
req: types::request::ListFilesRequest,
) -> anyhow::Result<types::response::ListFilesResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v1/files")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -57,16 +58,16 @@ impl Client {
}
pub async fn check_upload(
&mut self,
&self,
req: types::request::CheckUploadRequest,
) -> anyhow::Result<types::response::CheckUploadResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v1/check/upload")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -78,8 +79,8 @@ impl Client {
}
}
pub async fn get_upload_token(&mut self) -> anyhow::Result<types::response::GetFileLinkTokenResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
pub async fn get_upload_token(&self) -> anyhow::Result<types::response::GetFileLinkTokenResponse> {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
@ -88,7 +89,7 @@ impl Client {
"https://forest.sendy.jp/cloud/service/file/v1/filelink/token?host_id={}&path={}",
self.host_id, "hello"
))
.bearer_auth(&self.token);
.bearer_auth(&self.token.read().await);
let response = request.send().await?;
let text = response.text().await?;
@ -100,16 +101,16 @@ impl Client {
}
pub async fn get_download_link(
&mut self,
&self,
req: types::request::GetFileLinkRequest,
) -> anyhow::Result<types::response::GetFileLinkResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v1/filelink/download")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -122,16 +123,16 @@ impl Client {
}
pub async fn check_action(
&mut self,
&self,
req: types::request::CheckActionRequest,
) -> anyhow::Result<types::response::CheckActionResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v3/files/check")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -144,16 +145,16 @@ impl Client {
}
pub async fn file_detail(
&mut self,
&self,
req: types::request::FileDetailRequest,
) -> anyhow::Result<types::response::FileDetailResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v1/file")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -166,16 +167,16 @@ impl Client {
}
pub async fn delete_file(
&mut self,
&self,
req: types::request::DeleteFileRequest,
) -> anyhow::Result<types::response::JobKeyResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.delete("https://forest.sendy.jp/cloud/service/file/v3/files")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -187,14 +188,14 @@ impl Client {
}
}
pub async fn mkdir(&mut self, req: types::request::CreateFolderRequest) -> anyhow::Result<()> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
pub async fn mkdir(&self, req: types::request::CreateFolderRequest) -> anyhow::Result<()> {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v1/files/create")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -208,16 +209,16 @@ impl Client {
}
pub async fn copy_file(
&mut self,
&self,
req: types::request::CopyFileRequest,
) -> anyhow::Result<types::response::JobKeyResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.post("https://forest.sendy.jp/cloud/service/file/v3/files/copy")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -230,16 +231,16 @@ impl Client {
}
pub async fn rename_file(
&mut self,
&self,
req: types::request::RenameFileRequest,
) -> anyhow::Result<types::response::JobKeyResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.put("https://forest.sendy.jp/cloud/service/file/v3/files/rename")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;
@ -252,16 +253,16 @@ impl Client {
}
pub async fn move_file(
&mut self,
&self,
req: types::request::MoveFileRequest,
) -> anyhow::Result<types::response::JobKeyResponse> {
if self.last_refresh.elapsed().as_secs() > self.token_valid_time.into() {
if self.last_refresh.read().await.elapsed().as_secs() > self.token_valid_time.into() {
self.refresh_token().await?;
}
let client = reqwest::Client::new();
let request = client
.put("https://forest.sendy.jp/cloud/service/file/v3/files/move")
.bearer_auth(&self.token)
.bearer_auth(&self.token.read().await)
.json(&req);
let response = request.send().await?;