@@ -19,7 +19,7 @@ use mas_axum_utils::{
19
19
csrf:: { CsrfExt , ProtectedForm } ,
20
20
sentry:: SentryEventID ,
21
21
} ;
22
- use mas_data_model:: { User , UserAgent } ;
22
+ use mas_data_model:: UserAgent ;
23
23
use mas_jose:: jwt:: Jwt ;
24
24
use mas_matrix:: HomeserverConnection ;
25
25
use mas_policy:: Policy ;
@@ -31,8 +31,8 @@ use mas_storage::{
31
31
user:: { BrowserSessionRepository , UserEmailRepository , UserRepository } ,
32
32
} ;
33
33
use mas_templates:: {
34
- ErrorContext , FieldError , FormError , TemplateContext , Templates , ToFormState ,
35
- UpstreamExistingLinkContext , UpstreamRegister , UpstreamSuggestLink ,
34
+ AccountInactiveContext , ErrorContext , FieldError , FormError , TemplateContext , Templates ,
35
+ ToFormState , UpstreamExistingLinkContext , UpstreamRegister , UpstreamSuggestLink ,
36
36
} ;
37
37
use minijinja:: Environment ;
38
38
use serde:: { Deserialize , Serialize } ;
@@ -272,8 +272,6 @@ pub(crate) async fn get(
272
272
. user ( )
273
273
. lookup ( user_id)
274
274
. await ?
275
- // XXX: is that right?
276
- . filter ( User :: is_valid)
277
275
. ok_or ( RouteError :: UserNotFound ) ?;
278
276
279
277
let ctx = UpstreamExistingLinkContext :: new ( user)
@@ -300,9 +298,27 @@ pub(crate) async fn get(
300
298
. user ( )
301
299
. lookup ( user_id)
302
300
. await ?
303
- . filter ( mas_data_model:: User :: is_valid)
304
301
. ok_or ( RouteError :: UserNotFound ) ?;
305
302
303
+ // Check that the user is not locked or deactivated
304
+ if user. deactivated_at . is_some ( ) {
305
+ // The account is deactivated, show the 'account deactivated' fallback
306
+ let ctx = AccountInactiveContext :: new ( user)
307
+ . with_csrf ( csrf_token. form_value ( ) )
308
+ . with_language ( locale) ;
309
+ let fallback = templates. render_account_deactivated ( & ctx) ?;
310
+ return Ok ( ( cookie_jar, Html ( fallback) . into_response ( ) ) ) ;
311
+ }
312
+
313
+ if user. locked_at . is_some ( ) {
314
+ // The account is locked, show the 'account locked' fallback
315
+ let ctx = AccountInactiveContext :: new ( user)
316
+ . with_csrf ( csrf_token. form_value ( ) )
317
+ . with_language ( locale) ;
318
+ let fallback = templates. render_account_locked ( & ctx) ?;
319
+ return Ok ( ( cookie_jar, Html ( fallback) . into_response ( ) ) ) ;
320
+ }
321
+
306
322
let session = repo
307
323
. browser_session ( )
308
324
. add ( & mut rng, & clock, & user, user_agent)
0 commit comments