Skip to content
This repository has been archived by the owner on Feb 22, 2024. It is now read-only.

Commit

Permalink
Merge pull request #516 from jasco/fix/safer-user-lookup
Browse files Browse the repository at this point in the history
Do exact case insensitive match when looking up user
  • Loading branch information
jirikuncar committed May 8, 2017
2 parents 2c5dc39 + 43de0b2 commit b15b0f0
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
1 change: 0 additions & 1 deletion flask_security/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from datetime import datetime

import pkg_resources

from flask import current_app, render_template
from flask_babelex import Domain
from flask_login import UserMixin as BaseUserMixin
Expand Down
9 changes: 7 additions & 2 deletions flask_security/datastore.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
:license: MIT, see LICENSE for more details.
"""

from peewee import fn as peeweeFn
from sqlalchemy import func as alchemyFn

from .utils import get_identity_attributes, string_types


Expand Down Expand Up @@ -236,7 +239,8 @@ def get_user(self, identifier):
if self._is_numeric(identifier):
return self.user_model.query.get(identifier)
for attr in get_identity_attributes():
query = getattr(self.user_model, attr).ilike(identifier)
query = alchemyFn.lower(getattr(self.user_model, attr)) \
== alchemyFn.lower(identifier)
rv = self.user_model.query.filter(query).first()
if rv is not None:
return rv
Expand Down Expand Up @@ -353,7 +357,8 @@ def get_user(self, identifier):
for attr in get_identity_attributes():
column = getattr(self.user_model, attr)
try:
return self.user_model.get(column ** identifier)
return self.user_model.get(
peeweeFn.Lower(column) == peeweeFn.Lower(identifier))
except self.user_model.DoesNotExist:
pass

Expand Down
4 changes: 4 additions & 0 deletions tests/test_datastore.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ def test_get_user(app, datastore):
user = datastore.get_user('matt')
assert user is not None

# Regression check
user = datastore.get_user('%lp.com')
assert user is None


def test_find_role(app, datastore):
init_app_with_options(app, datastore)
Expand Down

0 comments on commit b15b0f0

Please sign in to comment.