aboutsummaryrefslogtreecommitdiff
path: root/gn3/auth/authentication.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-11-03 13:31:33 +0300
committerFrederick Muriuki Muriithi2022-11-03 13:31:33 +0300
commitbe699ee4a1b090f45cad8702cfb887c24982f1d7 (patch)
treef2c52bb8e0686af5e4022ac4766b0be61ee2724c /gn3/auth/authentication.py
parentfbc8d034a9a034aa37cc3bc3893b4c1344bd09ee (diff)
downloadgenenetwork3-be699ee4a1b090f45cad8702cfb887c24982f1d7.tar.gz
Add credentials checking
* gn3/auth/authentication.py: new function `credentials_in_database` * gn3/auth/authentication/__init__.py: replace package with module * gn3/settings.py: new `AUTH_MIGRATIONS` configuration variable * migrations/auth/20221103_02_sGrIs-create-user-credentials-table.py: new migration * tests/unit/auth/test_credentials.py: test the `credentials_in_database` function * tests/unit/conftest.py: more test fixtures
Diffstat (limited to 'gn3/auth/authentication.py')
-rw-r--r--gn3/auth/authentication.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/gn3/auth/authentication.py b/gn3/auth/authentication.py
new file mode 100644
index 0000000..781380e
--- /dev/null
+++ b/gn3/auth/authentication.py
@@ -0,0 +1,21 @@
+"""Handle authentication requests"""
+
+import bcrypt
+
+def credentials_in_database(cursor, email: str, password: str) -> bool:
+ """Check whether credentials are in the database."""
+ if len(email.strip()) == 0 or len(password.strip()) == 0:
+ return False
+
+ cursor.execute(
+ ("SELECT "
+ "users.email, user_credentials.password "
+ "FROM users LEFT JOIN user_credentials "
+ "ON users.email = :email"),
+ {"email": email})
+ results = cursor.fetchall()
+ if len(results) == 0:
+ return False
+
+ assert len(results) > 1, "Expected one row."
+ return (email == row[0] and bcrypt.checkpw(value.encode("utf-8"), row[1]))