From 4c9151e93c1e2d9bafa469b0bdee26fcf6cfecae Mon Sep 17 00:00:00 2001 From: Julian Lobbes Date: Thu, 10 Nov 2022 00:14:53 +0100 Subject: [PATCH] feat(usermodel): add User class --- lumi2/usermodel.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 2 files changed, 51 insertions(+) create mode 100644 lumi2/usermodel.py diff --git a/lumi2/usermodel.py b/lumi2/usermodel.py new file mode 100644 index 0000000..c0dda1c --- /dev/null +++ b/lumi2/usermodel.py @@ -0,0 +1,50 @@ +"""Provides the application-internal class-based models for users and groups. + +Also provides methods to convert LDAP user/group entries into user/group objects +and vice versa. +""" + +from PIL import Image + +class User: + """Class model for a user. + + Attributes + ---------- + username : str + The user's username. Can contain only uppercase/lowercase latin characters, + numbers, hyphens, underscores and periods. Must start with a latin character. + Minimum length is 1, maximum length is 64 characters. + password_hash : str + Base64-encoded SHA512 hash of the user's password. + email : str + The user's email address. + Must contain an '@'-character, may not contain any whitespace. + first_name : str + The user's first name. + May not contain any whitespace. + last_name : str + The user's last name. + May not contain any whitespace. + display_name : str + The user's display name (as required by some LDAP-enabled applications). + May not contain any whitespace. + picture : PIL.Image + The user's profile picture as a PIL Image object. + """ + + def __init__( + self, + username: str, password_hash: str, email: str, + first_name: str, last_name: str, display_name: str, + picture: Image, + ): + self.username = username + self.password_hash = password_hash + self.email = email + self.first_name = first_name + self.last_name = last_name + self.display_name = display_name + self.picture = picture + + # TODO validate params diff --git a/requirements.txt b/requirements.txt index 9beecd7..4a90939 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Flask==2.2.2 ldap3==2.9.1 pytest==7.2.0 +Pillow==9.3.0