@@ -44,108 +44,107 @@ fn check_response(r: minreq::Response) -> Result<json::Value> {
44
44
}
45
45
46
46
impl 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 > > > ( ) ?;
97
85
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 } ) ,
118
118
}
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 } ) ,
147
121
} ;
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
+ } )
149
148
}
150
149
151
150
pub fn list ( & self ) -> Result < Vec < String > > {
0 commit comments