@@ -29,15 +29,12 @@ use http::header::IF_MATCH;
2929use http:: header:: IF_MODIFIED_SINCE ;
3030use http:: header:: IF_NONE_MATCH ;
3131use http:: header:: IF_UNMODIFIED_SINCE ;
32- use reqsign:: TencentCosCredential ;
33- use reqsign:: TencentCosCredentialLoader ;
34- use reqsign:: TencentCosSigner ;
32+ use reqsign_core:: Signer ;
33+ use reqsign_tencent_cos:: Credential ;
3534use serde:: Deserialize ;
3635use serde:: Serialize ;
3736
3837use opendal_core:: Buffer ;
39- use opendal_core:: Error ;
40- use opendal_core:: ErrorKind ;
4138use opendal_core:: Result ;
4239use opendal_core:: raw:: * ;
4340
@@ -53,8 +50,7 @@ pub struct CosCore {
5350 pub root : String ,
5451 pub endpoint : String ,
5552
56- pub signer : TencentCosSigner ,
57- pub loader : TencentCosCredentialLoader ,
53+ pub signer : Signer < Credential > ,
5854}
5955
6056impl Debug for CosCore {
@@ -68,43 +64,26 @@ impl Debug for CosCore {
6864}
6965
7066impl CosCore {
71- async fn load_credential ( & self ) -> Result < Option < TencentCosCredential > > {
72- let cred = self
73- . loader
74- . load ( )
75- . await
76- . map_err ( new_request_credential_error) ?;
77-
78- if let Some ( cred) = cred {
79- return Ok ( Some ( cred) ) ;
80- }
81-
82- Err ( Error :: new (
83- ErrorKind :: PermissionDenied ,
84- "no valid credential found and anonymous access is not allowed" ,
85- ) )
86- }
67+ pub async fn sign < T > ( & self , req : Request < T > ) -> Result < Request < T > > {
68+ let ( mut parts, body) = req. into_parts ( ) ;
8769
88- pub async fn sign < T > ( & self , req : & mut Request < T > ) -> Result < ( ) > {
89- let cred = if let Some ( cred) = self . load_credential ( ) . await ? {
90- cred
91- } else {
92- return Ok ( ( ) ) ;
93- } ;
70+ self . signer
71+ . sign ( & mut parts, None )
72+ . await
73+ . map_err ( |e| new_request_sign_error ( e. into ( ) ) ) ?;
9474
95- self . signer . sign ( req , & cred ) . map_err ( new_request_sign_error )
75+ Ok ( Request :: from_parts ( parts , body ) )
9676 }
9777
98- pub async fn sign_query < T > ( & self , req : & mut Request < T > , duration : Duration ) -> Result < ( ) > {
99- let cred = if let Some ( cred) = self . load_credential ( ) . await ? {
100- cred
101- } else {
102- return Ok ( ( ) ) ;
103- } ;
78+ pub async fn sign_query < T > ( & self , req : Request < T > , duration : Duration ) -> Result < Request < T > > {
79+ let ( mut parts, body) = req. into_parts ( ) ;
10480
10581 self . signer
106- . sign_query ( req, duration, & cred)
107- . map_err ( new_request_sign_error)
82+ . sign ( & mut parts, Some ( duration) )
83+ . await
84+ . map_err ( |e| new_request_sign_error ( e. into ( ) ) ) ?;
85+
86+ Ok ( Request :: from_parts ( parts, body) )
10887 }
10988
11089 #[ inline]
@@ -120,9 +99,8 @@ impl CosCore {
12099 range : BytesRange ,
121100 args : & OpRead ,
122101 ) -> Result < Response < HttpBody > > {
123- let mut req = self . cos_get_object_request ( path, range, args) ?;
124-
125- self . sign ( & mut req) . await ?;
102+ let req = self . cos_get_object_request ( path, range, args) ?;
103+ let req = self . sign ( req) . await ?;
126104
127105 self . info . http_client ( ) . fetch ( req) . await
128106 }
@@ -231,9 +209,8 @@ impl CosCore {
231209 }
232210
233211 pub async fn cos_head_object ( & self , path : & str , args : & OpStat ) -> Result < Response < Buffer > > {
234- let mut req = self . cos_head_object_request ( path, args) ?;
235-
236- self . sign ( & mut req) . await ?;
212+ let req = self . cos_head_object_request ( path, args) ?;
213+ let req = self . sign ( req) . await ?;
237214
238215 self . send ( req) . await
239216 }
@@ -293,9 +270,8 @@ impl CosCore {
293270
294271 let req = req. extension ( Operation :: Delete ) ;
295272
296- let mut req = req. body ( Buffer :: new ( ) ) . map_err ( new_request_build_error) ?;
297-
298- self . sign ( & mut req) . await ?;
273+ let req = req. body ( Buffer :: new ( ) ) . map_err ( new_request_build_error) ?;
274+ let req = self . sign ( req) . await ?;
299275
300276 self . send ( req) . await
301277 }
@@ -345,13 +321,13 @@ impl CosCore {
345321 let source = format ! ( "/{}/{}" , self . bucket, percent_encode_path( & source) ) ;
346322 let url = format ! ( "{}/{}" , self . endpoint, percent_encode_path( & target) ) ;
347323
348- let mut req = Request :: put ( & url)
324+ let req = Request :: put ( & url)
349325 . extension ( Operation :: Copy )
350326 . header ( "x-cos-copy-source" , & source)
351327 . body ( Buffer :: new ( ) )
352328 . map_err ( new_request_build_error) ?;
353329
354- self . sign ( & mut req) . await ?;
330+ let req = self . sign ( req) . await ?;
355331
356332 self . send ( req) . await
357333 }
@@ -380,12 +356,12 @@ impl CosCore {
380356 url = url. push ( "marker" , next_marker) ;
381357 }
382358
383- let mut req = Request :: get ( url. finish ( ) )
359+ let req = Request :: get ( url. finish ( ) )
384360 . extension ( Operation :: List )
385361 . body ( Buffer :: new ( ) )
386362 . map_err ( new_request_build_error) ?;
387363
388- self . sign ( & mut req) . await ?;
364+ let req = self . sign ( req) . await ?;
389365
390366 self . send ( req) . await
391367 }
@@ -422,9 +398,8 @@ impl CosCore {
422398
423399 let req = req. extension ( Operation :: Write ) ;
424400
425- let mut req = req. body ( Buffer :: new ( ) ) . map_err ( new_request_build_error) ?;
426-
427- self . sign ( & mut req) . await ?;
401+ let req = req. body ( Buffer :: new ( ) ) . map_err ( new_request_build_error) ?;
402+ let req = self . sign ( req) . await ?;
428403
429404 self . send ( req) . await
430405 }
@@ -453,9 +428,8 @@ impl CosCore {
453428 let req = req. extension ( Operation :: Write ) ;
454429
455430 // Set body
456- let mut req = req. body ( body) . map_err ( new_request_build_error) ?;
457-
458- self . sign ( & mut req) . await ?;
431+ let req = req. body ( body) . map_err ( new_request_build_error) ?;
432+ let req = self . sign ( req) . await ?;
459433
460434 self . send ( req) . await
461435 }
@@ -486,11 +460,11 @@ impl CosCore {
486460
487461 let req = req. extension ( Operation :: Write ) ;
488462
489- let mut req = req
463+ let req = req
490464 . body ( Buffer :: from ( Bytes :: from ( content) ) )
491465 . map_err ( new_request_build_error) ?;
492466
493- self . sign ( & mut req) . await ?;
467+ let req = self . sign ( req) . await ?;
494468
495469 self . send ( req) . await
496470 }
@@ -510,11 +484,11 @@ impl CosCore {
510484 percent_encode_path( upload_id)
511485 ) ;
512486
513- let mut req = Request :: delete ( & url)
487+ let req = Request :: delete ( & url)
514488 . extension ( Operation :: Delete )
515489 . body ( Buffer :: new ( ) )
516490 . map_err ( new_request_build_error) ?;
517- self . sign ( & mut req) . await ?;
491+ let req = self . sign ( req) . await ?;
518492 self . send ( req) . await
519493 }
520494
@@ -547,12 +521,12 @@ impl CosCore {
547521 url = url. push ( "version-id-marker" , & percent_encode_path ( version_id_marker) ) ;
548522 }
549523
550- let mut req = Request :: get ( url. finish ( ) )
524+ let req = Request :: get ( url. finish ( ) )
551525 . extension ( Operation :: List )
552526 . body ( Buffer :: new ( ) )
553527 . map_err ( new_request_build_error) ?;
554528
555- self . sign ( & mut req) . await ?;
529+ let req = self . sign ( req) . await ?;
556530
557531 self . send ( req) . await
558532 }
0 commit comments