123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from dataclasses import dataclass, field, asdict
- import json
- from pathlib import Path
- import csv
- from typing import Optional
- @dataclass
- class User:
- lastname: str
- firstname: str
- username: str
- password: str = field(repr=False)
- title: str
- admin: bool
- write: bool
- department: list
- costcenter: list
- class Auth:
- def __init__(self) -> None:
- with open(Path(__file__).parent.parent.joinpath('config', 'users.csv'), 'r') as rfh:
- csv_reader = csv.DictReader(rfh, delimiter=';')
- self.users = dict([(row['username'], self.parse_users_csv(row)) for row in csv_reader])
- def parse_users_csv(self, row: dict) -> User:
- row['admin'] = (row['admin'] == 'True')
- row['write'] = (row['write'] == 'True')
- row['department'] = json.loads(row['department'])
- row['costcenter'] = json.loads(row['costcenter'])
- return User(**row)
- def get_user(self, username, password) -> Optional[dict]:
- if username not in self.users:
- return None
- if self.users[username].password != password:
- return None
- res = asdict(self.users[username])
- del(res['password'])
- return res
- if __name__ == '__main__':
- print(Auth().get_user('TKP', 'G9zHjA'))
|