"""Get account info for a request.""" from owsrequest import access from werkzeug.exceptions import BadRequest, UnsupportedMediaType from reporting.constants import header from reporting.models import ows_account def update_params_with_vendor_info(request): """Update request params with vendor and subaccount info if applicable. Args: request: flask request object. Returns: vendor_response: oto response object or params: dict - the original request params annotated with account info. """ try: params = request.get_json() or {} except (BadRequest, UnsupportedMediaType): params = {} if is_oa_user(request): return params account_type = request.headers.get(header.GRASS_ACCOUNT_TYPE) account_id = request.headers.get(header.GRASS_ACCOUNT_ID) vendor_response = ows_account.get_vendor_id_from_grass_headers( account_type, account_id ) if not vendor_response: return vendor_response vendor_id = vendor_response.message.get('vendor_id') subaccount_id = vendor_response.message.get('subaccount_id') validation_response = access.verify_grass_access( account_type, account_id, required=True, vendor=vendor_id, subaccount=subaccount_id, ) if not validation_response: return validation_response account_info = {'param_vendor_id': vendor_id} account_info['param_subaccount_id'] = subaccount_id params.update(account_info) return params def is_oa_user(request): """Check request is made with OA user or ALW user. Args: request: flask request object. Returns: (bool): result of the check, true if OA user else false. """ user_id = request.headers.get(header.ORCHARD_USER_ID) or '' return user_id.startswith('oa:')