Skip to content

Commit 14aad83

Browse files
authored
feat: Updated tenant-config API (#52)
* Added the ability to pull tenant config based on query parameters in addition to headers/path * Fix control logic * Uses `not` vs `is None` to catch falsy empty strings * Really fixing logic.
1 parent 72ea312 commit 14aad83

File tree

1 file changed

+64
-20
lines changed
  • resources/functions/tenant-config

1 file changed

+64
-20
lines changed

resources/functions/tenant-config/index.py

Lines changed: 64 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
tenant_details_table_handler = dynamodb.Table(tenant_details_table)
3131

3232

33-
def _get_tenant_config(name):
33+
def _get_tenant_config_by_name(name):
3434
response = tenant_details_table_handler.query(
3535
IndexName=tenant_config_index_name,
3636
KeyConditionExpression=Key(tenant_name_column).eq(name),
@@ -42,9 +42,23 @@ def _get_tenant_config(name):
4242
return tenant_config.get(tenant_config_column, None)
4343

4444

45-
def _get_tenant_config_for_tenant(name):
45+
def _get_tenant_config_by_id(id):
46+
logger.info(f"id: {id}")
47+
response = tenant_details_table_handler.get_item(
48+
Key={
49+
'tenantId': id
50+
},
51+
)
52+
if "Item" not in response or len(response["Item"]) < 1:
53+
return None
54+
55+
tenant_config = response["Item"]
56+
return tenant_config.get(tenant_config_column, None)
57+
58+
59+
def _get_tenant_config_for_tenant_name(name):
4660
try:
47-
tenant_config = _get_tenant_config(name)
61+
tenant_config = _get_tenant_config_by_name(name)
4862
logger.info(f"tenant_config: {tenant_config}")
4963
if tenant_config is None:
5064
logger.error(f"No tenant details found for {name}")
@@ -58,6 +72,22 @@ def _get_tenant_config_for_tenant(name):
5872
raise InternalServerError("Unknown error during processing!")
5973

6074

75+
def _get_tenant_config_for_tenant_id(id):
76+
try:
77+
tenant_config = _get_tenant_config_by_id(id)
78+
logger.info(f"tenant_config: {tenant_config}")
79+
if tenant_config is None:
80+
logger.error(f"No tenant details found for {id}")
81+
raise NotFoundError(f"No tenant details found for {id}")
82+
logger.info(
83+
f"Tenant config found for {id} - {tenant_config}")
84+
85+
return tenant_config, HTTPStatus.OK.value
86+
except botocore.exceptions.ClientError as error:
87+
logger.error(error)
88+
raise InternalServerError("Unknown error during processing!")
89+
90+
6191
@app.get("/tenant-config/<tenant_name>")
6292
@tracer.capture_method
6393
def get_tenant_config_via_req_param(tenant_name):
@@ -66,27 +96,41 @@ def get_tenant_config_via_req_param(tenant_name):
6696
logger.error(f"Tenant name not found in path!")
6797
raise BadRequestError(f"Tenant name not found in path!")
6898

69-
return _get_tenant_config_for_tenant(tenant_name)
99+
return _get_tenant_config_for_tenant_name(tenant_name)
70100

71101

72102
@app.get("/tenant-config")
73103
@tracer.capture_method
74-
def get_tenant_config_via_header():
75-
origin_header = app.current_event.get_header_value(name="Origin")
76-
logger.info(f"origin_header: {origin_header}")
77-
if origin_header is None:
78-
logger.error(f"Origin header missing!")
79-
raise BadRequestError(f"Origin header missing!")
80-
81-
hostname = origin_header.split("://")[1]
82-
logger.info(f"hostname: {hostname}")
83-
tenant_name = hostname.split(".")[0]
84-
logger.info(f"tenant_name: {tenant_name}")
85-
if tenant_name is None:
86-
logger.error(f"Unable to parse tenant name!")
87-
raise BadRequestError(f"Unable to parse tenant name!")
88-
89-
return _get_tenant_config_for_tenant(tenant_name)
104+
def get_tenant_config_via_param_or_header():
105+
tenant_id: str = app.current_event.get_query_string_value(
106+
name="tenantId", default_value="")
107+
tenant_name: str = ''
108+
logger.info(f"tenant_id: {tenant_id}")
109+
if not tenant_id:
110+
logger.info(
111+
f"No tenantId query parameter found. Looking for tenantName.")
112+
else:
113+
return _get_tenant_config_for_tenant_id(tenant_id)
114+
115+
tenant_name = app.current_event.get_query_string_value(
116+
name="tenantName", default_value="")
117+
if not tenant_name:
118+
logger.info(f"No tenantName query parameter found. Looking at headers.")
119+
origin_header = app.current_event.get_header_value(name="Origin")
120+
logger.info(f"origin_header: {origin_header}")
121+
if not origin_header:
122+
logger.error(f"Origin header missing!")
123+
raise BadRequestError(f"Origin header missing!")
124+
125+
hostname = origin_header.split("://")[1]
126+
logger.info(f"hostname: {hostname}")
127+
tenant_name = hostname.split(".")[0]
128+
logger.info(f"tenant_name: {tenant_name}")
129+
if not tenant_name:
130+
logger.error(f"Unable to parse tenant name!")
131+
raise BadRequestError(f"Unable to parse tenant name!")
132+
133+
return _get_tenant_config_for_tenant_name(tenant_name)
90134

91135

92136
@logger.inject_lambda_context(

0 commit comments

Comments
 (0)