def get_user_from_identifier(settings, identifier): """Get an actual User object from an identifier""" providers = list(auth.strip() for auth in settings.get('authenticators').split(',')) identities = Identity.find_all(Identity.provider.in_(providers), Identity.identifier == identifier) if identities: return sorted(identities, key=lambda x: providers.index(x.provider))[0].user for provider in providers: try: identity_info = multipass.get_identity(provider, identifier) except IdentityRetrievalFailed: continue if identity_info is None: continue if not identity_info.provider.settings.get('trusted_email'): continue emails = { email.lower() for email in identity_info.data.getlist('email') if email } if not emails: continue user = User.find_first( ~User.is_deleted, User.all_emails.contains(db.func.any(list(emails)))) if user: return user
def get_user_from_identifier(settings, identifier): """Get an actual User object from an identifier""" providers = list(auth.strip() for auth in settings.get('authenticators').split(',')) identities = Identity.find_all(Identity.provider.in_(providers), Identity.identifier == identifier) if identities: return sorted(identities, key=lambda x: providers.index(x.provider))[0].user for provider in providers: try: identity_info = multipass.get_identity(provider, identifier) except IdentityRetrievalFailed: continue if identity_info is None: continue if not identity_info.provider.settings.get('trusted_email'): continue emails = {email.lower() for email in identity_info.data.getlist('email') if email} if not emails: continue user = User.find_first(~User.is_deleted, User.all_emails.in_(list(emails))) if user: return user