@@ -44,108 +44,107 @@ fn check_response(r: minreq::Response) -> Result<json::Value> {
4444}
4545
4646impl Session {
47- pub fn new < S : Into < String > > ( key_id : & str , application_key : & str , bukkit : S ) -> Result < Self > {
48- let inner = |bucket : String | -> Result < Self > {
49- let creds = String :: from ( key_id) + ":" + application_key;
50- let auth = String :: from ( "Basic" ) + & BASE64_STANDARD . encode ( creds) ;
51- let v: json:: Value = check_response (
52- minreq:: get ( "https://api.backblazeb2.com/b2api/v3/b2_authorize_account" )
53- . with_header ( "Authorization" , auth)
54- . send ( ) ?,
55- ) ?;
56-
57- let bad = |s| unexpected ( s, & v) ;
58-
59- let id: String = v[ "accountId" ]
60- . as_str ( )
61- . ok_or_else ( || bad ( "login response missing authorization token" ) ) ?
62- . to_owned ( ) ;
63-
64- let token: String = v[ "authorizationToken" ]
65- . as_str ( )
66- . ok_or_else ( || bad ( "login response missing authorization token" ) ) ?
67- . to_owned ( ) ;
68-
69- let url = v[ "apiInfo" ] [ "storageApi" ] [ "apiUrl" ]
70- . as_str ( )
71- . ok_or_else ( || bad ( "login response missing API URL" ) ) ?
72- . to_owned ( ) ;
73-
74- let capes = v[ "apiInfo" ] [ "storageApi" ] [ "capabilities" ]
75- . as_array ( )
76- . ok_or_else ( || bad ( "login response missing capabilities" ) ) ?;
77- let capes = capes
78- . iter ( )
79- . map ( |v| {
80- v. as_str ( )
81- . ok_or_else ( || bad ( "login response had malformed capabilities" ) )
82- } )
83- . collect :: < Result < Vec < & str > > > ( ) ?;
84-
85- if !capes. iter ( ) . any ( |c| * c == "listKeys" ) {
86- return Err ( bad ( "credentials can not list files" ) ) ;
87- }
88- if !capes. iter ( ) . any ( |c| * c == "readFiles" ) {
89- return Err ( bad ( "credentials can not read files" ) ) ;
90- }
91- if !capes. iter ( ) . any ( |c| * c == "writeFiles" ) {
92- return Err ( bad ( "credentials can not write files" ) ) ;
93- }
94- if !capes. iter ( ) . any ( |c| * c == "deleteFiles" ) {
95- return Err ( bad ( "credentials can not delete files" ) ) ;
96- }
47+ pub fn new < S : Into < String > > ( key_id : & str , application_key : & str , bucket : S ) -> Result < Self > {
48+ let bucket = bucket. into ( ) ;
49+
50+ let creds = String :: from ( key_id) + ":" + application_key;
51+ let auth = String :: from ( "Basic" ) + & BASE64_STANDARD . encode ( creds) ;
52+ let v: json:: Value = check_response (
53+ minreq:: get ( "https://api.backblazeb2.com/b2api/v3/b2_authorize_account" )
54+ . with_header ( "Authorization" , auth)
55+ . send ( ) ?,
56+ ) ?;
57+
58+ let bad = |s| unexpected ( s, & v) ;
59+
60+ let id: String = v[ "accountId" ]
61+ . as_str ( )
62+ . ok_or_else ( || bad ( "login response missing authorization token" ) ) ?
63+ . to_owned ( ) ;
64+
65+ let token: String = v[ "authorizationToken" ]
66+ . as_str ( )
67+ . ok_or_else ( || bad ( "login response missing authorization token" ) ) ?
68+ . to_owned ( ) ;
69+
70+ let url = v[ "apiInfo" ] [ "storageApi" ] [ "apiUrl" ]
71+ . as_str ( )
72+ . ok_or_else ( || bad ( "login response missing API URL" ) ) ?
73+ . to_owned ( ) ;
74+
75+ let capes = v[ "apiInfo" ] [ "storageApi" ] [ "capabilities" ]
76+ . as_array ( )
77+ . ok_or_else ( || bad ( "login response missing capabilities" ) ) ?;
78+ let capes = capes
79+ . iter ( )
80+ . map ( |v| {
81+ v. as_str ( )
82+ . ok_or_else ( || bad ( "login response had malformed capabilities" ) )
83+ } )
84+ . collect :: < Result < Vec < & str > > > ( ) ?;
9785
98- let br: json:: Value = check_response (
99- minreq:: get ( url. clone ( ) + "/b2api/v2/b2_list_buckets" )
100- . with_header ( "Authorization" , & token)
101- . with_param ( "accountId" , id)
102- . with_param ( "bucketName" , & bucket)
103- . send ( ) ?,
104- ) ?;
105-
106- let bucket_id = match br[ "buckets" ] . as_array ( ) {
107- Some ( bs) => {
108- match bs
109- . iter ( )
110- . find ( |b| b[ "bucketName" ] . as_str ( ) == Some ( & bucket) )
111- {
112- Some ( mah_bukkit) => mah_bukkit[ "bucketId" ]
113- . as_str ( )
114- . ok_or_else ( || unexpected ( "bucket was missing ID" , & br) ) ?
115- . to_owned ( ) ,
116- None => return Err ( Error :: NotFound { what : bucket } ) ,
117- }
86+ if !capes. iter ( ) . any ( |c| * c == "listKeys" ) {
87+ return Err ( bad ( "credentials can not list files" ) ) ;
88+ }
89+ if !capes. iter ( ) . any ( |c| * c == "readFiles" ) {
90+ return Err ( bad ( "credentials can not read files" ) ) ;
91+ }
92+ if !capes. iter ( ) . any ( |c| * c == "writeFiles" ) {
93+ return Err ( bad ( "credentials can not write files" ) ) ;
94+ }
95+ if !capes. iter ( ) . any ( |c| * c == "deleteFiles" ) {
96+ return Err ( bad ( "credentials can not delete files" ) ) ;
97+ }
98+
99+ let br: json:: Value = check_response (
100+ minreq:: get ( url. clone ( ) + "/b2api/v2/b2_list_buckets" )
101+ . with_header ( "Authorization" , & token)
102+ . with_param ( "accountId" , id)
103+ . with_param ( "bucketName" , & bucket)
104+ . send ( ) ?,
105+ ) ?;
106+
107+ let bucket_id = match br[ "buckets" ] . as_array ( ) {
108+ Some ( bs) => {
109+ match bs
110+ . iter ( )
111+ . find ( |b| b[ "bucketName" ] . as_str ( ) == Some ( & bucket) )
112+ {
113+ Some ( mah_bukkit) => mah_bukkit[ "bucketId" ]
114+ . as_str ( )
115+ . ok_or_else ( || unexpected ( "bucket was missing ID" , & br) ) ?
116+ . to_owned ( ) ,
117+ None => return Err ( Error :: NotFound { what : bucket } ) ,
118118 }
119- None => return Err ( Error :: NotFound { what : bucket } ) ,
120- } ;
121-
122- let ur: json:: Value = check_response (
123- minreq:: get ( url. clone ( ) + "/b2api/v2/b2_get_upload_url" )
124- . with_header ( "Authorization" , & token)
125- . with_param ( "bucketId" , & bucket_id)
126- . send ( ) ?,
127- ) ?;
128-
129- let upload_url = ur[ "uploadUrl" ]
130- . as_str ( )
131- . ok_or_else ( || unexpected ( "couldn't get bucket upload URL" , & ur) ) ?
132- . to_owned ( ) ;
133-
134- let upload_token = ur[ "authorizationToken" ]
135- . as_str ( )
136- . ok_or_else ( || unexpected ( "couldn't get bucket upload token" , & ur) ) ?
137- . to_owned ( ) ;
138-
139- Ok ( Session {
140- token,
141- url,
142- upload_url,
143- upload_token,
144- bucket_name : bucket,
145- bucket_id,
146- } )
119+ }
120+ None => return Err ( Error :: NotFound { what : bucket } ) ,
147121 } ;
148- inner ( bukkit. into ( ) )
122+
123+ let ur: json:: Value = check_response (
124+ minreq:: get ( url. clone ( ) + "/b2api/v2/b2_get_upload_url" )
125+ . with_header ( "Authorization" , & token)
126+ . with_param ( "bucketId" , & bucket_id)
127+ . send ( ) ?,
128+ ) ?;
129+
130+ let upload_url = ur[ "uploadUrl" ]
131+ . as_str ( )
132+ . ok_or_else ( || unexpected ( "couldn't get bucket upload URL" , & ur) ) ?
133+ . to_owned ( ) ;
134+
135+ let upload_token = ur[ "authorizationToken" ]
136+ . as_str ( )
137+ . ok_or_else ( || unexpected ( "couldn't get bucket upload token" , & ur) ) ?
138+ . to_owned ( ) ;
139+
140+ Ok ( Session {
141+ token,
142+ url,
143+ upload_url,
144+ upload_token,
145+ bucket_name : bucket,
146+ bucket_id,
147+ } )
149148 }
150149
151150 pub fn list ( & self ) -> Result < Vec < String > > {
0 commit comments