よしなに

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?;

View File

@ -17,17 +17,17 @@ impl RakutenDriveClient {
Ok(Self { client })
}
pub async fn list(
&mut self,
&self,
prefix: &Option<String>,
) -> anyhow::Result<types::response::ListFilesResponse> {
list_files(
Some(&prefix.clone().unwrap_or("".to_string())),
&mut self.client,
&self.client,
)
.await
}
pub async fn info(
&mut self,
&self,
path: &str,
) -> anyhow::Result<types::response::FileDetailResponse> {
let req = types::request::FileDetailRequest {

View File

@ -188,7 +188,7 @@ pub async fn multipart_upload(
pub async fn file_detail(
path: &str,
client: &mut client::Client,
client: &client::Client,
) -> anyhow::Result<types::response::FileDetailResponseFile> {
let req = types::request::FileDetailRequest {
host_id: client.host_id.clone(),
@ -201,7 +201,7 @@ pub async fn file_detail(
pub async fn list_files(
prefix: Option<&str>,
client: &mut client::Client,
client: &client::Client,
) -> anyhow::Result<types::response::ListFilesResponse> {
let pagination_size = 40;
let mut files = Vec::<ListFilesResponseFile>::new();
@ -248,7 +248,7 @@ pub async fn list_files(
Ok(res)
}
pub async fn check_job(key: &str, client: &mut client::Client) -> anyhow::Result<()> {
pub async fn check_job(key: &str, client: &client::Client) -> anyhow::Result<()> {
loop {
let req = types::request::CheckActionRequest {
key: key.to_string(),