75 lines
1.7 KiB
Python
75 lines
1.7 KiB
Python
from base64 import b64encode
|
|
from typing import NamedTuple
|
|
|
|
|
|
class User(NamedTuple):
|
|
username: str
|
|
password: str
|
|
displayname: str
|
|
email: str
|
|
|
|
|
|
test_users = {
|
|
"admin": User(
|
|
username="admin",
|
|
password="admin",
|
|
displayname="adminUsername",
|
|
email="admin@example.org",
|
|
),
|
|
"Alice": User(
|
|
username="Alice",
|
|
password="1234",
|
|
displayname="Alice Hansen",
|
|
email="alice@example.org",
|
|
),
|
|
"Brian": User(
|
|
username="Brian",
|
|
password="AaBb2Cc3Dd4",
|
|
displayname="Brian Murphy",
|
|
email="brian@example.org",
|
|
),
|
|
"Carol": User(
|
|
username="Carol",
|
|
password="1234",
|
|
displayname="Carol King",
|
|
email="carol@example.org",
|
|
),
|
|
"David": User(
|
|
username="David",
|
|
password="1234",
|
|
displayname="David Lopez",
|
|
email="david@example.org",
|
|
),
|
|
}
|
|
|
|
|
|
def get_default_password():
|
|
return "1234"
|
|
|
|
|
|
def basic_auth_header(user=None, password=None):
|
|
if not user and not password:
|
|
user = "admin"
|
|
password = "admin"
|
|
elif not user == "public" and not password:
|
|
password = get_password_for_user(user)
|
|
|
|
token = b64encode((f"{user}:{password}").encode()).decode()
|
|
return {"Authorization": "Basic " + token}
|
|
|
|
|
|
def get_user_info(username, attribute):
|
|
if username in test_users:
|
|
return getattr(test_users[username], attribute)
|
|
if attribute == "password":
|
|
return get_default_password()
|
|
raise ValueError(f"Invalid user attribute: {attribute}")
|
|
|
|
|
|
def get_displayname_for_user(username):
|
|
return get_user_info(username, "displayname")
|
|
|
|
|
|
def get_password_for_user(username):
|
|
return get_user_info(username, "password")
|