|
35 | 35 | UserTenantsResult, |
36 | 36 | AuthorizedUsersResult, |
37 | 37 | AuthorizedUsersAuthorizationQuery, |
| 38 | + User, |
38 | 39 | ) |
39 | 40 | from horizon.enforcer.schemas_kong import ( |
40 | 41 | KongAuthorizationInput, |
|
43 | 44 | KongWrappedAuthorizationQuery, |
44 | 45 | ) |
45 | 46 | from horizon.enforcer.schemas_v1 import AuthorizationQueryV1 |
| 47 | +from horizon.enforcer.utils.headers_utils import get_case_insensitive |
46 | 48 | from horizon.enforcer.utils.mapping_rules_utils import MappingRulesUtils |
47 | 49 | from horizon.enforcer.utils.statistics_utils import StatisticsManager |
48 | 50 | from horizon.state import PersistentStateHandler |
@@ -553,6 +555,51 @@ async def is_allowed( |
553 | 555 | ) |
554 | 556 | return result |
555 | 557 |
|
| 558 | + @router.post( |
| 559 | + "/nginx_allowed", |
| 560 | + response_model=AuthorizationResult, |
| 561 | + status_code=status.HTTP_200_OK, |
| 562 | + response_model_exclude_none=True, |
| 563 | + dependencies=[Depends(enforce_pdp_token)], |
| 564 | + ) |
| 565 | + async def is_allowed_nginx( |
| 566 | + request: Request, |
| 567 | + permit_user_key: str = Header(None), |
| 568 | + permit_tenant_id: str = Header(None), |
| 569 | + permit_action: str = Header(None), |
| 570 | + permit_resource_type: str = Header(None), |
| 571 | + ): |
| 572 | + |
| 573 | + query = AuthorizationQuery( |
| 574 | + user=User(key=permit_user_key), |
| 575 | + action=permit_action, |
| 576 | + resource=Resource(type=permit_resource_type, tenant=permit_tenant_id), |
| 577 | + ) |
| 578 | + |
| 579 | + response = await _is_allowed(query, request, MAIN_POLICY_PACKAGE) |
| 580 | + log_query_result(query, response) |
| 581 | + try: |
| 582 | + raw_result = json.loads(response.body).get("result", {}) |
| 583 | + processed_query = ( |
| 584 | + get_v1_processed_query(raw_result) |
| 585 | + or get_v2_processed_query(raw_result) |
| 586 | + or {} |
| 587 | + ) |
| 588 | + result = { |
| 589 | + "allow": raw_result.get("allow", False), |
| 590 | + "result": raw_result.get( |
| 591 | + "allow", False |
| 592 | + ), # fallback for older sdks (TODO: remove) |
| 593 | + "query": processed_query, |
| 594 | + "debug": raw_result.get("debug", {}), |
| 595 | + } |
| 596 | + except: |
| 597 | + result = dict(allow=False, result=False) |
| 598 | + logger.warning( |
| 599 | + "is allowed (fallback response)", reason="cannot decode opa response" |
| 600 | + ) |
| 601 | + return result |
| 602 | + |
556 | 603 | @router.post( |
557 | 604 | "/kong", |
558 | 605 | response_model=KongAuthorizationResult, |
|
0 commit comments