|  | 
| 12 | 12 | from werkzeug.exceptions import NotFound | 
| 13 | 13 | 
 | 
| 14 | 14 | from flask_multipass.auth import AuthProvider | 
| 15 |  | -from flask_multipass.exceptions import GroupRetrievalFailed, IdentityRetrievalFailed, MultipassException | 
|  | 15 | +from flask_multipass.exceptions import ( | 
|  | 16 | +    GroupRetrievalFailed, | 
|  | 17 | +    IdentityRetrievalFailed, | 
|  | 18 | +    InvalidCredentials, | 
|  | 19 | +    MultipassException, | 
|  | 20 | +    NoSuchUser, | 
|  | 21 | +) | 
| 16 | 22 | from flask_multipass.identity import IdentityProvider | 
| 17 | 23 | from flask_multipass.util import ( | 
| 18 | 24 |     get_canonical_provider_map, | 
| @@ -72,6 +78,7 @@ def init_app(self, app): | 
| 72 | 78 |         app.config.setdefault('MULTIPASS_FAILURE_CATEGORY', 'error') | 
| 73 | 79 |         app.config.setdefault('MULTIPASS_ALL_MATCHING_IDENTITIES', False) | 
| 74 | 80 |         app.config.setdefault('MULTIPASS_REQUIRE_IDENTITY', True) | 
|  | 81 | +        app.config.setdefault('MULTIPASS_HIDE_NO_SUCH_USER', False) | 
| 75 | 82 |         with app.app_context(): | 
| 76 | 83 |             self._create_login_rule() | 
| 77 | 84 |             state.auth_providers = ImmutableDict(self._create_providers('AUTH', AuthProvider)) | 
| @@ -528,6 +535,8 @@ def handle_login_form(self, provider, data): | 
| 528 | 535 |         try: | 
| 529 | 536 |             response = provider.process_local_login(data) | 
| 530 | 537 |         except MultipassException as e: | 
|  | 538 | +            if isinstance(e, NoSuchUser) and current_app.config['MULTIPASS_HIDE_NO_SUCH_USER']: | 
|  | 539 | +                e = InvalidCredentials(e.provider) | 
| 531 | 540 |             self.handle_auth_error(e) | 
| 532 | 541 |         else: | 
| 533 | 542 |             return response | 
|  | 
0 commit comments