import typing import tldextract from flask import request, current_app def get_allowed_root_domain() -> typing.Optional[str]: """Returns allowed root domain to set cookie or None.""" root_domain = tldextract.extract(request.host).registered_domain if root_domain and request.host in current_app.config.get("ALLOWED_HOSTS"): return root_domain return None def get_root_domain(url: str) -> typing.Optional[str]: """Returns registered root domain for given url.""" return tldextract.extract(url).registered_domain def get_allowed_host() -> typing.Optional[str]: """Returns allowed host to set cookie or None.""" if request.host in current_app.config.get("ALLOWED_HOSTS"): return request.host return None def get_allowed_subdomain(url: str) -> typing.Optional[str]: """ Returns allowed host with subdomain if it is located on the allowed domain. """ extracted = tldextract.extract(url) subdomain = extracted.fqdn root_domain = extracted.registered_domain allowed_root_domains = [ get_root_domain(d) for d in current_app.config.get("ALLOWED_HOSTS") ] if root_domain not in allowed_root_domains: return None return subdomain