"""Shared validation logic.""" from typing import Any from flask import Request from owsrequest import flask_request from owsresponse import response def validate_profile_access(request: Request) -> response.Response: """ Validate if requesting user has correct profile access. Args: request (flask.request): request Returns: bool: False if does not have access """ profile_type, profile_id = flask_request.get_profile_headers(request) if not profile_id or not profile_type: return response.create_error_response( message="Invalid profile headers", status=400, code="bad_request" ) return response.Response(message="ok") ORDER_BY = "order_by" ORDER_BY_PARAM_DEFAULT = "name" ORDER_DIR = "order_dir" ORDER_DIR_DEFAULT = "asc" """Value values for order_by and order_dir.""" VALID_PARAMS: dict[str, Any] = { ORDER_BY: {ORDER_BY_PARAM_DEFAULT: "customer_name"}, ORDER_DIR: [ORDER_DIR_DEFAULT, "desc"], } def sanitize_sort_params(request: Request) -> dict[str, Any]: """ Validate if user-provided sort order string is permitted. Args: request (flask.request): request Returns: Dict: sort params 'order_by' and 'order_dir', sanitized to permitted values """ order_by = request.args.get(ORDER_BY, ORDER_BY_PARAM_DEFAULT) order_dir = request.args.get(ORDER_DIR, ORDER_DIR_DEFAULT) """Use valid defaults.""" order_by = ( VALID_PARAMS[ORDER_BY][order_by] if order_by in VALID_PARAMS[ORDER_BY].keys() else VALID_PARAMS[ORDER_BY][ORDER_BY_PARAM_DEFAULT] ) order_dir = order_dir if order_dir in VALID_PARAMS[ORDER_DIR] else ORDER_DIR_DEFAULT return {ORDER_BY: order_by, ORDER_DIR: order_dir}