@@ -29,8 +29,8 @@ use crate::{
29
29
messenger:: { Message , Messenger , MessengerError } ,
30
30
permissions:: { VAppPermission , VPermission } ,
31
31
response:: {
32
- resource_restricted, ResourceErrorInner , ResourceResult , ToResourceResult ,
33
- ToResourceResultOpt ,
32
+ resource_error , resource_restricted, OptionalResource , ResourceError , ResourceErrorInner ,
33
+ ResourceResult ,
34
34
} ,
35
35
} ;
36
36
@@ -113,14 +113,13 @@ where
113
113
caller : & Caller < T > ,
114
114
) -> ResourceResult < MagicLink , StoreError > {
115
115
if caller. can ( & VPermission :: CreateMagicLinkClient . into ( ) ) {
116
- MagicLinkStore :: upsert (
116
+ Ok ( MagicLinkStore :: upsert (
117
117
& * self . storage ,
118
118
NewMagicLink {
119
119
id : TypedUuid :: new_v4 ( ) ,
120
120
} ,
121
121
)
122
- . await
123
- . to_resource_result ( )
122
+ . await ?)
124
123
} else {
125
124
resource_restricted ( )
126
125
}
@@ -137,7 +136,7 @@ where
137
136
] ) {
138
137
MagicLinkStore :: get ( & * self . storage , id, false )
139
138
. await
140
- . opt_to_resource_result ( )
139
+ . optional ( )
141
140
} else {
142
141
resource_restricted ( )
143
142
}
@@ -157,8 +156,7 @@ where
157
156
} ,
158
157
& ListPagination :: default ( ) ,
159
158
)
160
- . await
161
- . to_resource_result ( ) ?;
159
+ . await ?;
162
160
163
161
clients. retain ( |client| {
164
162
caller. any ( & [
@@ -181,16 +179,15 @@ where
181
179
& VPermission :: ManageMagicLinkClient ( * client_id) . into ( ) ,
182
180
& VPermission :: ManageMagicLinkClientsAll . into ( ) ,
183
181
] ) {
184
- MagicLinkSecretStore :: upsert (
182
+ Ok ( MagicLinkSecretStore :: upsert (
185
183
& * self . storage ,
186
184
NewMagicLinkSecret {
187
185
id : * id,
188
186
magic_link_client_id : * client_id,
189
187
secret_signature : secret. to_string ( ) ,
190
188
} ,
191
189
)
192
- . await
193
- . to_resource_result ( )
190
+ . await ?)
194
191
} else {
195
192
resource_restricted ( )
196
193
}
@@ -208,7 +205,7 @@ where
208
205
] ) {
209
206
MagicLinkSecretStore :: delete ( & * self . storage , id)
210
207
. await
211
- . opt_to_resource_result ( )
208
+ . optional ( )
212
209
} else {
213
210
resource_restricted ( )
214
211
}
@@ -224,16 +221,15 @@ where
224
221
& VPermission :: ManageMagicLinkClient ( * client_id) . into ( ) ,
225
222
& VPermission :: ManageMagicLinkClientsAll . into ( ) ,
226
223
] ) {
227
- MagicLinkRedirectUriStore :: upsert (
224
+ Ok ( MagicLinkRedirectUriStore :: upsert (
228
225
& * self . storage ,
229
226
NewMagicLinkRedirectUri {
230
227
id : TypedUuid :: new_v4 ( ) ,
231
228
magic_link_client_id : * client_id,
232
229
redirect_uri : uri. to_string ( ) ,
233
230
} ,
234
231
)
235
- . await
236
- . to_resource_result ( )
232
+ . await ?)
237
233
} else {
238
234
resource_restricted ( )
239
235
}
@@ -251,7 +247,7 @@ where
251
247
] ) {
252
248
MagicLinkRedirectUriStore :: delete ( & * self . storage , id)
253
249
. await
254
- . opt_to_resource_result ( )
250
+ . optional ( )
255
251
} else {
256
252
resource_restricted ( )
257
253
}
@@ -274,7 +270,7 @@ where
274
270
MagicLinkStore :: list ( & * self . storage , filter, & ListPagination :: latest ( ) )
275
271
. await
276
272
. map ( |mut results| results. pop ( ) )
277
- . opt_to_resource_result ( )
273
+ . optional ( )
278
274
}
279
275
280
276
pub async fn find_login_attempt (
@@ -286,7 +282,7 @@ where
286
282
MagicLinkAttemptStore :: list ( & * self . storage , filter, & ListPagination :: latest ( ) )
287
283
. await
288
284
. map ( |mut results| results. pop ( ) )
289
- . opt_to_resource_result ( )
285
+ . optional ( )
290
286
}
291
287
292
288
#[ instrument( skip( self , key, signer, redirect_uri, recipient) , err( Debug ) ) ]
@@ -306,17 +302,17 @@ where
306
302
let key = key
307
303
. sign ( signer)
308
304
. await
309
- . map_err ( |err| err . into ( ) )
310
- . to_resource_result ( ) ?;
305
+ . map_err ( ResourceError :: InternalError )
306
+ . inner_err_into ( ) ?;
311
307
let ( signature, key) = ( key. signature ( ) . to_string ( ) , key. key ( ) ) ;
312
308
313
309
tracing:: debug!( "Constructing login signature" ) ;
314
310
let recipient_signature = signer
315
311
. sign ( recipient. as_bytes ( ) )
316
312
. await
317
313
. map ( |bytes| hex:: encode ( & bytes) )
318
- . map_err ( |err| err . into ( ) )
319
- . to_resource_result ( ) ?;
314
+ . map_err ( ResourceError :: InternalError )
315
+ . inner_err_into ( ) ?;
320
316
321
317
tracing:: debug!( "Appending login key to redirect target" ) ;
322
318
let mut url = redirect_uri. clone ( ) ;
@@ -334,24 +330,24 @@ where
334
330
. message_builders
335
331
. get ( & builder_target)
336
332
. ok_or_else ( move || MagicLinkSendError :: NoMessageBuilder ( builder_target) )
337
- . to_resource_result ( ) ?
333
+ . map_err ( ResourceError :: InternalError ) ?
338
334
. create_message ( recipient, key. expose_secret ( ) , & url)
339
335
. ok_or ( MagicLinkSendError :: FailedToBuildMessage )
340
- . to_resource_result ( ) ?;
336
+ . map_err ( ResourceError :: InternalError ) ?;
341
337
342
338
tracing:: info!( "Sending magic link login attempt message" ) ;
343
339
let sender_target = target. clone ( ) ;
344
340
self . messengers
345
341
. get ( & sender_target)
346
342
. ok_or_else ( move || MagicLinkSendError :: NoMessageSender ( sender_target) )
347
- . to_resource_result ( ) ?
343
+ . map_err ( ResourceError :: InternalError ) ?
348
344
. send ( message)
349
345
. await
350
- . to_resource_result ( )
346
+ . map_err ( ResourceError :: InternalError )
351
347
. inner_err_into ( ) ?;
352
348
353
349
tracing:: info!( "Storing magic link attempt" ) ;
354
- MagicLinkAttemptStore :: upsert (
350
+ Ok ( MagicLinkAttemptStore :: upsert (
355
351
& * self . storage ,
356
352
NewMagicLinkAttempt {
357
353
id : TypedUuid :: new_v4 ( ) ,
@@ -366,9 +362,7 @@ where
366
362
expiration,
367
363
} ,
368
364
)
369
- . await
370
- . to_resource_result ( )
371
- . inner_err_into ( )
365
+ . await ?)
372
366
}
373
367
374
368
pub async fn complete_login_attempt (
@@ -383,9 +377,7 @@ where
383
377
MagicLinkAttemptState :: Sent ,
384
378
MagicLinkAttemptState :: Complete ,
385
379
)
386
- . await
387
- . to_resource_result ( )
388
- . inner_err_into ( ) ?;
380
+ . await ?;
389
381
390
382
// If the transition did not return a model then we need to inspect the model and determine
391
383
// why it failed
@@ -394,10 +386,13 @@ where
394
386
None => {
395
387
let attempt = MagicLinkAttemptStore :: get ( & * self . storage , & attempt_id)
396
388
. await
397
- . opt_to_resource_result ( )
398
- . inner_err_into ( ) ?;
389
+ . optional ( ) ?;
399
390
400
- Self :: inspect_failed_transition ( attempt, signature, MagicLinkAttemptState :: Sent )
391
+ resource_error ( Self :: inspect_failed_transition (
392
+ attempt,
393
+ signature,
394
+ MagicLinkAttemptState :: Sent ,
395
+ ) )
401
396
}
402
397
}
403
398
}
@@ -407,19 +402,19 @@ where
407
402
attempt : MagicLinkAttempt ,
408
403
signature : & str ,
409
404
state : MagicLinkAttemptState ,
410
- ) -> ResourceResult < MagicLinkAttempt , MagicLinkTransitionError > {
405
+ ) -> MagicLinkTransitionError {
411
406
if attempt. nonce_signature != signature {
412
407
tracing:: info!( "Nonce signature does not match stored signature" ) ;
413
- Err ( MagicLinkTransitionError :: Nonce ) . to_resource_result ( )
408
+ MagicLinkTransitionError :: Nonce
414
409
} else if attempt. attempt_state != state {
415
410
tracing:: info!( "Attempt is not in a valid state to transition" ) ;
416
- Err ( MagicLinkTransitionError :: State ( attempt. attempt_state ) ) . to_resource_result ( )
411
+ MagicLinkTransitionError :: State ( attempt. attempt_state )
417
412
} else if attempt. expiration <= Utc :: now ( ) {
418
413
tracing:: info!( "Attempt is expired" ) ;
419
- Err ( MagicLinkTransitionError :: Expired ) . to_resource_result ( )
414
+ MagicLinkTransitionError :: Expired
420
415
} else {
421
416
tracing:: error!( id = ?attempt. id, "Unknown error occurred in attempting to determine magic link transition failure" ) ;
422
- Err ( MagicLinkTransitionError :: Unknown ) . to_resource_result ( )
417
+ MagicLinkTransitionError :: Unknown
423
418
}
424
419
}
425
420
}
0 commit comments