auth.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from dataclasses import dataclass, field, asdict
  2. import json
  3. from pathlib import Path
  4. import csv
  5. from typing import Optional
  6. @dataclass
  7. class User:
  8. lastname: str
  9. firstname: str
  10. username: str
  11. password: str = field(repr=False)
  12. title: str
  13. admin: bool
  14. write: bool
  15. department: list
  16. costcenter: list
  17. class Auth:
  18. def __init__(self) -> None:
  19. with open(Path(__file__).parent.parent.joinpath('config', 'users.csv'), 'r') as rfh:
  20. csv_reader = csv.DictReader(rfh, delimiter=';')
  21. self.users = dict([(row['username'], self.parse_users_csv(row)) for row in csv_reader])
  22. def parse_users_csv(self, row: dict) -> User:
  23. row['admin'] = (row['admin'] == 'True')
  24. row['write'] = (row['write'] == 'True')
  25. row['department'] = json.loads(row['department'])
  26. row['costcenter'] = json.loads(row['costcenter'])
  27. return User(**row)
  28. def get_user(self, username, password) -> Optional[dict]:
  29. if username not in self.users:
  30. return None
  31. if self.users[username].password != password:
  32. return None
  33. res = asdict(self.users[username])
  34. del(res['password'])
  35. return res
  36. if __name__ == '__main__':
  37. print(Auth().get_user('TKP', 'G9zHjA'))