Skip to content

Commit b00e987

Browse files
NRL-1928 Rename new_permissions -> v2_permissions and lookup v2 permissions in lambda layer rather than s3 (as we agreed)
1 parent 1c876ed commit b00e987

6 files changed

Lines changed: 33 additions & 45 deletions

File tree

layer/nrlf/core/authoriser.py

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,40 +23,25 @@ def get_pointer_permissions(
2323
app_id = connection_metadata.nrl_app_id
2424

2525
key = f"{producer_or_consumer}/{app_id}/{ods_code}.json"
26-
2726
logger.log(LogReference.S3PERMISSIONS011, key=key)
2827

29-
# nothing to retrieve yet!
30-
s3_client = get_s3_client()
31-
try:
32-
response = s3_client.get_object(Bucket=config.AUTH_STORE, Key=key)
33-
pointer_permissions = json.loads(response["Body"].read())
34-
logger.log(
35-
LogReference.S3PERMISSIONS012, pointer_permissions=pointer_permissions
36-
)
37-
return pointer_permissions
38-
39-
except ClientError as exc:
40-
if exc.response.get("Error", {}).get("Code") == "NoSuchKey":
41-
logger.log(LogReference.S3PERMISSIONS013, error=str(exc), key=key)
42-
return {}
28+
file_path = f"/opt/python/nrlf_permissions/{key}"
4329

44-
logger.log(
45-
LogReference.S3PERMISSIONS014,
46-
exc_info=sys.exc_info(),
47-
stacklevel=5,
48-
error=str(exc),
49-
)
50-
raise exc
30+
if connection_metadata.is_test_event:
31+
file_path = path.abspath(f"layer/test_permissions/{key}")
5132

33+
pointer_permissions = {}
34+
try:
35+
with open(file_path) as file:
36+
pointer_permissions = json.load(file)
5237
except Exception as exc:
5338
logger.log(
5439
LogReference.S3PERMISSIONS014,
5540
exc_info=sys.exc_info(),
5641
stacklevel=5,
5742
error=str(exc),
5843
)
59-
raise exc
44+
return pointer_permissions
6045

6146

6247
def get_pointer_types(

layer/nrlf/core/decorators.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def wrapper(*args, **kwargs) -> Dict[str, Any]:
143143
RepositoryType = Union[Type[DocumentPointerRepository], None]
144144

145145

146-
def _use_new_permissions_model(headers: Dict[str, str], config: Config) -> bool:
146+
def _use_v2_permissions_model(headers: Dict[str, str], config: Config) -> bool:
147147
case_insensitive_headers = {key.lower(): value for key, value in headers.items()}
148148
# if either or both headers are missing
149149
return (
@@ -152,9 +152,9 @@ def _use_new_permissions_model(headers: Dict[str, str], config: Config) -> bool:
152152
)
153153

154154

155-
def _load_new_connection_metadata(headers: Dict[str, str], config: Config, path: str):
155+
def _load_v2_connection_metadata(headers: Dict[str, str], config: Config, path: str):
156156
logger.log(LogReference.HANDLER004d)
157-
metadata = parse_headers(headers, use_new_permissions=True)
157+
metadata = parse_headers(headers, use_v2_permissions=True)
158158

159159
if PERMISSION_ALLOW_ALL_POINTER_TYPES in metadata.nrl_permissions:
160160
logger.log(LogReference.HANDLER004a)
@@ -177,10 +177,10 @@ def _load_new_connection_metadata(headers: Dict[str, str], config: Config, path:
177177

178178
def load_connection_metadata(headers: Dict[str, str], config: Config, path=""):
179179

180-
if _use_new_permissions_model(headers, config):
181-
return _load_new_connection_metadata(headers, config, path)
180+
if _use_v2_permissions_model(headers, config):
181+
return _load_v2_connection_metadata(headers, config, path)
182182

183-
metadata = parse_headers(headers, use_new_permissions=False)
183+
metadata = parse_headers(headers, use_v2_permissions=False)
184184
if PERMISSION_ALLOW_ALL_POINTER_TYPES in metadata.nrl_permissions:
185185
logger.log(LogReference.HANDLER004b)
186186
metadata.pointer_types = PointerTypes.list()

layer/nrlf/core/log_references.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,18 @@ class LogReference(Enum):
2323
HANDLER002 = _Reference("DEBUG", "Attempting to parse request headers")
2424
HANDLER003 = _Reference("INFO", "Parsed metadata from request headers")
2525
HANDLER003a = _Reference(
26-
"WARN", "Missing nhsd-end-user-organisation-ods header for new permissions"
26+
"WARN", "Missing nhsd-end-user-organisation-ods header for v2 permissions"
2727
)
2828
HANDLER003b = _Reference(
29-
"WARN", "Missing nhsd-nrl-app-id header for new permissions"
29+
"WARN", "Missing nhsd-nrl-app-id header for v2 permissions"
3030
)
3131
HANDLER004 = _Reference("INFO", "Authorisation lookup enabled")
3232
HANDLER004a = _Reference("INFO", "Authorisation lookup skipped for sync request")
3333
HANDLER004b = _Reference("INFO", "Parsing embedded permissions file from S3")
3434
HANDLER004c = _Reference("INFO", "Parsed embedded permissions file from S3")
35-
HANDLER004d = _Reference("INFO", "Using NEW permissions model")
36-
HANDLER004e = _Reference("INFO", "Parsing new permissions file from S3")
37-
HANDLER004f = _Reference("INFO", "Parsed new permissions file from S3")
35+
HANDLER004d = _Reference("INFO", "Using v2 permissions model")
36+
HANDLER004e = _Reference("INFO", "Parsing v2 permissions file from lambda layer")
37+
HANDLER004f = _Reference("INFO", "Parsed v2 permissions file from lambda layer")
3838
HANDLER005 = _Reference("WARN", "Rejecting request due to missing pointer types")
3939
HANDLER006 = _Reference("DEBUG", "Attempting to parse request parameters")
4040
HANDLER007 = _Reference("INFO", "Parsed request parameters")
@@ -81,15 +81,19 @@ class LogReference(Enum):
8181
"EXCEPTION",
8282
"An error occurred whilst parsing embedded permissions files from S3",
8383
)
84-
# S3 Permissions Lookup Logs - new permissions
84+
# S3 Permissions Lookup Logs - v2 permissions
8585
S3PERMISSIONS011 = _Reference(
86-
"INFO", "Retrieving new pointer permissions from S3 bucket"
86+
"INFO", "Retrieving v2 pointer permissions from lambda layer"
87+
)
88+
S3PERMISSIONS012 = _Reference(
89+
"INFO", "Retrieved v2 pointer permissions from lambda layer"
90+
)
91+
S3PERMISSIONS013 = _Reference(
92+
"WARN", "No v2 permissions file found in lambda layer"
8793
)
88-
S3PERMISSIONS012 = _Reference("INFO", "Retrieved new pointer permissions from S3")
89-
S3PERMISSIONS013 = _Reference("WARN", "No new permissions file found in S3")
9094
S3PERMISSIONS014 = _Reference(
9195
"EXCEPTION",
92-
"An error occurred whilst retrieving new pointer permissions from S3",
96+
"An error occurred whilst retrieving v2 pointer permissions ",
9397
)
9498

9599
# Parse Logs

layer/nrlf/core/request.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def _fetch_ods_app_id_headers(headers: dict[str, str]):
3434

3535

3636
def parse_headers(
37-
headers: Dict[str, str], use_new_permissions=False
37+
headers: Dict[str, str], use_v2_permissions=False
3838
) -> ConnectionMetadata:
3939
"""
4040
Parses the connection metadata and client rp details from the headers passed from Apigee
@@ -49,8 +49,7 @@ def parse_headers(
4949
case_insensitive_headers.get(CONNECTION_METADATA, "{}")
5050
)
5151

52-
if use_new_permissions:
53-
# top up new perms to pass validation? feels bad? or no?
52+
if use_v2_permissions:
5453
ods_code, nrl_app_id = _fetch_ods_app_id_headers(case_insensitive_headers)
5554
raw_connection_metadata["nrl.ods-code"] = ods_code
5655
raw_connection_metadata["nrl.app-id"] = nrl_app_id

layer/nrlf/core/tests/test_decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ def test_request_load_connection_metadata_with_no_permission_lookup_or_file():
816816
# now: botocore.exceptions.NoCredentialsError: Unable to locate credentials
817817
# TODO: Figure out mocking - avoid needing to use a test header
818818
@pytest.mark.parametrize("headers_missing_from_request", missing_headers)
819-
def test_request_load_connection_with_missing_headers_gets_new_permissions(
819+
def test_request_load_connection_with_missing_headers_gets_v2_permissions(
820820
headers_missing_from_request,
821821
):
822822
headers = create_headers(

layer/nrlf/core/tests/test_request.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def test_parse_headers_case_insensitive():
127127
assert metadata.client_rp_details.developer_app_id == "12345"
128128

129129

130-
def test_parse_headers_valid_headers_new_permissions():
130+
def test_parse_headers_valid_headers_v2_permissions():
131131
headers = {
132132
"nhsd-connection-metadata": json.dumps(
133133
{
@@ -147,7 +147,7 @@ def test_parse_headers_valid_headers_new_permissions():
147147
"nhsd-nrl-app-id": "X26-TestApp-12345",
148148
}
149149

150-
metadata = parse_headers(headers, use_new_permissions=True)
150+
metadata = parse_headers(headers, use_v2_permissions=True)
151151

152152
assert metadata.pointer_types == ["pointer_type"]
153153
assert metadata.ods_code == "X26"

0 commit comments

Comments
 (0)