feat(security): add approved rooms/users/domains as env variables

This commit is contained in:
2024-08-30 19:18:04 +01:00
parent 56f1cb924e
commit c2bd36eabc
8 changed files with 92 additions and 15 deletions

View File

@ -2,9 +2,12 @@
import os
from app.utils.helpers import validate_email_syntax
class Config:
"""Configuration module."""
def __init__(self) -> None:
"""Configuration module."""
self.__environment: str = os.environ.get("APP_LIFECYCLE", "DEV").upper()
@ -68,5 +71,24 @@ class Config:
"""Returns the n8n webhook URL."""
return self.__n8n_webhook_url
@property
def approved_users(self) -> list:
"""Returns a list of approved users."""
emails: list[str] = os.environ.get("APPROVED_USERS", "").split(",")
emails = [i.strip() for i in emails if validate_email_syntax(i.strip())]
return emails
@property
def approved_rooms(self) -> list:
"""Returns a list of approved rooms."""
rooms: list[str] = os.environ.get("APPROVED_ROOMS", "").split(",")
return [i.strip() for i in rooms]
@property
def approved_domains(self) -> list:
"""Returns a list of approved domains."""
domains: list[str] = os.environ.get("APPROVED_DOMAINS", "").split(",")
return [i.strip() for i in domains]
config: Config = Config()

14
app/utils/helpers.py Normal file
View File

@ -0,0 +1,14 @@
import re
def validate_email_syntax(email: str) -> bool:
"""Validate email syntax.
Args:
email (str): Email address.
Returns:
bool: True if valid, else False.
"""
pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
return re.match(pattern, email) is not None