30
30
tenant_details_table_handler = dynamodb .Table (tenant_details_table )
31
31
32
32
33
- def _get_tenant_config (name ):
33
+ def _get_tenant_config_by_name (name ):
34
34
response = tenant_details_table_handler .query (
35
35
IndexName = tenant_config_index_name ,
36
36
KeyConditionExpression = Key (tenant_name_column ).eq (name ),
@@ -42,9 +42,23 @@ def _get_tenant_config(name):
42
42
return tenant_config .get (tenant_config_column , None )
43
43
44
44
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 ):
46
60
try :
47
- tenant_config = _get_tenant_config (name )
61
+ tenant_config = _get_tenant_config_by_name (name )
48
62
logger .info (f"tenant_config: { tenant_config } " )
49
63
if tenant_config is None :
50
64
logger .error (f"No tenant details found for { name } " )
@@ -58,6 +72,22 @@ def _get_tenant_config_for_tenant(name):
58
72
raise InternalServerError ("Unknown error during processing!" )
59
73
60
74
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
+
61
91
@app .get ("/tenant-config/<tenant_name>" )
62
92
@tracer .capture_method
63
93
def get_tenant_config_via_req_param (tenant_name ):
@@ -66,27 +96,41 @@ def get_tenant_config_via_req_param(tenant_name):
66
96
logger .error (f"Tenant name not found in path!" )
67
97
raise BadRequestError (f"Tenant name not found in path!" )
68
98
69
- return _get_tenant_config_for_tenant (tenant_name )
99
+ return _get_tenant_config_for_tenant_name (tenant_name )
70
100
71
101
72
102
@app .get ("/tenant-config" )
73
103
@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 )
90
134
91
135
92
136
@logger .inject_lambda_context (
0 commit comments