1
- use firestore_db_and_auth:: {
2
- documents, dto, errors, sessions, Credentials , FirebaseAuthBearer , JWKSet , ServiceSession ,
3
- } ;
1
+ use firestore_db_and_auth:: { documents, dto, errors, sessions, Credentials , FirebaseAuthBearer , ServiceSession } ;
4
2
5
3
use firestore_db_and_auth:: documents:: WriteResult ;
6
- use firestore_db_and_auth:: jwt:: download_google_jwks;
7
4
use serde:: { Deserialize , Serialize } ;
8
5
9
- const TEST_USER_ID : & str = include_str ! ( "test_user_id.txt" ) ;
6
+ mod utils ;
10
7
11
8
#[ derive( Debug , Serialize , Deserialize ) ]
12
9
struct DemoDTO {
@@ -93,43 +90,16 @@ fn service_account_session(cred: Credentials) -> errors::Result<()> {
93
90
Ok ( ( ) )
94
91
}
95
92
96
- fn user_session_with_cached_refresh_token ( cred : & Credentials ) -> errors:: Result < sessions:: user:: Session > {
97
- println ! ( "Refresh token from file" ) ;
98
- // Read refresh token from file if possible instead of generating a new refresh token each time
99
- let refresh_token: String = match std:: fs:: read_to_string ( "refresh-token-for-tests.txt" ) {
100
- Ok ( v) => v,
101
- Err ( e) => {
102
- if e. kind ( ) != std:: io:: ErrorKind :: NotFound {
103
- return Err ( errors:: FirebaseError :: IO ( e) ) ;
104
- }
105
- String :: new ( )
106
- }
107
- } ;
108
-
109
- // Generate a new refresh token if necessary
110
- println ! ( "Generate new user auth token" ) ;
111
- let user_session: sessions:: user:: Session = if refresh_token. is_empty ( ) {
112
- let session = sessions:: user:: Session :: by_user_id ( & cred, TEST_USER_ID , true ) ?;
113
- std:: fs:: write ( "refresh-token-for-tests.txt" , & session. refresh_token . as_ref ( ) . unwrap ( ) ) ?;
114
- session
115
- } else {
116
- println ! ( "user::Session::by_refresh_token" ) ;
117
- sessions:: user:: Session :: by_refresh_token ( & cred, & refresh_token) ?
118
- } ;
119
-
120
- Ok ( user_session)
121
- }
122
-
123
93
fn user_account_session ( cred : Credentials ) -> errors:: Result < ( ) > {
124
- let user_session = user_session_with_cached_refresh_token ( & cred) ?;
94
+ let user_session = utils :: user_session_with_cached_refresh_token ( & cred) ?;
125
95
126
- assert_eq ! ( user_session. user_id, TEST_USER_ID ) ;
96
+ assert_eq ! ( user_session. user_id, utils :: TEST_USER_ID ) ;
127
97
assert_eq ! ( user_session. project_id( ) , cred. project_id) ;
128
98
129
99
println ! ( "user::Session::by_access_token" ) ;
130
100
let user_session = sessions:: user:: Session :: by_access_token ( & cred, & user_session. access_token_unchecked ( ) ) ?;
131
101
132
- assert_eq ! ( user_session. user_id, TEST_USER_ID ) ;
102
+ assert_eq ! ( user_session. user_id, utils :: TEST_USER_ID ) ;
133
103
134
104
let obj = DemoDTO {
135
105
a_string : "abc" . to_owned ( ) ,
@@ -213,29 +183,6 @@ fn user_account_session(cred: Credentials) -> errors::Result<()> {
213
183
Ok ( ( ) )
214
184
}
215
185
216
- /// Download the two public key JWKS files if necessary and cache the content at the given file path.
217
- /// Only use this option in cloud functions if the given file path is persistent.
218
- /// You can use [`Credentials::add_jwks_public_keys`] to manually add more public keys later on.
219
- pub fn from_cache_file ( cache_file : & std:: path:: Path , c : & Credentials ) -> errors:: Result < JWKSet > {
220
- use std:: fs:: File ;
221
- use std:: io:: BufReader ;
222
-
223
- Ok ( if cache_file. exists ( ) {
224
- let f = BufReader :: new ( File :: open ( cache_file) ?) ;
225
- let jwks_set: JWKSet = serde_json:: from_reader ( f) ?;
226
- jwks_set
227
- } else {
228
- // If not present, download the two jwks (specific service account + google system account),
229
- // merge them into one set of keys and store them in the cache file.
230
- let mut jwks = JWKSet :: new ( & download_google_jwks ( & c. client_email ) ?) ?;
231
- jwks. keys
232
- . append ( & mut JWKSet :: new ( & download_google_jwks ( "[email protected] " ) ?
) ?
. keys ) ;
233
- let f = File :: create ( cache_file) ?;
234
- serde_json:: to_writer_pretty ( f, & jwks) ?;
235
- jwks
236
- } )
237
- }
238
-
239
186
fn main ( ) -> errors:: Result < ( ) > {
240
187
// Search for a credentials file in the root directory
241
188
use std:: path:: PathBuf ;
@@ -244,7 +191,7 @@ fn main() -> errors::Result<()> {
244
191
let mut cred = Credentials :: from_file ( credential_file. to_str ( ) . unwrap ( ) ) ?;
245
192
246
193
// Only download the public keys once, and cache them.
247
- let jwkset = from_cache_file ( credential_file. with_file_name ( "cached_jwks.jwks" ) . as_path ( ) , & cred) ?;
194
+ let jwkset = utils :: from_cache_file ( credential_file. with_file_name ( "cached_jwks.jwks" ) . as_path ( ) , & cred) ?;
248
195
cred. add_jwks_public_keys ( & jwkset) ;
249
196
cred. verify ( ) ?;
250
197
@@ -268,7 +215,7 @@ fn valid_test_credentials() -> errors::Result<Credentials> {
268
215
let mut cred: Credentials = Credentials :: new ( include_str ! ( "../firebase-service-account.json" ) ) ?;
269
216
270
217
// Only download the public keys once, and cache them.
271
- let jwkset = from_cache_file ( jwks_path. as_path ( ) , & cred) ?;
218
+ let jwkset = utils :: from_cache_file ( jwks_path. as_path ( ) , & cred) ?;
272
219
cred. add_jwks_public_keys ( & jwkset) ;
273
220
cred. verify ( ) ?;
274
221
0 commit comments