A simple web application that allows invitation based registration to a matrix instance
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.9 KiB

  1. from datetime import datetime
  2. from typing import Tuple
  3. def get_time_or_now(time):
  4. return time if time is not None else datetime.now()
  5. def parse_optional_time(time):
  6. return None if time is None else datetime.fromisoformat(time)
  7. class RegistrationCode:
  8. def __init__(self,
  9. code: str,
  10. creation_time: datetime = None,
  11. expiration_time: datetime = None,
  12. usages: int = 0,
  13. max_usages: int = 1):
  14. self.code = code
  15. self.creation_time = get_time_or_now(creation_time)
  16. self.expiration_time = expiration_time
  17. self.usages = usages
  18. self.max_usages = max_usages
  19. @staticmethod
  20. def from_db(db_registration_code: Tuple) -> 'RegistrationCode':
  21. return RegistrationCode(
  22. db_registration_code[0],
  23. datetime.fromisoformat(db_registration_code[1]),
  24. parse_optional_time(db_registration_code[2]),
  25. db_registration_code[3],
  26. db_registration_code[4]
  27. )
  28. def is_expired(self):
  29. return self.expiration_time is not None and self.expiration_time < datetime.now()
  30. def has_available_uses(self):
  31. return self.usages < self.max_usages
  32. class RegisteredUser:
  33. def __init__(self,
  34. registration_code: str,
  35. username: str,
  36. registered_user_id: str,
  37. registered_time: datetime = None):
  38. self.registration_code = registration_code
  39. self.username = username
  40. self.registered_user_id = registered_user_id
  41. self.registered_time = get_time_or_now(registered_time)
  42. @staticmethod
  43. def from_db(db_registered_user: Tuple) -> 'RegisteredUser':
  44. return RegisteredUser(
  45. db_registered_user[0],
  46. db_registered_user[1],
  47. db_registered_user[3],
  48. datetime.fromisoformat(db_registered_user[2])
  49. )