From b07b6a6579b85bb1ddbfba32d09eca97aaf95fae Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Thu, 15 Oct 2020 16:26:45 +0200 Subject: [PATCH] Add UsernamePasswordService, SessionLoginWrapper --- .gitignore | 3 ++- .../auth/SessionLoginWrapper.py | 15 +++++++++++++++ .../auth/UsernamePasswordService.py | 17 +++++++++++++++++ TheCodeLabs_FlaskUtils/setup.py | 1 + 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/SessionLoginWrapper.py create mode 100644 TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/UsernamePasswordService.py diff --git a/.gitignore b/.gitignore index dc11f6c..fe69370 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ dist/ MANIFEST build/ *.egg-info/ -*.eggs/ \ No newline at end of file +*.eggs/ +venv/ \ No newline at end of file diff --git a/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/SessionLoginWrapper.py b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/SessionLoginWrapper.py new file mode 100644 index 0000000..8a92dc9 --- /dev/null +++ b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/SessionLoginWrapper.py @@ -0,0 +1,15 @@ +from functools import wraps + +from flask import session, redirect, url_for + + +def require_login(func): + @wraps(func) + def check_token(*args, **kwargs): + if 'authorized' not in session: + return redirect(url_for('authentication.login')) + + # redirect to requested url + return func(*args, **kwargs) + + return check_token diff --git a/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/UsernamePasswordService.py b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/UsernamePasswordService.py new file mode 100644 index 0000000..93f5787 --- /dev/null +++ b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/auth/UsernamePasswordService.py @@ -0,0 +1,17 @@ +import bcrypt + + +class UserService: + def __init__(self, users): + self.__users = {} + for user in users: + self.__users[user["name"].lower()] = user["password"] + + def get_users(self): + return self.__users + + def is_password_valid(self, name: str, password: str) -> bool: + saved_password = self.__users.get(name.lower(), None) + if saved_password is None: + raise ValueError(f'User {name} not found') + return bcrypt.checkpw(password.encode(), saved_password.encode()) diff --git a/TheCodeLabs_FlaskUtils/setup.py b/TheCodeLabs_FlaskUtils/setup.py index a4c021d..f94711b 100644 --- a/TheCodeLabs_FlaskUtils/setup.py +++ b/TheCodeLabs_FlaskUtils/setup.py @@ -14,6 +14,7 @@ setup( install_requires=[ 'flask', 'gevent' + 'bcrypt' ], setup_requires=[ 'wheel' -- GitLab