diff --git a/app/methods/site_domain_methods.py b/app/methods/site_domain_methods.py index 2cc4541..60e3f8e 100644 --- a/app/methods/site_domain_methods.py +++ b/app/methods/site_domain_methods.py @@ -147,8 +147,9 @@ def get_site_domain_rec_list( # ### BEGIN ### API Site Domain Methods ### lookup_site_domain_fqdn() ### def lookup_site_domain_fqdn( fqdn: str, - # TODO: Accept access_key as an argument for validation (str|None) - # access_key: Optional[str] = None, + # Accept access_key as an argument for validation (str|None) + access_key: Optional[str] = None, + referrer: Optional[str] = None, enabled: str = 'enabled', # enabled, disabled, all limit: int = 100, offset: int = 0, @@ -158,22 +159,37 @@ def lookup_site_domain_fqdn( data = {} data['fqdn'] = fqdn - # TODO: If access_key is provided, add it to the data dict for SQL parameterization - # if access_key is not None: - # data['access_key'] = access_key + # If access_key is provided, add it to the data dict for SQL parameterization + data['domain_access_key'] = access_key + if referrer: + data['required_referrer'] = referrer sql_enabled, data['enable'] = sql_enable_part(table_name='site_domain', enabled=enabled) # Reasonably safe return str and bool sql_limit = sql_limit_offset_part(limit=limit, offset=offset) # Reasonably safe return str - # TODO: Add access_key to WHERE clause if provided, e.g.: - # WHERE site_domain.fqdn = :fqdn AND (:access_key IS NULL OR site_domain.access_key = :access_key) + # Build access key / referrer SQL similar to router.lookup_fqdn behavior + if access_key and referrer: + sql_access_key_referrer = """ + AND site_domain.domain_access_key = :domain_access_key + AND site_domain.required_referrer = :required_referrer + """ + elif access_key: + sql_access_key_referrer = """ + AND site_domain.domain_access_key = :domain_access_key + AND (site_domain.required_referrer IS NULL OR site_domain.required_referrer = '') + """ + else: + sql_access_key_referrer = """ + AND (site_domain.domain_access_key IS NULL OR site_domain.domain_access_key = '') + AND (site_domain.required_referrer IS NULL OR site_domain.required_referrer = '') + """ + sql = f""" SELECT `site_domain`.id AS 'site_domain_id', `site_domain`.id_random AS 'site_domain_id_random' FROM `v_site_domain` AS site_domain WHERE site_domain.fqdn = :fqdn - -- TODO: Add access_key check here for stricter validation - -- AND (:access_key IS NULL OR site_domain.access_key = :access_key) + {sql_access_key_referrer} {sql_enabled} ORDER BY `site_domain`.fqdn ASC, `site_domain`.access_key ASC, `site_domain`.required_referrer ASC, `site_domain`.created_on DESC, `site_domain`.updated_on DESC {sql_limit}; diff --git a/app/routers/site_domain.py b/app/routers/site_domain.py index 8ccc603..4c9e98a 100644 --- a/app/routers/site_domain.py +++ b/app/routers/site_domain.py @@ -77,18 +77,20 @@ async def patch_site_domain_obj( @router.get('/site/domain/fqdn/{fqdn}', response_model=Resp_Body_Base) async def lookup_site_domain_obj( fqdn: str, - # x_account_id: str = Header(...), - # response: Response = Response, - - commons: Common_Route_Params_Min = Depends(common_route_params_min), + # x_account_id: str = Header(...), + # response: Response = Response, + access_key: Optional[str] = Query(None, min_length=4, max_length=50), + referrer: Optional[str] = Query(None, min_length=8, max_length=150), + commons: Common_Route_Params_Min = Depends(common_route_params_min), ): - log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - - # Updated 2021-12-13 + # Updated 2021-12-13 if site_domain_rec_list_result := lookup_site_domain_fqdn( fqdn = fqdn, + access_key = access_key, + referrer = referrer, enabled = commons.enabled, limit = commons.limit, offset = commons.offset