ethyca-fides 2.56.3b2__py2.py3-none-any.whl → 2.57.0rc1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.0rc1.dist-info}/METADATA +1 -1
- {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.0rc1.dist-info}/RECORD +109 -108
- fides/_version.py +3 -3
- fides/api/service/connectors/query_configs/bigquery_query_config.py +46 -15
- fides/api/service/connectors/query_configs/query_config.py +118 -21
- fides/api/util/collection_util.py +29 -4
- fides/api/util/logger_context_utils.py +36 -1
- fides/service/privacy_request/privacy_request_service.py +14 -5
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5574-a4047e826a8cd4c3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5834-bd9ed01c4ab2ef5c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5973-67c7562997f7d5cb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-515c922445b8edc5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9767-4c591bd478c72650.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-fdbafb5a47a6a28c.js → [id]-443e6dd191ce5588.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-fc4635c6eea7165f.js → new-36162d5bea29dcc2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-bdc686761a0d2d60.js → [id]-2d651499c07d12d9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-8618ab5fa45cd074.js → new-36e57d2f2446be82.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-740824dfa6823e26.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-5541ecd2f62711a5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-a6e793e9a8ed00a9.js → [id]-0616437e1a82d3ed.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-7d314bb7238af067.js → new-f8218440494e8532.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-a6448ce6ba7f0cf5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-1a6965d78bfb26b0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-c685d19a131d6960.js → [id]-bbe5854b7d19b7e9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-c6396feeefca887b.js → [id]-82d9af34546adaa2.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/{bd5a72c010fa9c14.css → 957d0e4fea846ff0.css} +1 -1
- fides/ui-build/static/admin/_next/static/j-JzrGRkyzT_OaG3p-EFv/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/ant-poc.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- fides/ui-build/static/admin/lib/fides.js +2 -2
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2201-abd6092e6df98c26.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-b55810d66362f56e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6362-8f79e403fdc2404a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7495-a61f0c9fcb458664.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-fc00dbeb18a7b731.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-295756e1fd640b59.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-20489bceb7b068b8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-21c9902e7b098b39.js +0 -1
- fides/ui-build/static/admin/_next/static/n4uO6TqGfiKHQ-X5XYkoy/_buildManifest.js +0 -1
- {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.0rc1.dist-info}/LICENSE +0 -0
- {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.0rc1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.0rc1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.0rc1.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{_app-3b7bbcdb61d952e7.js → _app-9afd7a4bc9b3eee5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{n4uO6TqGfiKHQ-X5XYkoy → j-JzrGRkyzT_OaG3p-EFv}/_ssgManifest.js +0 -0
|
@@ -144,6 +144,45 @@ class QueryConfig(Generic[T], ABC):
|
|
|
144
144
|
|
|
145
145
|
return data
|
|
146
146
|
|
|
147
|
+
def _is_child_of_masked_parent(
|
|
148
|
+
self, path: str, masked_parent_paths: List[str]
|
|
149
|
+
) -> bool:
|
|
150
|
+
"""
|
|
151
|
+
Check if the given path is a child of any already masked parent object.
|
|
152
|
+
"""
|
|
153
|
+
for parent_path in masked_parent_paths:
|
|
154
|
+
if path == parent_path or path.startswith(parent_path + "."):
|
|
155
|
+
return True
|
|
156
|
+
return False
|
|
157
|
+
|
|
158
|
+
def _is_object_or_array_with_data_category(
|
|
159
|
+
self, field_val: Any, field: Optional[Field]
|
|
160
|
+
) -> bool:
|
|
161
|
+
"""
|
|
162
|
+
Check if field is an object or array of objects with data categories
|
|
163
|
+
"""
|
|
164
|
+
# First check if the field has data categories
|
|
165
|
+
has_data_category = (
|
|
166
|
+
field and field.data_categories and len(field.data_categories) > 0
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
if not has_data_category:
|
|
170
|
+
return False
|
|
171
|
+
|
|
172
|
+
# Check if it's an object
|
|
173
|
+
is_object = isinstance(field_val, dict)
|
|
174
|
+
|
|
175
|
+
# Check if it's a non-empty array of objects
|
|
176
|
+
is_array_of_objects = False
|
|
177
|
+
if (
|
|
178
|
+
isinstance(field_val, list) and field_val
|
|
179
|
+
): # Check if it's a list and not empty
|
|
180
|
+
# Only check first element if the list is not empty
|
|
181
|
+
is_array_of_objects = isinstance(field_val[0], dict)
|
|
182
|
+
|
|
183
|
+
# Return true if it's either an object or an array of objects and has data categories
|
|
184
|
+
return is_object or is_array_of_objects
|
|
185
|
+
|
|
147
186
|
def update_value_map( # pylint: disable=R0914
|
|
148
187
|
self, row: Row, policy: Policy, request: PrivacyRequest
|
|
149
188
|
) -> Dict[str, Any]:
|
|
@@ -154,27 +193,44 @@ class QueryConfig(Generic[T], ABC):
|
|
|
154
193
|
In this example, a Null Masking Strategy was used to determine that the name/ccn/code fields, nested
|
|
155
194
|
workplace_info.employer field, and the first element in 'children' for a given customer_id will be replaced
|
|
156
195
|
with null values.
|
|
157
|
-
|
|
158
196
|
"""
|
|
159
197
|
rule_to_collection_field_paths: Dict[Rule, List[FieldPath]] = (
|
|
160
198
|
self.build_rule_target_field_paths(policy)
|
|
161
199
|
)
|
|
162
200
|
|
|
163
201
|
value_map: Dict[str, Any] = {}
|
|
202
|
+
# Track which parent paths have been masked as whole objects/arrays
|
|
203
|
+
masked_parent_paths: List[str] = []
|
|
204
|
+
|
|
164
205
|
for rule, field_paths in rule_to_collection_field_paths.items():
|
|
165
206
|
strategy_config = rule.masking_strategy
|
|
166
207
|
if not strategy_config:
|
|
167
208
|
continue
|
|
209
|
+
|
|
168
210
|
for rule_field_path in field_paths:
|
|
211
|
+
# Check if field is read-only before processing
|
|
212
|
+
field = self.field_map().get(rule_field_path)
|
|
213
|
+
if field and field.read_only:
|
|
214
|
+
logger.debug(
|
|
215
|
+
f"Skipping read-only field: {rule_field_path.string_path}"
|
|
216
|
+
)
|
|
217
|
+
continue
|
|
218
|
+
|
|
219
|
+
# Skip if this field is a child of an already masked parent object
|
|
220
|
+
if self._is_child_of_masked_parent(
|
|
221
|
+
rule_field_path.string_path, masked_parent_paths
|
|
222
|
+
):
|
|
223
|
+
logger.debug(
|
|
224
|
+
f"Skipping field {rule_field_path.string_path} because its parent object has already been masked"
|
|
225
|
+
)
|
|
226
|
+
continue
|
|
227
|
+
|
|
228
|
+
# Determine masking strategy
|
|
169
229
|
strategy: MaskingStrategy = MaskingStrategy.get_strategy(
|
|
170
230
|
strategy_config["strategy"], strategy_config["configuration"]
|
|
171
231
|
)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
for field_path, field in self.field_map().items()
|
|
175
|
-
if field_path == rule_field_path
|
|
176
|
-
][0]
|
|
177
|
-
field = self.field_map().get(rule_field_path)
|
|
232
|
+
|
|
233
|
+
# Apply field-level masking strategy override if present
|
|
178
234
|
if field and field.masking_strategy_override:
|
|
179
235
|
masking_strategy_override = field.masking_strategy_override
|
|
180
236
|
strategy = MaskingStrategy.get_strategy(
|
|
@@ -184,7 +240,14 @@ class QueryConfig(Generic[T], ABC):
|
|
|
184
240
|
logger.warning(
|
|
185
241
|
f"Using field-level masking override of type '{strategy.name}' for {rule_field_path.string_path}"
|
|
186
242
|
)
|
|
243
|
+
|
|
187
244
|
null_masking: bool = strategy.name == NullMaskingStrategy.name
|
|
245
|
+
truncation: MaskingTruncation = [
|
|
246
|
+
MaskingTruncation(field.data_type_converter, field.length)
|
|
247
|
+
for field_path, field in self.field_map().items()
|
|
248
|
+
if field_path == rule_field_path
|
|
249
|
+
][0]
|
|
250
|
+
|
|
188
251
|
if not self._supported_data_type(truncation, null_masking, strategy):
|
|
189
252
|
logger.warning(
|
|
190
253
|
"Unable to generate a query for field {}: data_type is either not present on the field or not supported for the {} masking strategy. Received data type: {}",
|
|
@@ -194,21 +257,55 @@ class QueryConfig(Generic[T], ABC):
|
|
|
194
257
|
)
|
|
195
258
|
continue
|
|
196
259
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
value_map[detailed_path] = self._generate_masked_value(
|
|
205
|
-
request_id=request.id,
|
|
206
|
-
strategy=strategy,
|
|
207
|
-
val=pydash.objects.get(row, detailed_path),
|
|
208
|
-
masking_truncation=truncation,
|
|
209
|
-
null_masking=null_masking,
|
|
210
|
-
str_field_path=detailed_path,
|
|
260
|
+
# Get the actual field value to determine its type
|
|
261
|
+
field_val = pydash.objects.get(row, rule_field_path.string_path)
|
|
262
|
+
|
|
263
|
+
# Handle objects and arrays with data categories - mask as whole entities
|
|
264
|
+
if self._is_object_or_array_with_data_category(field_val, field):
|
|
265
|
+
logger.info(
|
|
266
|
+
f"Field {rule_field_path.string_path} is an object or array of objects with data category. Masking entire field."
|
|
211
267
|
)
|
|
268
|
+
if field_val is not None:
|
|
269
|
+
value_map[rule_field_path.string_path] = (
|
|
270
|
+
self._generate_masked_value(
|
|
271
|
+
request_id=request.id,
|
|
272
|
+
strategy=strategy,
|
|
273
|
+
val=field_val,
|
|
274
|
+
masking_truncation=truncation,
|
|
275
|
+
null_masking=null_masking,
|
|
276
|
+
str_field_path=rule_field_path.string_path,
|
|
277
|
+
)
|
|
278
|
+
)
|
|
279
|
+
# Add this path to masked parent paths to skip its children later
|
|
280
|
+
masked_parent_paths.append(rule_field_path.string_path)
|
|
281
|
+
else:
|
|
282
|
+
# Standard approach: build refined target paths for individual fields
|
|
283
|
+
paths_to_mask = [
|
|
284
|
+
join_detailed_path(path)
|
|
285
|
+
for path in build_refined_target_paths(
|
|
286
|
+
row, query_paths={rule_field_path: None}
|
|
287
|
+
)
|
|
288
|
+
]
|
|
289
|
+
|
|
290
|
+
# Process each detailed path, skipping those that are children of masked parents
|
|
291
|
+
for detailed_path in paths_to_mask:
|
|
292
|
+
if self._is_child_of_masked_parent(
|
|
293
|
+
detailed_path, masked_parent_paths
|
|
294
|
+
):
|
|
295
|
+
logger.debug(
|
|
296
|
+
f"Skipping detailed path {detailed_path} because its parent object has already been masked"
|
|
297
|
+
)
|
|
298
|
+
continue
|
|
299
|
+
|
|
300
|
+
value_map[detailed_path] = self._generate_masked_value(
|
|
301
|
+
request_id=request.id,
|
|
302
|
+
strategy=strategy,
|
|
303
|
+
val=pydash.objects.get(row, detailed_path),
|
|
304
|
+
masking_truncation=truncation,
|
|
305
|
+
null_masking=null_masking,
|
|
306
|
+
str_field_path=detailed_path,
|
|
307
|
+
)
|
|
308
|
+
|
|
212
309
|
return value_map
|
|
213
310
|
|
|
214
311
|
@staticmethod
|
|
@@ -204,15 +204,12 @@ def flatten_dict(data: Any, prefix: str = "", separator: str = ".") -> Dict[str,
|
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
Args:
|
|
207
|
-
data: The data to flatten (
|
|
207
|
+
data: The data to flatten (dict, list, or scalar value)
|
|
208
208
|
prefix: The current key prefix (used in recursion)
|
|
209
209
|
separator: The separator to use between key segments (default: ".")
|
|
210
210
|
|
|
211
211
|
Returns:
|
|
212
212
|
A flattened dictionary with dot-notation keys
|
|
213
|
-
|
|
214
|
-
Raises:
|
|
215
|
-
FidesopsException: If input is not a dict or list
|
|
216
213
|
"""
|
|
217
214
|
items = {}
|
|
218
215
|
|
|
@@ -236,3 +233,31 @@ def flatten_dict(data: Any, prefix: str = "", separator: str = ".") -> Dict[str,
|
|
|
236
233
|
)
|
|
237
234
|
|
|
238
235
|
return items
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def replace_none_arrays(
|
|
239
|
+
data: Any,
|
|
240
|
+
) -> Any:
|
|
241
|
+
"""
|
|
242
|
+
Recursively replace any arrays containing only None values with empty arrays.
|
|
243
|
+
|
|
244
|
+
Args:
|
|
245
|
+
data: Any Python object (dict, list, etc.)
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
The transformed data structure with None-only arrays replaced by empty arrays
|
|
249
|
+
"""
|
|
250
|
+
if isinstance(data, dict):
|
|
251
|
+
# Process each key-value pair in dictionaries
|
|
252
|
+
return {k: replace_none_arrays(v) for k, v in data.items()}
|
|
253
|
+
|
|
254
|
+
if isinstance(data, list):
|
|
255
|
+
# Check if list contains only None values
|
|
256
|
+
if all(item is None for item in data):
|
|
257
|
+
return []
|
|
258
|
+
|
|
259
|
+
# Otherwise process each item in the list
|
|
260
|
+
return [replace_none_arrays(item) for item in data]
|
|
261
|
+
|
|
262
|
+
# Return other data types unchanged
|
|
263
|
+
return data
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import inspect
|
|
1
2
|
from abc import abstractmethod
|
|
2
3
|
from enum import Enum
|
|
3
4
|
from functools import wraps
|
|
@@ -81,12 +82,46 @@ def log_context(
|
|
|
81
82
|
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
82
83
|
context = dict(additional_context)
|
|
83
84
|
|
|
84
|
-
# extract specified param values from kwargs
|
|
85
|
+
# extract specified param values from kwargs and args
|
|
85
86
|
if capture_args:
|
|
87
|
+
# First, process kwargs as they're explicitly named
|
|
86
88
|
for arg_name, context_name in capture_args.items():
|
|
87
89
|
if arg_name in kwargs:
|
|
88
90
|
context[context_name.value] = kwargs[arg_name]
|
|
89
91
|
|
|
92
|
+
# Process args using signature binding for more robust parameter mapping
|
|
93
|
+
if args:
|
|
94
|
+
try:
|
|
95
|
+
# Get the signature and bind the arguments
|
|
96
|
+
sig = inspect.signature(func)
|
|
97
|
+
# This will map positional args to their parameter names correctly
|
|
98
|
+
bound_args = sig.bind_partial(*args, **kwargs)
|
|
99
|
+
|
|
100
|
+
# Now we can iterate through the bound arguments
|
|
101
|
+
for param_name, arg_value in bound_args.arguments.items():
|
|
102
|
+
# Only process if this parameter is in capture_args and wasn't already found in kwargs
|
|
103
|
+
if param_name in capture_args and param_name not in kwargs:
|
|
104
|
+
context_name = capture_args[param_name]
|
|
105
|
+
context[context_name.value] = arg_value
|
|
106
|
+
except TypeError:
|
|
107
|
+
# Handle the case where the arguments don't match the signature
|
|
108
|
+
pass
|
|
109
|
+
|
|
110
|
+
# Handle default parameters that weren't provided in args or kwargs
|
|
111
|
+
if capture_args:
|
|
112
|
+
sig = inspect.signature(func)
|
|
113
|
+
for param_name, param in sig.parameters.items():
|
|
114
|
+
# Check if parameter has a default value and is in capture_args
|
|
115
|
+
# and hasn't been processed yet (not in context)
|
|
116
|
+
if (
|
|
117
|
+
param.default is not param.empty
|
|
118
|
+
and param_name in capture_args
|
|
119
|
+
and capture_args[param_name].value not in context
|
|
120
|
+
):
|
|
121
|
+
context_name = capture_args[param_name]
|
|
122
|
+
context[context_name.value] = param.default
|
|
123
|
+
|
|
124
|
+
# Process Contextualizable args
|
|
90
125
|
for arg in args:
|
|
91
126
|
if isinstance(arg, Contextualizable):
|
|
92
127
|
arg_context = arg.get_log_context()
|
|
@@ -332,11 +332,20 @@ class PrivacyRequestService:
|
|
|
332
332
|
)
|
|
333
333
|
|
|
334
334
|
if _manual_approval_required(self.config_proxy, privacy_request):
|
|
335
|
-
self.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
335
|
+
has_webhooks = self.db.query(PreApprovalWebhook).count() > 0
|
|
336
|
+
# If there are pre-approval webhooks, then we do nothing since the
|
|
337
|
+
# create_privacy_request method will have already triggered them,
|
|
338
|
+
# and they will be responsible of approving the request.
|
|
339
|
+
|
|
340
|
+
# If there are no pre-approval webhooks, approve the request immediately
|
|
341
|
+
# since it was originally approved by a person and we don't want them to
|
|
342
|
+
# have to manually re-approve
|
|
343
|
+
if not has_webhooks:
|
|
344
|
+
self.approve_privacy_requests(
|
|
345
|
+
[privacy_request_id],
|
|
346
|
+
reviewed_by=reviewed_by,
|
|
347
|
+
suppress_notification=True,
|
|
348
|
+
)
|
|
340
349
|
|
|
341
350
|
return privacy_request
|
|
342
351
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/957d0e4fea846ff0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/957d0e4fea846ff0.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-4df2ba5ee2d40f0a.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-ce7f38a12ea8c223.js" defer=""></script><script src="/_next/static/chunks/pages/_app-9afd7a4bc9b3eee5.js" defer=""></script><script src="/_next/static/chunks/pages/404-1087258931760074.js" defer=""></script><script src="/_next/static/j-JzrGRkyzT_OaG3p-EFv/_buildManifest.js" defer=""></script><script src="/_next/static/j-JzrGRkyzT_OaG3p-EFv/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"j-JzrGRkyzT_OaG3p-EFv","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5574],{77213:function(e,i,t){t.d(i,{Z:function(){return h}});var r=t(24246),n=t(56351),s=t(88038),o=t.n(s),l=t(86677);t(27378);var d=t(25980),a=t(90867),c=t(77830),x=()=>{let e=(0,l.useRouter)();return(0,r.jsx)(n.xuv,{bg:"gray.50",border:"1px solid",borderColor:"blue.400",borderRadius:"md",justifyContent:"space-between",p:5,mb:5,mt:5,children:(0,r.jsxs)(n.xuv,{children:[(0,r.jsxs)(n.Kqy,{direction:{base:"column",sm:"row"},justifyContent:"space-between",children:[(0,r.jsx)(n.xvT,{fontWeight:"semibold",children:"Configure your storage and messaging provider"}),(0,r.jsx)(n.wpx,{onClick:()=>{e.push(c.fz)},children:"Configure"})]}),(0,r.jsxs)(n.xvT,{children:["Before Fides can process your privacy requests we need two simple steps to configure your storage and email client."," "]})]})})},h=e=>{let{children:i,title:t,padded:s=!0,mainProps:c}=e,h=(0,d.hz)(),u=(0,l.useRouter)(),p="/privacy-requests"===u.pathname||"/datastore-connection"===u.pathname,m=!(h.flags.privacyRequestsConfiguration&&p),{data:g}=(0,a.JE)(void 0,{skip:m}),{data:j}=(0,a.PW)(void 0,{skip:m}),f=h.flags.privacyRequestsConfiguration&&(!g||!j)&&p;return(0,r.jsxs)(n.kCb,{"data-testid":t,direction:"column",h:"100vh",children:[(0,r.jsxs)(o(),{children:[(0,r.jsxs)("title",{children:["Fides Admin UI - ",t]}),(0,r.jsx)("meta",{name:"description",content:"Privacy Engineering Platform"}),(0,r.jsx)("link",{rel:"icon",href:"/favicon.ico"})]}),(0,r.jsxs)(n.kCb,{as:"main",direction:"column",py:s?6:0,px:s?10:0,h:s?"calc(100% - 48px)":"full",flex:1,minWidth:0,overflow:"auto",...c,children:[f?(0,r.jsx)(x,{}):null,i]})]})}},58754:function(e,i,t){var r=t(24246),n=t(56351),s=t(70788);i.Z=e=>{let{heading:i,breadcrumbItems:t,isSticky:o=!0,children:l,rightContent:d,style:a,...c}=e;return(0,r.jsxs)("div",{...c,style:o?{position:"sticky",top:"-24px",paddingTop:"24px",paddingBottom:"24px",paddingLeft:"40px",marginLeft:"-40px",paddingRight:"40px",marginRight:"-40px",marginTop:"-24px",left:0,zIndex:20,backgroundColor:"white",...a}:{paddingBottom:"24px",...a},children:[(0,r.jsxs)(n.jqI,{justify:"space-between",children:["string"==typeof i?(0,r.jsx)(n.X6q,{className:t||l?"pb-4":void 0,fontSize:"2xl","data-testid":"page-heading",children:i}):i,d&&(0,r.jsx)("div",{"data-testid":"page-header-right-content",children:d})]}),!!t&&(0,r.jsx)(s.m,{className:l?"pb-4":void 0,items:t,"data-testid":"page-breadcrumb"}),l]})}},84306:function(e,i,t){t.d(i,{V:function(){return s}});var r=t(24246),n=t(56351);let s=()=>{let e=(0,n.pmc)();return{errorAlert:(i,t,s)=>{let o={...s,position:(null==s?void 0:s.position)||"top",render:e=>{let{onClose:s}=e;return(0,r.jsxs)(n.bZj,{alignItems:"normal",status:"error","data-testid":"error-alert",children:[(0,r.jsx)(n.zMQ,{}),(0,r.jsxs)(n.xuv,{children:[t&&(0,r.jsx)(n.CdC,{children:t}),(0,r.jsx)(n.XaZ,{children:i})]}),(0,r.jsx)(n.PZ7,{onClick:s,position:"relative",right:0,size:"sm",top:-1})]})}};(null==s?void 0:s.id)&&e.isActive(s.id)?e.update(s.id,o):e(o)},successAlert:(i,t,s)=>{let o={...s,position:(null==s?void 0:s.position)||"top",render:e=>{let{onClose:s}=e;return(0,r.jsxs)(n.bZj,{alignItems:"normal",status:"success",variant:"subtle","data-testid":"success-alert",children:[(0,r.jsx)(n.zMQ,{}),(0,r.jsxs)(n.xuv,{children:[t&&(0,r.jsx)(n.CdC,{children:t}),(0,r.jsx)(n.XaZ,{children:i})]}),(0,r.jsx)(n.PZ7,{onClick:s,position:"relative",right:0,size:"sm",top:-1})]})}};(null==s?void 0:s.id)&&e.isActive(s.id)?e.update(s.id,o):e(o)}}}},70788:function(e,i,t){t.d(i,{m:function(){return a}});var r=t(24246),n=t(56351),s=t(79894),o=t.n(s),l=t(27378);let{Text:d}=n.AntTypography,a=e=>{let{items:i,...t}=e,s=(0,l.useMemo)(()=>null==i?void 0:i.map((e,t)=>{let s=t===i.length-1,l={...e},a=l.onClick&&!l.href;return("string"==typeof l.title&&(l.title=(0,r.jsx)(d,{style:{color:"inherit",maxWidth:s?void 0:400},ellipsis:!s,children:l.title})),a)?l.title=(0,r.jsx)(n.wpx,{type:"text",size:"small",icon:l.icon,onClick:l.onClick,className:"ant-breadcrumb-link -mt-px px-1 text-inherit",children:l.title}):(l.icon&&(l.title=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"anticon align-text-bottom",children:l.icon}),l.title]})),l.href&&l.title&&(l.title=(0,r.jsx)(o(),{href:l.href,className:"ant-breadcrumb-link",children:l.title}),delete l.href)),l}),[i]);return(0,r.jsx)(n.zrq,{items:s,...t})}},39715:function(e,i,t){var r=t(24246),n=t(56351);t(27378),i.Z=e=>{let{isEmptyState:i,yamlError:t}=e;return(0,r.jsx)(n.Rg9,{in:!0,children:(0,r.jsxs)(n.xuv,{w:"fit-content",bg:"white",p:3,borderRadius:3,children:[(0,r.jsxs)(n.Ugi,{children:[(0,r.jsx)(n.X6q,{as:"h5",color:"gray.700",size:"xs",children:"YAML"}),(0,r.jsx)(n.Vp9,{colorScheme:"red",size:"sm",variant:"solid",children:"Error"})]}),(0,r.jsx)(n.xuv,{bg:"red.50",border:"1px solid",borderColor:"red.300",color:"red.300",mt:"16px",borderRadius:"6px",children:(0,r.jsxs)(n.Ugi,{alignItems:"flex-start",margin:["14px","17px","14px","17px"],children:[(0,r.jsx)(n.f9v,{}),i&&(0,r.jsxs)(n.xuv,{children:[(0,r.jsx)(n.X6q,{as:"h5",color:"red.500",fontWeight:"semibold",size:"xs",children:"Error message:"}),(0,r.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:"Yaml system is required"})]}),t&&(0,r.jsxs)(n.xuv,{children:[(0,r.jsx)(n.X6q,{as:"h5",color:"red.500",fontWeight:"semibold",size:"xs",children:"Error message:"}),(0,r.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:t.message}),(0,r.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:t.reason}),(0,r.jsxs)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:["Ln ",(0,r.jsx)("b",{children:t.mark.line}),", Col"," ",(0,r.jsx)("b",{children:t.mark.column}),", Pos"," ",(0,r.jsx)("b",{children:t.mark.position})]})]})]})})]})})}},41207:function(e,i,t){t.d(i,{F:function(){return o},M:function(){return s}});var r=t(76649),n=t(65218);let s=t.n(n)()(()=>t.e(7088).then(t.bind(t,57088)).then(e=>e.default),{loadableGenerated:{webpack:()=>[57088]},ssr:!1}),o=e=>(0,r.Ln)({name:"string"},e)&&"YAMLException"===e.name}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5834],{97181:function(e,a,_){_.d(a,{d:function(){return t}});var n=_(24246),i=_(56351),l=_(34090),r=_(27378),d=_(91613),o=_(40324);let t=e=>{let{name:a,label:_,labelProps:t,tooltip:F,isRequired:u,layout:c="inline",...s}=e,[S,b,{setValue:p}]=(0,l.U$)(a),C=!!(b.touched&&b.error),[v,A]=(0,r.useState)("");S.value||"tags"!==s.mode&&"multiple"!==s.mode||(S.value=[]),"tags"===s.mode&&"string"==typeof S.value&&(S.value=[S.value]);let M="tags"===s.mode?(e,a)=>e?e.value!==v||S.value.includes(v)?s.optionRender?s.optionRender(e,a):e.label:'Create "'.concat(v,'"'):void 0:s.optionRender||void 0,N=e=>{A(e),s.onSearch&&s.onSearch(e)},m=(e,a)=>{p(e),s.onChange&&s.onChange(e,a)};return"inline"===c?(0,n.jsx)(i.NIc,{isInvalid:C,isRequired:u,children:(0,n.jsxs)(i.rjZ,{templateColumns:_?"1fr 3fr":"1fr",children:[_?(0,n.jsx)(o.__,{htmlFor:s.id||a,...t,children:_}):null,(0,n.jsxs)(i.jqI,{align:"center",children:[(0,n.jsxs)(i.jqI,{vertical:!0,flex:1,className:"mr-2",children:[(0,n.jsx)(i.WPr,{...S,id:s.id||a,"data-testid":"controlled-select-".concat(S.name),...s,optionRender:M,onSearch:"tags"===s.mode?N:void 0,onChange:m,value:S.value||void 0}),(0,n.jsx)(o.Bc,{isInvalid:C,message:b.error,fieldName:S.name})]}),F?(0,n.jsx)(d.Z,{label:F}):null]})]})}):(0,n.jsx)(i.NIc,{isInvalid:C,isRequired:u,children:(0,n.jsxs)(i.gCW,{alignItems:"start",children:[(0,n.jsxs)(i.jqI,{align:"center",children:[_?(0,n.jsx)(o.__,{htmlFor:s.id||a,fontSize:"xs",my:0,mr:1,...t,children:_}):null,F?(0,n.jsx)(d.Z,{label:F}):null]}),(0,n.jsx)(i.WPr,{...S,id:s.id||a,"data-testid":"controlled-select-".concat(S.name),...s,optionRender:M,onSearch:"tags"===s.mode?N:void 0,onChange:m,value:S.value||void 0}),(0,n.jsx)(o.Bc,{isInvalid:C,message:b.error,fieldName:S.name})]})})}},8411:function(e,a,_){_.d(a,{NA:function(){return l},Z8:function(){return i}});var n=_(21702);let i={[n._F.ER]:"Eritrea",[n._F.DJ]:"Djibouti",[n._F.MR]:"Mauritania",[n._F.NA]:"Namibia",[n._F.GH]:"Ghana",[n._F.SS]:"South Sudan",[n._F.SC]:"Seychelles",[n._F.IO]:"British Indian Ocean Territory",[n._F.GQ]:"Equatorial Guinea",[n._F.AO]:"Angola",[n._F.CG]:"Republic of the Congo",[n._F.BW]:"Botswana",[n._F.BI]:"Burundi",[n._F.DZ]:"Algeria",[n._F.TD]:"Chad",[n._F.NG]:"Nigeria",[n._F.TZ]:"Tanzania",[n._F.EH]:"Western Sahara",[n._F.SN]:"Senegal",[n._F.LR]:"Liberia",[n._F.ZA]:"South Africa",[n._F.CV]:"Cape Verde",[n._F.GM]:"Gambia",[n._F.SD]:"Sudan",[n._F.KM]:"Comoros",[n._F.SZ]:"Eswatini",[n._F.UG]:"Uganda",[n._F.MG]:"Madagascar",[n._F.RW]:"Rwanda",[n._F.CD]:"DR Congo",[n._F.CM]:"Cameroon",[n._F.SH]:"Saint Helena, Ascension and Tristan da Cunha",[n._F.TG]:"Togo",[n._F.MU]:"Mauritius",[n._F.NE]:"Niger",[n._F.BJ]:"Benin",[n._F.EG]:"Egypt",[n._F.LS]:"Lesotho",[n._F.ET]:"Ethiopia",[n._F.MA]:"Morocco",[n._F.YT]:"Mayotte",[n._F.BF]:"Burkina Faso",[n._F.RE]:"R\xe9union",[n._F.ST]:"S\xe3o Tom\xe9 and Pr\xedncipe",[n._F.CF]:"Central African Republic",[n._F.MZ]:"Mozambique",[n._F.MW]:"Malawi",[n._F.ML]:"Mali",[n._F.ZM]:"Zambia",[n._F.LY]:"Libya",[n._F.GW]:"Guinea-Bissau",[n._F.SO]:"Somalia",[n._F.KE]:"Kenya",[n._F.GN]:"Guinea",[n._F.ZW]:"Zimbabwe",[n._F.TN]:"Tunisia",[n._F.SL]:"Sierra Leone",[n._F.GA]:"Gabon",[n._F.CI]:"Ivory Coast",[n._F.JO]:"Jordan",[n._F.PK]:"Pakistan",[n._F.KP]:"North Korea",[n._F.MO]:"Macau",[n._F.AM]:"Armenia",[n._F.SY]:"Syria",[n._F.TJ]:"Tajikistan",[n._F.SA]:"Saudi Arabia",[n._F.KR]:"South Korea",[n._F.NP]:"Nepal",[n._F.PH]:"Philippines",[n._F.IQ]:"Iraq",[n._F.LB]:"Lebanon",[n._F.MN]:"Mongolia",[n._F.PS]:"Palestine",[n._F.YE]:"Yemen",[n._F.JP]:"Japan",[n._F.KZ]:"Kazakhstan",[n._F.LK]:"Sri Lanka",[n._F.MM]:"Myanmar",[n._F.KG]:"Kyrgyzstan",[n._F.CN]:"China",[n._F.AF]:"Afghanistan",[n._F.OM]:"Oman",[n._F.IN]:"India",[n._F.LA]:"Laos",[n._F.UZ]:"Uzbekistan",[n._F.MV]:"Maldives",[n._F.ID]:"Indonesia",[n._F.VN]:"Vietnam",[n._F.MY]:"Malaysia",[n._F.TW]:"Taiwan",[n._F.KH]:"Cambodia",[n._F.AE]:"United Arab Emirates",[n._F.HK]:"Hong Kong",[n._F.GE]:"Georgia",[n._F.BD]:"Bangladesh",[n._F.KW]:"Kuwait",[n._F.TM]:"Turkmenistan",[n._F.QA]:"Qatar",[n._F.BH]:"Bahrain",[n._F.BN]:"Brunei",[n._F.TH]:"Thailand",[n._F.BT]:"Bhutan",[n._F.SG]:"Singapore",[n._F.IL]:"Israel",[n._F.AZ]:"Azerbaijan",[n._F.TL]:"Timor-Leste",[n._F.IR]:"Iran",[n._F.TR]:"Turkey",[n._F.MK]:"North Macedonia",[n._F.IE]:"Ireland",[n._F.DK]:"Denmark",[n._F.SK]:"Slovakia",[n._F.MD]:"Moldova",[n._F.AX]:"\xc5land Islands",[n._F.PL]:"Poland",[n._F.BA]:"Bosnia and Herzegovina",[n._F.SM]:"San Marino",[n._F.CZ]:"Czechia",[n._F.EE]:"Estonia",[n._F.XK]:"Kosovo",[n._F.FO]:"Faroe Islands",[n._F.SJ]:"Svalbard and Jan Mayen",[n._F.GG]:"Guernsey",[n._F.FR]:"France",[n._F.NL]:"Netherlands",[n._F.FI]:"Finland",[n._F.PT]:"Portugal",[n._F.DE]:"Germany",[n._F.MT]:"Malta",[n._F.JE]:"Jersey",[n._F.IS]:"Iceland",[n._F.ES]:"Spain",[n._F.GI]:"Gibraltar",[n._F.NO]:"Norway",[n._F.CY]:"Cyprus",[n._F.RS]:"Serbia",[n._F.LT]:"Lithuania",[n._F.MC]:"Monaco",[n._F.LU]:"Luxembourg",[n._F.UA]:"Ukraine",[n._F.IM]:"Isle of Man",[n._F.RO]:"Romania",[n._F.BE]:"Belgium",[n._F.SE]:"Sweden",[n._F.ME]:"Montenegro",[n._F.LV]:"Latvia",[n._F.VA]:"Vatican City",[n._F.AT]:"Austria",[n._F.AL]:"Albania",[n._F.LI]:"Liechtenstein",[n._F.GR]:"Greece",[n._F.IT]:"Italy",[n._F.AD]:"Andorra",[n._F.GB]:"United Kingdom",[n._F.RU]:"Russia",[n._F.SI]:"Slovenia",[n._F.BY]:"Belarus",[n._F.CH]:"Switzerland",[n._F.HU]:"Hungary",[n._F.BG]:"Bulgaria",[n._F.HR]:"Croatia",[n._F.TC]:"Turks and Caicos Islands",[n._F.CW]:"Cura\xe7ao",[n._F.GP]:"Guadeloupe",[n._F.UM]:"United States Minor Outlying Islands",[n._F.GT]:"Guatemala",[n._F.PM]:"Saint Pierre and Miquelon",[n._F.BQ]:"Caribbean Netherlands",[n._F.GL]:"Greenland",[n._F.SX]:"Sint Maarten",[n._F.PA]:"Panama",[n._F.AW]:"Aruba",[n._F.MQ]:"Martinique",[n._F.AG]:"Antigua and Barbuda",[n._F.BM]:"Bermuda",[n._F.CU]:"Cuba",[n._F.GD]:"Grenada",[n._F.NI]:"Nicaragua",[n._F.LC]:"Saint Lucia",[n._F.KN]:"Saint Kitts and Nevis",[n._F.DO]:"Dominican Republic",[n._F.VC]:"Saint Vincent and the Grenadines",[n._F.BZ]:"Belize",[n._F.HT]:"Haiti",[n._F.JM]:"Jamaica",[n._F.BS]:"Bahamas",[n._F.MX]:"Mexico",[n._F.MF]:"Saint Martin",[n._F.SV]:"El Salvador",[n._F.BL]:"Saint Barth\xe9lemy",[n._F.AI]:"Anguilla",[n._F.MS]:"Montserrat",[n._F.VG]:"British Virgin Islands",[n._F.BB]:"Barbados",[n._F.HN]:"Honduras",[n._F.KY]:"Cayman Islands",[n._F.DM]:"Dominica",[n._F.TT]:"Trinidad and Tobago",[n._F.CR]:"Costa Rica",[n._F.SR]:"Suriname",[n._F.CX]:"Christmas Island",[n._F.WS]:"Samoa",[n._F.PF]:"French Polynesia",[n._F.AS]:"American Samoa",[n._F.NC]:"New Caledonia",[n._F.TK]:"Tokelau",[n._F.PW]:"Palau",[n._F.KI]:"Kiribati",[n._F.VU]:"Vanuatu",[n._F.PN]:"Pitcairn Islands",[n._F.CK]:"Cook Islands",[n._F.FJ]:"Fiji",[n._F.PG]:"Papua New Guinea",[n._F.MP]:"Northern Mariana Islands",[n._F.NU]:"Niue",[n._F.TV]:"Tuvalu",[n._F.NF]:"Norfolk Island",[n._F.TO]:"Tonga",[n._F.FM]:"Micronesia",[n._F.SB]:"Solomon Islands",[n._F.NR]:"Nauru",[n._F.WF]:"Wallis and Futuna",[n._F.GU]:"Guam",[n._F.AU]:"Australia",[n._F.NZ]:"New Zealand",[n._F.MH]:"Marshall Islands",[n._F.CC]:"Cocos (Keeling) Islands",[n._F.VE]:"Venezuela",[n._F.PY]:"Paraguay",[n._F.BR]:"Brazil",[n._F.CO]:"Colombia",[n._F.PE]:"Peru",[n._F.CL]:"Chile",[n._F.UY]:"Uruguay",[n._F.AR]:"Argentina",[n._F.GY]:"Guyana",[n._F.BO]:"Bolivia",[n._F.GF]:"French Guiana",[n._F.EC]:"Ecuador",[n._F.FK]:"Falkland Islands",[n._F.US_AL]:"Alabama",[n._F.US_AK]:"Alaska",[n._F.US_AZ]:"Arizona",[n._F.US_AR]:"Arkansas",[n._F.US_CA]:"California",[n._F.US_CO]:"Colorado",[n._F.US_CT]:"Connecticut",[n._F.US_DE]:"Delaware",[n._F.US_DC]:"District of Columbia (DC)",[n._F.US_FL]:"Florida",[n._F.US_GA]:"Georgia",[n._F.US_HI]:"Hawaii",[n._F.US_ID]:"Idaho",[n._F.US_IL]:"Illinois",[n._F.US_IN]:"Indiana",[n._F.US_IA]:"Iowa",[n._F.US_KS]:"Kansas",[n._F.US_KY]:"Kentucky",[n._F.US_LA]:"Louisiana",[n._F.US_ME]:"Maine",[n._F.US_MD]:"Maryland",[n._F.US_MA]:"Massachusetts",[n._F.US_MI]:"Michigan",[n._F.US_MN]:"Minnesota",[n._F.US_MS]:"Mississippi",[n._F.US_MO]:"Missouri",[n._F.US_MT]:"Montana",[n._F.US_NE]:"Nebraska",[n._F.US_NV]:"Nevada",[n._F.US_NH]:"New Hampshire",[n._F.US_NJ]:"New Jersey",[n._F.US_NM]:"New Mexico",[n._F.US_NY]:"New York",[n._F.US_NC]:"North Carolina",[n._F.US_ND]:"North Dakota",[n._F.US_OH]:"Ohio",[n._F.US_OK]:"Oklahoma",[n._F.US_OR]:"Oregon",[n._F.US_PA]:"Pennsylvania",[n._F.US_PR]:"Puerto Rico",[n._F.US_RI]:"Rhode Island",[n._F.US_SC]:"South Carolina",[n._F.US_SD]:"San Diego",[n._F.US_TN]:"Tennessee",[n._F.US_TX]:"Texas",[n._F.US_UT]:"Utah",[n._F.US_VA]:"Virginia",[n._F.US_VI]:"United States Virgin Islands",[n._F.US_VT]:"Vermon",[n._F.US_WA]:"Washington",[n._F.US_WV]:"West Virginia",[n._F.US_WI]:"Wisconsin",[n._F.US_WY]:"Wyoming",[n._F.CA_AB]:"Alberta",[n._F.CA_BC]:"British Columbia",[n._F.CA_MB]:"Manitoba",[n._F.CA_NB]:"New Brunswick",[n._F.CA_NL]:"Newfoundland and Labrador",[n._F.CA_NS]:"Nova Scotia",[n._F.CA_ON]:"Ontario",[n._F.CA_PE]:"Prince Edward Island",[n._F.CA_QC]:"Quebec",[n._F.CA_SK]:"Saskatchewan",[n._F.CA_NT]:"Northwest Territories",[n._F.CA_NU]:"Nunavut",[n._F.CA_YT]:"Yukon",[n._F.CA]:"Canada",[n._F.US]:"United States",[n._F.MEXICO_CENTRAL_AMERICA]:"Mexico and Central America",[n._F.CARIBBEAN]:"Caribbean",[n._F.EEA]:"European Economic Area (EEA)",[n._F.NON_EEA]:"Non European Economic Area"},l=new Map(Object.entries(i));Object.entries(i).map(e=>({value:e[0],label:e[1]}))},48515:function(e,a,_){var n,i;_.d(a,{O:function(){return n}}),(i=n||(n={})).ACKNOWLEDGE="acknowledge",i.OPT_IN_OPT_OUT="opt_in_opt_out"},60325:function(e,a,_){_.d(a,{DD:function(){return d},Go:function(){return o},TK:function(){return l},Uv:function(){return F},y3:function(){return u}});var n=_(21702),i=_(48515);let l=e=>{var a;return null!==(a=null==e?void 0:e.filter(e=>e.selected).map(e=>e.id))&&void 0!==a?a:[]},r=[{language:n.eU.EN,is_default:!0,title:"Title",description:"Description",accept_button_label:"Accept",reject_button_label:"Reject",save_button_label:"Save",acknowledge_button_label:"OK",privacy_preferences_link_label:"Privacy Preferences"}],d={name:"",disabled:!1,dismissable:!0,allow_language_selection:!1,show_layer1_notices:!1,layer1_button_options:i.O.OPT_IN_OPT_OUT,regions:[],translations:r,auto_detect_language:!0,auto_subdomain_cookie_deletion:!0},o=(e,a)=>{let _=a.find(a=>a.id===e.language);return _?_.name:e.language},t=e=>{var a,_,n,i,l,r,d,o,t;let{language:F,is_default:u,accept_button_label:c,reject_button_label:s}=e;return{language:F,is_default:u,accept_button_label:c,reject_button_label:s,title:e.title,description:e.description,acknowledge_button_label:null!==(a=e.acknowledge_button_label)&&void 0!==a?a:void 0,banner_title:null!==(_=e.banner_title)&&void 0!==_?_:void 0,banner_description:null!==(n=e.banner_description)&&void 0!==n?n:void 0,purpose_header:null!==(i=e.purpose_header)&&void 0!==i?i:void 0,privacy_policy_link_label:null!==(l=e.privacy_policy_link_label)&&void 0!==l?l:void 0,privacy_policy_url:null!==(r=e.privacy_policy_url)&&void 0!==r?r:void 0,privacy_preferences_link_label:null!==(d=e.privacy_preferences_link_label)&&void 0!==d?d:void 0,save_button_label:null!==(o=e.save_button_label)&&void 0!==o?o:void 0,modal_link_label:null!==(t=e.modal_link_label)&&void 0!==t?t:void 0}},F=e=>{let{created_at:a,updated_at:_,privacy_notices:n,origin:i,id:l,...r}=e;return{...r,privacy_notice_ids:n?n.map(e=>e.id):[],translations:e.translations?e.translations.map(e=>t(e)):[]}},u=e=>e===n.re.PRIVACY_CENTER?{title:{included:!0,required:!0},description:{included:!0,required:!0},save_button_label:{included:!0,required:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},modal_link_label:{included:!0}}:e===n.re.MODAL?{title:{included:!0,required:!0},description:{included:!0,required:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0},modal_link_label:{included:!0}}:e===n.re.BANNER_AND_MODAL?{title:{included:!0,required:!0},banner_title:{included:!0},description:{included:!0,required:!0},banner_description:{included:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0,required:!0},modal_link_label:{included:!0}}:e===n.re.TCF_OVERLAY?{title:{included:!0,required:!0},banner_title:{included:!0},description:{included:!0,required:!0},banner_description:{included:!0},purpose_header:{included:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0,required:!0},modal_link_label:{included:!0}}:{title:{included:!0,required:!0},description:{included:!0,required:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0,required:!0},modal_link_label:{included:!0}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5973],{7617:function(e,s,t){t.d(s,{q:function(){return a}});var i=t(24246),n=t(56351);let a=e=>{let{label:s,isDisabled:t,...a}=e;return(0,i.jsx)(n.OK9,{"data-testid":"tab-".concat(s),_selected:{fontWeight:"600",color:"complimentary.500",borderColor:"complimentary.500"},fontSize:a.fontSize,fontWeight:"500",color:"gray.500",isDisabled:t||!1,children:s})};s.Z=e=>{let{data:s,border:t="partial",...r}=e;return(0,i.jsxs)(n.mQc,{colorScheme:"complimentary",...r,children:[(0,i.jsx)(n.tdY,{width:"partial"===t?"max-content":void 0,children:s.map(e=>(0,i.jsx)(a,{label:e.label,isDisabled:e.isDisabled,fontSize:r.fontSize},e.label))}),(0,i.jsx)(n.nPR,{children:s.map(e=>(0,i.jsx)(n.x45,{px:0,"data-testid":"tab-panel-".concat(e.label),children:e.content},e.label))})]})}},18225:function(e,s,t){var i=t(24246),n=t(56351);s.Z=e=>{let{...s}=e;return(0,i.jsx)(n.kCb,{boxSize:"full",align:"center",justify:"center",children:(0,i.jsx)(n.$jN,{color:"primary",...s})})}},77213:function(e,s,t){t.d(s,{Z:function(){return u}});var i=t(24246),n=t(56351),a=t(88038),r=t.n(a),o=t(86677);t(27378);var c=t(25980),d=t(90867),l=t(77830),h=()=>{let e=(0,o.useRouter)();return(0,i.jsx)(n.xuv,{bg:"gray.50",border:"1px solid",borderColor:"blue.400",borderRadius:"md",justifyContent:"space-between",p:5,mb:5,mt:5,children:(0,i.jsxs)(n.xuv,{children:[(0,i.jsxs)(n.Kqy,{direction:{base:"column",sm:"row"},justifyContent:"space-between",children:[(0,i.jsx)(n.xvT,{fontWeight:"semibold",children:"Configure your storage and messaging provider"}),(0,i.jsx)(n.wpx,{onClick:()=>{e.push(l.fz)},children:"Configure"})]}),(0,i.jsxs)(n.xvT,{children:["Before Fides can process your privacy requests we need two simple steps to configure your storage and email client."," "]})]})})},u=e=>{let{children:s,title:t,padded:a=!0,mainProps:l}=e,u=(0,c.hz)(),x=(0,o.useRouter)(),m="/privacy-requests"===x.pathname||"/datastore-connection"===x.pathname,j=!(u.flags.privacyRequestsConfiguration&&m),{data:p}=(0,d.JE)(void 0,{skip:j}),{data:g}=(0,d.PW)(void 0,{skip:j}),y=u.flags.privacyRequestsConfiguration&&(!p||!g)&&m;return(0,i.jsxs)(n.kCb,{"data-testid":t,direction:"column",h:"100vh",children:[(0,i.jsxs)(r(),{children:[(0,i.jsxs)("title",{children:["Fides Admin UI - ",t]}),(0,i.jsx)("meta",{name:"description",content:"Privacy Engineering Platform"}),(0,i.jsx)("link",{rel:"icon",href:"/favicon.ico"})]}),(0,i.jsxs)(n.kCb,{as:"main",direction:"column",py:a?6:0,px:a?10:0,h:a?"calc(100% - 48px)":"full",flex:1,minWidth:0,overflow:"auto",...l,children:[y?(0,i.jsx)(h,{}):null,s]})]})}},58754:function(e,s,t){var i=t(24246),n=t(56351),a=t(70788);s.Z=e=>{let{heading:s,breadcrumbItems:t,isSticky:r=!0,children:o,rightContent:c,style:d,...l}=e;return(0,i.jsxs)("div",{...l,style:r?{position:"sticky",top:"-24px",paddingTop:"24px",paddingBottom:"24px",paddingLeft:"40px",marginLeft:"-40px",paddingRight:"40px",marginRight:"-40px",marginTop:"-24px",left:0,zIndex:20,backgroundColor:"white",...d}:{paddingBottom:"24px",...d},children:[(0,i.jsxs)(n.jqI,{justify:"space-between",children:["string"==typeof s?(0,i.jsx)(n.X6q,{className:t||o?"pb-4":void 0,fontSize:"2xl","data-testid":"page-heading",children:s}):s,c&&(0,i.jsx)("div",{"data-testid":"page-header-right-content",children:c})]}),!!t&&(0,i.jsx)(a.m,{className:o?"pb-4":void 0,items:t,"data-testid":"page-breadcrumb"}),o]})}},79789:function(e,s,t){t.d(s,{Hn:function(){return o},XU:function(){return r},Z5:function(){return c},aG:function(){return h},cB:function(){return a},hX:function(){return l},vQ:function(){return d}});var i=t(24246),n=t(56351);let a=e=>{let{text:s,...t}=e;return(0,i.jsx)(n.X6q,{fontSize:"sm",mt:4,mb:1,...t,children:s})},r=e=>{let{children:s}=e;return(0,i.jsx)(n.xvT,{fontSize:"14px",mb:4,children:s})},o=e=>{let{children:s,href:t}=e;return(0,i.jsx)(n.rUS,{href:t,textDecoration:"underline",isExternal:!0,children:s})},c=e=>{let{children:s}=e;return(0,i.jsx)(n.QI$,{fontSize:"14px",mb:4,children:s})},d=e=>{let{children:s}=e;return(0,i.jsx)(n.GSI,{fontSize:"14px",mb:4,ml:6,children:s})},l=e=>{let{children:s}=e;return(0,i.jsx)(n.EKh,{display:"block",whiteSpace:"pre",p:4,mb:4,overflowX:"scroll",children:s})},h=e=>{let{data:s}=e;return(0,i.jsxs)(n.iA_,{fontSize:"14px",children:[(0,i.jsx)(n.hrZ,{children:(0,i.jsxs)(n.Tr,{children:[(0,i.jsx)(n.Th,{children:"Permission"}),(0,i.jsx)(n.Th,{children:"Description"})]})}),(0,i.jsx)(n.p3B,{children:s.map(e=>(0,i.jsxs)(n.Tr,{children:[(0,i.jsx)(n.Td,{children:(0,i.jsx)(n.Vp9,{children:e.permission})}),(0,i.jsx)(n.Td,{children:e.description})]},e.permission))})]})}},8133:function(e,s,t){var i=t(24246),n=t(56351);s.Z=e=>{let{title:s,children:t,isOpen:a,onClose:r,...o}=e;return(0,i.jsxs)(n.u_l,{isOpen:a,onClose:r,isCentered:!0,scrollBehavior:"inside",size:"xl",id:"add-modal",...o,children:[(0,i.jsx)(n.ZAr,{}),(0,i.jsxs)(n.hzk,{textAlign:"left",p:0,"data-testid":"add-modal-content",children:[(0,i.jsx)(n.xBx,{p:0,children:(0,i.jsx)(n.xuv,{backgroundColor:"gray.50",px:6,py:4,border:"1px",borderColor:"gray.200",borderTopRadius:6,display:"flex",justifyContent:"space-between",alignItems:"center",children:(0,i.jsx)(n.X6q,{as:"h3",size:"sm",children:s})})}),(0,i.jsx)(n.fef,{pb:4,overflow:"auto",children:t})]})]})}},70788:function(e,s,t){t.d(s,{m:function(){return d}});var i=t(24246),n=t(56351),a=t(79894),r=t.n(a),o=t(27378);let{Text:c}=n.AntTypography,d=e=>{let{items:s,...t}=e,a=(0,o.useMemo)(()=>null==s?void 0:s.map((e,t)=>{let a=t===s.length-1,o={...e},d=o.onClick&&!o.href;return("string"==typeof o.title&&(o.title=(0,i.jsx)(c,{style:{color:"inherit",maxWidth:a?void 0:400},ellipsis:!a,children:o.title})),d)?o.title=(0,i.jsx)(n.wpx,{type:"text",size:"small",icon:o.icon,onClick:o.onClick,className:"ant-breadcrumb-link -mt-px px-1 text-inherit",children:o.title}):(o.icon&&(o.title=(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("span",{className:"anticon align-text-bottom",children:o.icon}),o.title]})),o.href&&o.title&&(o.title=(0,i.jsx)(r(),{href:o.href,className:"ant-breadcrumb-link",children:o.title}),delete o.href)),o}),[s]);return(0,i.jsx)(n.zrq,{items:a,...t})}},41337:function(e,s,t){var i=t(24246),n=t(56351);t(27378);var a=t(21702),r=t(14746);let o=e=>void 0!==e.connection_type,c=e=>void 0!==e.encoded_icon;s.Z=e=>{let{data:s,...t}=e;return(0,i.jsx)(n.Eep,{boxSize:"32px",objectFit:"cover",src:(()=>{let e;if(c(s)&&s.encoded_icon)return"data:image/svg+xml;base64,".concat(s.encoded_icon);if(o(s))e=[...r.iW].find(e=>{var t,i;let[n]=e;return s.connection_type.toString()!==a.Rj.SAAS&&s.connection_type.toString()===n||s.connection_type.toString()===a.Rj.SAAS&&(null===(i=s.saas_config)||void 0===i?void 0:null===(t=i.type)||void 0===t?void 0:t.toString())===n.toString()});else if(c(s)){let{identifier:t}=s;e=[...r.iW].find(e=>{let[s]=e;return s.toLowerCase()===t.toLowerCase()})}return e?r.Ny+e[1]:r.VD})(),fallbackSrc:r.VD,alt:(()=>{if(o(s)){var e;return null!==(e=s.name)&&void 0!==e?e:s.key}return c(s)?s.human_readable:s})(),...t})}},15872:function(e,s,t){var i=t(24246),n=t(56351),a=t(86677);t(27378);var r=t(77830),o=t(14207);s.Z=e=>{let{connection_key:s,showMenu:t}=e,{isOpen:c,onOpen:d,onClose:l}=(0,n.qY0)(),[h,u]=(0,o.R5)(),x=(0,a.useRouter)(),m=()=>{u.isLoading||l()};return(0,i.jsxs)(i.Fragment,{children:[t&&(0,i.jsx)(n.sNh,{_focus:{color:"complimentary.500",bg:"gray.100"},onClick:d,children:(0,i.jsx)(n.xvT,{fontSize:"sm",children:"Delete"})}),!t&&(0,i.jsx)(n.wpx,{onClick:d,children:"Delete integration"}),(0,i.jsxs)(n.u_l,{isCentered:!0,isOpen:c,onClose:m,children:[(0,i.jsx)(n.ZAr,{}),(0,i.jsxs)(n.hzk,{children:[(0,i.jsx)(n.xBx,{children:"Delete integration"}),(0,i.jsx)(n.olH,{}),(0,i.jsx)(n.fef,{pb:6,children:(0,i.jsx)(n.Kqy,{direction:"column",spacing:"15px",children:(0,i.jsx)(n.xvT,{color:"gray.600",fontSize:"sm",fontWeight:"sm",lineHeight:"20px",children:"Deleting an integration may impact any privacy request that is currently in progress. Do you wish to proceed?"})})}),(0,i.jsxs)(n.mzw,{className:"flex gap-4",children:[(0,i.jsx)(n.wpx,{onClick:m,className:"w-1/2",children:"Cancel"}),(0,i.jsx)(n.wpx,{onClick:()=>{s&&(h(s),t||x.push(r.KH))},loading:u.isLoading,type:"primary",className:"w-1/2",children:"Delete integration"})]})]})]})]})}},3968:function(e,s,t){t.d(s,{E:function(){return i},S:function(){return n}});let i=e=>e.toLowerCase().replace(/ /g,"_"),n=(e,s)=>{let t="".concat(window.location.origin+s,"&key=").concat(e);window.location.href.toLowerCase()!==t.toLowerCase()&&window.history.replaceState(null,"",t)}},45216:function(e,s,t){var i=t(56351),n=t(812),a=t(16394),r=t(14207);s.Z=e=>{let[s,{data:t,fulfilledTimeStamp:o,isLoading:c,isFetching:d}]=(0,r.h2)(),l=(0,i.pmc)();return{testConnection:async()=>{var t,i;if(!e)return;let a=await s(e.key);a.isError?l({status:"error",description:(0,n.e$)(a.error,"Unable to test connection. Please try again.")}):(null===(t=a.data)||void 0===t?void 0:t.test_status)==="succeeded"?l({status:"success",description:"Connected successfully"}):(null===(i=a.data)||void 0===i?void 0:i.test_status)==="failed"&&l({status:"warning",description:"Connection test failed"})},isLoading:c||d,testData:{timestamp:o?(0,a.p6)(o):null==e?void 0:e.last_test_timestamp,succeeded:t?"succeeded"===t.test_status:!!(null==e?void 0:e.last_test_succeeded)}}}},41553:function(e,s,t){var i=t(24246),n=t(56351),a=t(16394);s.Z=e=>{let{testData:s}=e;if(!s.timestamp)return(0,i.jsx)(n.xvT,{"data-testid":"connection-status",children:"Connection not tested"});let t=(0,a.p6)(s.timestamp);return s.succeeded?(0,i.jsxs)(n.kCb,{color:"success-text.900",align:"center","data-testid":"connection-status",children:[(0,i.jsx)(n.rE2,{mr:2,boxSize:4}),(0,i.jsxs)(n.xvT,{children:["Last connected ",t]})]}):(0,i.jsxs)(n.kCb,{color:"error-text.900",align:"center","data-testid":"connection-status",children:[(0,i.jsx)(n.iid,{mr:2,boxSize:4}),(0,i.jsxs)(n.xvT,{children:["Last connection failed ",t]})]})}},75595:function(e,s,t){var i=t(24246),n=t(56351),a=t(41337),r=t(15872),o=t(45216),c=t(7621),d=t(41553);s.Z=e=>{let{integration:s,showTestNotice:t,otherButtons:l,showDeleteButton:h,configureButtonLabel:u="Configure",onConfigureClick:x}=e,{testConnection:m,isLoading:j,testData:p}=(0,o.Z)(s),g=(0,c.ZP)(null==s?void 0:s.connection_type);return(0,i.jsxs)(n.xuv,{maxW:"760px",borderWidth:1,borderRadius:"lg",overflow:"hidden",padding:"12px",marginBottom:"24px","data-testid":"integration-info-".concat(null==s?void 0:s.key),children:[(0,i.jsxs)(n.kCb,{children:[(0,i.jsx)(a.Z,{data:null!=s?s:"",boxSize:"50px"}),(0,i.jsxs)(n.kCb,{direction:"column",flexGrow:1,marginLeft:"16px",children:[(0,i.jsx)(n.xvT,{color:"gray.700",fontWeight:"semibold",children:(null==s?void 0:s.name)||"(No name)"}),t?(0,i.jsx)(d.Z,{testData:p}):(0,i.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"semibold",mt:1,children:g.category})]}),(0,i.jsxs)("div",{className:"flex gap-4",children:[h&&s&&(0,i.jsx)(r.Z,{showMenu:!1,connection_key:s.key}),t&&(0,i.jsx)(n.wpx,{onClick:m,loading:j,"data-testid":"test-connection-btn",children:"Test connection"}),l,x&&(0,i.jsx)(n.wpx,{onClick:x,"data-testid":"configure-btn",children:u})]})]}),(0,i.jsx)(n.Eq9,{marginTop:"16px",children:g.tags.map(e=>(0,i.jsx)(n.j8w,{children:e},e))})]})}},15987:function(e,s,t){var i=t(24246),n=t(56351),a=t(34090),r=t(90104),o=t.n(r),c=t(92465),d=t.n(c),l=t(25389),h=t.n(l),u=t(15539),x=t.n(u),m=t(59389),j=t(18225),p=t(97181),g=t(40324),y=t(812),v=t(20682),f=t(94725),S=t(3968),C=t(1315),A=t(21702),b=t(31883);s.Z=e=>{var s,t;let{connection:r,connectionOption:c,onCancel:l}=e,[u,{isLoading:D}]=(0,f.Pp)(),[w,{isLoading:R}]=(0,f.pH)(),[E,{isLoading:_}]=(0,C.qd)(),{data:T,isLoading:H}=(0,v.n3)(c.identifier),{data:B}=(0,C.K3)(),F=null==B?void 0:B.map(e=>{var s;return{label:null!==(s=e.name)&&void 0!==s?s:e.fides_key,value:e.fides_key}}),L=D||R||_,k={name:null!==(s=null==r?void 0:r.name)&&void 0!==s?s:"",description:null!==(t=null==r?void 0:r.description)&&void 0!==t?t:"",secrets:h()(null==T?void 0:T.properties,(e,s)=>{var t,i;return null!==(i=null==r?void 0:null===(t=r.secrets)||void 0===t?void 0:t[s])&&void 0!==i?i:""})},I=(0,n.pmc)(),O=!!r,M=e=>x()(h()(e,(e,s)=>{var t,i;return(null!==(i=null==r?void 0:null===(t=r.secrets)||void 0===t?void 0:t[s])&&void 0!==i?i:"")===e?void 0:e}),d()),U=async e=>{var s;let t;let i=M(e.secrets),n=O?{...r,disabled:null!==(s=r.disabled)&&void 0!==s&&s,name:e.name,description:e.description,secrets:void 0}:{name:e.name,key:(0,S.E)(e.name),connection_type:c.identifier,access:A.uv.READ,disabled:!1,description:e.description,secrets:e.secrets};if(t=e.system_fides_key?await E({systemFidesKey:e.system_fides_key,connectionConfigs:[n]}):await w(n),(0,b.D4)(t)){I({status:"error",description:(0,y.e$)(t.error,"A problem occurred while ".concat(O?"updating":"creating"," this integration. Please try again."))});return}if(!e.secrets){I({status:"success",description:"Integration ".concat(O?"updated":"created"," successfully")});return}if(!o()(i)){let e=await u({connection_key:n.key,secrets:i});if((0,b.D4)(e)){I({status:"error",description:(0,y.e$)(e.error,"An error occurred while ".concat(O?"updating":"creating"," this integration's secret. Please try again."))});return}}I({status:"success",description:"Integration secret ".concat(O?"updated":"created"," successfully")}),l()};if(H)return(0,i.jsx)(j.Z,{});let q=e=>Object.entries(e.properties).map(s=>{let[t,n]=s,a="secrets.".concat(t);return(0,i.jsx)(g.j0,{name:a,id:a,type:n.sensitive?"password":void 0,label:n.title,isRequired:e.required.includes(t),tooltip:n.description,variant:"stacked"},a)});return(0,i.jsx)(a.J9,{initialValues:k,enableReinitialize:!0,onSubmit:U,validationSchema:(e=>{let s=Object.entries(e.properties).map(s=>{let[t,i]=s;return[t,e.required.includes(t)?m.Z_().required().label(i.title):m.Z_().nullable().label(i.title)]});return m.Ry().shape({name:m.Z_().required().label("Name"),description:m.Z_().nullable().label("Description"),secrets:m.Ry().shape(Object.fromEntries(s))})})(T),children:e=>{let{dirty:s,isValid:t,resetForm:r}=e;return(0,i.jsx)(a.l0,{children:(0,i.jsxs)(n.gCW,{alignItems:"start",spacing:6,mt:4,children:[(0,i.jsx)(g.j0,{id:"name",name:"name",label:"Name",variant:"stacked",isRequired:!0}),(0,i.jsx)(g.j0,{id:"description",name:"description",label:"Description",variant:"stacked"}),q(T),!O&&(0,i.jsx)(p.d,{id:"system_fides_key",name:"system_fides_key",options:null!=F?F:[],label:"System",tooltip:"The system to associate with the integration",layout:"stacked"}),(0,i.jsxs)("div",{className:"flex w-full justify-between",children:[(0,i.jsx)(n.wpx,{onClick:()=>{l(),r()},children:"Cancel"}),(0,i.jsx)(n.wpx,{htmlType:"submit",type:"primary",disabled:!s||!t,loading:L,"data-testid":"save-btn",children:"Save"})]})]})})}})}},7621:function(e,s,t){t.d(s,{FO:function(){return _},jq:function(){return T},ZP:function(){return B}}),(i=n||(n={})).DATA_CATALOG="Data Catalog",i.DATA_WAREHOUSE="Data Warehouse",i.DATABASE="Database",i.WEBSITE="Website";var i,n,a=t(24246),r=t(56351),o=t(79789),c=e=>{let{children:s}=e,{isOpen:t,onToggle:i}=(0,r.qY0)();return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.UO1,{in:t,children:s}),(0,a.jsx)(r.xvT,{fontSize:"sm",cursor:"pointer",textDecoration:"underline",onClick:i,children:t?"Show less":"Show more"})]})},d=t(21702);let l={name:"Google BigQuery",key:"bq_placeholder",connection_type:d.Rj.BIGQUERY,access:d.uv.READ,created_at:""},h=[{permission:"bigquery.jobs.create",description:"Run jobs (e.g. queries) within the project. This is only needed for the Fides Project where the Fides service account is located."},{permission:"bigquery.jobs.list",description:"Manage the queries that the service account performs. This is only needed for the Fides Project where the Fides service account is located."},{permission:"bigquery.routines.get",description:"Allow the service account to retrieve custom routines (e.g. queries) on associated datasets and tables."},{permission:"bigquery.routines.list",description:"Allow the service account to manage the custom routines (e.g. queries) that run on associated datasets and tables."}],u=[{permission:"bigquery.datasets.get",description:"Retrieve metadata and list tables for the specified project."},{permission:"bigquery.tables.get",description:"Retrieve metadata for the specified table."},{permission:"bigquery.tables.getData",description:"Read data in the specified table."},{permission:"bigquery.tables.list",description:"List all tables in the specified dataset."},{permission:"resourcemanager.projects.get",description:"Retrieve metadata for the specified project."}],x={placeholder:l,category:n.DATA_WAREHOUSE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Continuously monitor BigQuery to detect and track schema-level changes, automatically discover and label data categories as well as automatically process DSR (privacy requests) and consent enforcement to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Data Warehouse"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Cloud provider"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"}),(0,a.jsx)(r.HCh,{children:"DSR automation"}),(0,a.jsx)(r.HCh,{children:"Consent orchestration"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detection and discovery, Fides requires a read-only BigQuery service account with limited permissions. If you intend to automate governance for DSR or Consent, Fides requires a read-and-write BigQuery service account to any project you would like Fides to govern."}),(0,a.jsx)(o.XU,{children:"A BigQuery administrator can create the necessary role for Fides using BigQuery's roles guide and assign this to a service account using BigQuery's service account guide."}),(0,a.jsx)(o.XU,{children:"The permissions allow Fides to read the schema of, and data stored in projects, datasets and tables as well write restricted updates based on your policy configurations to tables you specify as part of DSR and Consent orchestration."}),(0,a.jsx)(o.cB,{text:"Permissions list"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"bigquery.jobs.create"}),(0,a.jsx)(r.HCh,{children:"bigquery.jobs.list"}),(0,a.jsx)(r.HCh,{children:"bigquery.routines.get"}),(0,a.jsx)(r.HCh,{children:"bigquery.routines.list"}),(0,a.jsx)(r.HCh,{children:"bigquery.datasets.get"}),(0,a.jsx)(r.HCh,{children:"bigquery.tables.get"}),(0,a.jsx)(r.HCh,{children:"bigquery.tables.getData"}),(0,a.jsx)(r.HCh,{children:"bigquery.tables.list"}),(0,a.jsx)(r.HCh,{children:"bigquery.tables.updateData"}),(0,a.jsx)(r.HCh,{children:"resourcemanager.projects.get"})]})]})]}),{}),instructions:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Configuring a Fides -> BigQuery Integration"}),(0,a.jsx)(o.cB,{text:"Step 1: Create a Fides project"}),(0,a.jsxs)(o.XU,{children:["Create a Fides Project using"," ",(0,a.jsx)(o.Hn,{href:"https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project",children:"BigQuery's project creation guide"}),"."]}),(0,a.jsx)(o.cB,{text:"Step 2: Create a Fides role in GCP"}),(0,a.jsxs)(o.vQ,{children:[(0,a.jsxs)(r.HCh,{children:["Create a custom role for Fides using BigQuery's"," ",(0,a.jsx)(o.Hn,{href:"https://cloud.google.com/iam/docs/creating-custom-roles#creating_a_custom_role",children:"roles guide"}),"."]}),(0,a.jsx)(r.HCh,{children:"Follow the sections below to grant permissions to this role for the Fides project and any project you would like Fides to manage."})]}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Step 3: Assign permissions to the Fides project"}),(0,a.jsx)(o.XU,{children:"Assign the following permissions to the Fides Project that will be used by your Fides service account to run queries:"}),(0,a.jsx)(o.aG,{data:h}),(0,a.jsx)(o.cB,{text:"Step 4: Assign permissions to any project you’d like Fides to monitor"}),(0,a.jsx)(o.XU,{children:"Grant the following permissions to the Fides service account in every project where you would like Fides detection and discovery monitoring."}),(0,a.jsx)(o.aG,{data:u}),(0,a.jsx)(o.cB,{text:"Step 5: Create a Fides service account in the Fides Project"}),(0,a.jsxs)(o.vQ,{children:[(0,a.jsxs)(r.HCh,{children:["Create a service account for Fides using BigQuery's"," ",(0,a.jsx)(o.Hn,{href:"https://cloud.google.com/iam/docs/service-accounts-create",children:"service account guide"}),"."]}),(0,a.jsx)(r.HCh,{children:"Assign the previously created role to this service account."}),(0,a.jsxs)(r.HCh,{children:["Download the service account JSON keyfile."," ",(0,a.jsx)("strong",{children:"Note: this is sensitive information that should not be shared."})," ","An example of this is below:"]})]}),(0,a.jsx)(o.hX,{children:'{\n "type": "service_account",\n "project_id": "project-id-123456",\n "private_key_id": "0123456789abcdef0123456789abcdef01234567",\n "private_key": "-----BEGIN PRIVATE KEY-----\\nMIIyourkey-----\\nEND PRIVATE KEY-----\\n",\n "client_email": "test@project-id-123456.iam.gserviceaccount.com",\n "client_id": "012345678901234567890",\n "auth_uri": "https://accounts.google.com/o/oauth2/auth",\n "token_uri": "https://oauth2.googleapis.com/token",\n "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",\n "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test%40project-id-123456.iam.gserviceaccount.com"\n}'}),(0,a.jsx)(o.cB,{text:"Step 6: Use the JSON key to authenticate your integration"}),(0,a.jsx)(o.XU,{children:"Provide the JSON key to your Fides instance to securely connect Fides."})]})]}),{}),tags:["Data Warehouse","BigQuery","Discovery","Inventory"]},m={placeholder:{name:"Datahub",key:"datahub_placeholder",connection_type:d.Rj.DATAHUB,access:d.uv.READ,created_at:""},category:n.DATA_CATALOG,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"DataHub is a metadata platform designed to help organizations manage and govern their data. It acts as a centralized repository for tracking and discovering data assets across an organization, helping data teams understand where their data resides, how it's used, and how it flows through various systems."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsx)(o.Z5,{children:(0,a.jsx)(r.HCh,{children:"Data Catalog"})}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.Z5,{children:(0,a.jsx)(r.HCh,{children:"Placeholder"})})]})]}),{}),tags:["Data catalog"]},j={name:"DynamoDB",key:"dynamo_placeholder",connection_type:d.Rj.DYNAMODB,access:d.uv.READ,created_at:""},p=[{permission:"AmazonDynamoDBReadOnlyAccess",description:"Provides read-only access to Amazon DynamoDB via the AWS Management Console."},{permission:"AmazonDynamoDBFullAccess",description:"Provides full access to Amazon DynamoDB via the AWS Management Console. Only needed if automating governance for DSR or Consent."}],g={placeholder:j,category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Continuously monitor DynamoDB to detect and track schema-level changes, automatically discover and label data categories as well as automatically process DSR (privacy requests) and consent enforcement to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"NoSQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Cloud provider"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions and Policies"}),(0,a.jsxs)(o.XU,{children:["For detection and discovery, Fides requires an IAM user with read-only DynamoDB permissions in order to detect, discover, and classify sensitive data. The AWS-managed"," ",(0,a.jsx)(r.EKh,{children:"AmazonDynamoDBReadOnlyAccess"})," policy can be used to assign these permissions. If you intend to automate governance for DSR or Consent, Fides requires an IAM user with read-and-write DynamoDB permissions. The AWS-managed",(0,a.jsx)(r.EKh,{children:"AmazonDynamoDBFullAccess"})," policy can be used to assign these permissions. An IAM administrator can create the necessary principal for Fides using the AWS IAM guides, and assign the appropriate permissions policy to the IAM user."]}),(0,a.jsx)(o.XU,{children:"The permissions allow Fides to read the schema of, and data stored in, DynamoDB tables. This data is inspected only for the purpose of detecting sensitive data risks and no data is stored by Fides. As part of DSR or Consent orchestration, Fides will only write restricted updates to the tables specified by your Fides policy configuration."}),(0,a.jsx)(o.cB,{text:"Policy List"}),(0,a.jsx)(o.XU,{children:"The following AWS-managed policies provide the necessary permissions for Fides:"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"AmazonDynamoDBReadOnlyAccess"}),(0,a.jsx)(r.HCh,{children:"AmazonDynamoDBFullAccess (only needed if automating governance for DSR or Consent)"})]})]})]}),{}),instructions:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Configuring a Fides -> DynamoDB Integration"}),(0,a.jsx)(o.cB,{text:"Step 1: Create an IAM user in AWS"}),(0,a.jsxs)(o.XU,{children:["Create an IAM user for Fides' DynamoDB access following the"," ",(0,a.jsx)(o.Hn,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html#getting-started-iam-user",children:"AWS IAM user guide"}),"."]}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Step 2: Assign policies to the IAM user"}),(0,a.jsx)(o.XU,{children:"Grant the necessary permissions to the IAM user by attaching directly the appropriate AWS-managed policy for your use case:"}),(0,a.jsx)(o.aG,{data:p}),(0,a.jsx)(o.cB,{text:"Step 3: Create an access key for the IAM user"}),(0,a.jsxs)(o.vQ,{children:[(0,a.jsxs)(r.HCh,{children:["Create an access key for the IAM user under"," ",(0,a.jsx)("strong",{children:"Security credentials"})]}),(0,a.jsx)(r.HCh,{children:"Select the Other use case"}),(0,a.jsx)(r.HCh,{children:"Copy the Access Key ID and Secret Access Key"})]}),(0,a.jsx)(o.cB,{text:"Use the Credentials to Authenticate Your Integration"}),(0,a.jsx)(o.XU,{children:"Provide the credentials to your Fides instance to securely connect Fides."})]})]}),{}),tags:["Database","DynamoDB","Discovery","Inventory"]},y={placeholder:{name:"Google Cloud SQL for MySQL",key:"google_cloud_sql_for_mysql_placeholder",connection_type:d.Rj.GOOGLE_CLOUD_SQL_MYSQL,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Google Cloud SQL for MySQL is a fully-managed relational database service that simplifies the setup, maintenance, management, and administration of MySQL databases. Connect Fides to your Google Cloud SQL for MySQL to detect and track changes in schemas and tables and automatically discover and label data categories to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"}),(0,a.jsx)(r.HCh,{children:"DSR automation"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detection and discovery, Fides requires a user with the SELECT permission on the database. If you intend to automate governance for DSR or Consent, Fides requires a user with the SELECT, UPDATE, and DELETE The permissions allow Fides to read the schema of, and data stored in tables, and fields as well as write restricted updates based on your policy configurations to tables you specify as part of DSR and Consent orchestration. For a complete list of permissions view the Google Cloud SQL for MySQL DB documentation."}),(0,a.jsx)(o.cB,{text:"Permissions list"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"GRANT SELECT"}),(0,a.jsx)(r.HCh,{children:"GRANT UPDATE"}),(0,a.jsx)(r.HCh,{children:"GRANT DELETE"})]})]})]}),{}),tags:["Database","Detection","Discovery","DSR automation","GCP","MySQL"]},v={placeholder:{name:"Google Cloud SQL for Postgres",key:"google_cloud_sql_for_postgres_placeholder",connection_type:d.Rj.GOOGLE_CLOUD_SQL_POSTGRES,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Google Cloud SQL for Postgres is a fully-managed relational database service that simplifies the setup, maintenance, management, and administration of Postgres databases. Connect Fides to your Google Cloud SQL for Postgres to detect and track changes in schemas and tables and automatically discover and label data categories to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"}),(0,a.jsx)(r.HCh,{children:"DSR automation"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detection and discovery, Fides requires a user with the SELECT permission on the database. If you intend to automate governance for DSR or Consent, Fides requires a user with the SELECT, UPDATE, and DELETE permission. The permissions allow Fides to read the schema of, and data stored in tables, and fields as well as write restricted updates based on your policy configurations to tables you specify as part of DSR and orchestration. For a complete list of permissions view the Google Cloud SQL for Postgres DB documentation."}),(0,a.jsx)(o.XU,{children:"The following GCP service account permissions are needed when setting up Google Cloud SQL for Postgres."}),(0,a.jsx)(o.cB,{text:"Permissions list"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"cloudsql.instances.connect"}),(0,a.jsx)(r.HCh,{children:"cloudsql.instances.get"}),(0,a.jsx)(r.HCh,{children:"cloudsql.instances.login"})]})]})]}),{}),tags:["Database","Detection","Discovery","DSR automation","GCP","Postgres"]},f={placeholder:{name:"Microsoft SQL Server",key:"microsoft_sql_server_placeholder",connection_type:d.Rj.MSSQL,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Microsoft SQL Server, is a relational database management system (RDBMS) developed by Microsoft. It is designed to store, manage, and retrieve data as requested by other software applications, which may run either on the same computer or across a network."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detecting databases, Fides requires a user with the following permissions/role:"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"CREATE LOGIN username WITH PASSWORD = 'password';"}),(0,a.jsx)(r.HCh,{children:"GRANT SELECT, INSERT, UPDATE TO username;"})]})]})]}),{}),tags:["Database","Detection","Discovery","Microsoft SQL Server"]},S={placeholder:{name:"MySQL",key:"mysql_placeholder",connection_type:d.Rj.MYSQL,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Add infotext"}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detecting databases, Fides requires a user with the following permissions/role:"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"CREATE USER 'username' IDENTIFIED WITH authentication_plugin BY 'password';"}),(0,a.jsx)(r.HCh,{children:"GRANT SELECT, INSERT ON database.* TO 'username'@'%';"})]})]})]}),{}),tags:["Database","Detection","Discovery","MySQL"]},C={placeholder:{name:"Amazon RDS MySQL",key:"rds_mysql_placeholder",connection_type:d.Rj.RDS_MYSQL,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Amazon RDS MySQL is a fully-managed relational database service that simplifies the setup, maintenance, management, and administration of MySQL databases. Connect Fides to your Amazon RDS MySQL to detect and track changes in schemas and tables and automatically discover and label data categories to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detecting database RDS instances and clusters, Fides requires an IAM user with the following permissions/role:"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"rds:DescribeDBClusters"}),(0,a.jsx)(r.HCh,{children:"rds:DescribeDBInstances"}),(0,a.jsx)(r.HCh,{children:"rds-db:connect"})]}),(0,a.jsx)(o.XU,{children:"And per database instance and database it requires the following permissions, where 'username' is the user set up for Fides, and 'database' is the database name, you want to connect to."}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"CREATE USER 'username' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';"}),(0,a.jsx)(r.HCh,{children:"GRANT SELECT, INSERT ON database.* TO 'username'@'%';"})]})]})]}),{}),tags:["Database","Detection","Discovery","RDS","MySQL"]},A={placeholder:{name:"Amazon RDS Postgres",key:"rds_postgres_placeholder",connection_type:d.Rj.RDS_POSTGRES,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Amazon RDS Postgres is a fully-managed relational database service that simplifies the setup, maintenance, management, and administration of Postgres databases. Connect Fides to your Amazon RDS Postgres to detect and track changes in schemas and tables and automatically discover and label data categories to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detecting database RDS instances and clusters, Fides requires an IAM user with the following permissions/role:"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"rds:DescribeDBClusters"}),(0,a.jsx)(r.HCh,{children:"rds:DescribeDBInstances"}),(0,a.jsx)(r.HCh,{children:"rds-db:connect"})]}),(0,a.jsx)(o.XU,{children:"For each database instance and database, Fides requires the following permissions, where 'username' is the user set up for Fides, and 'database' is the name of the database you want to connect to."}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"CREATE USER username WITH LOGIN;"}),(0,a.jsx)(r.HCh,{children:"GRANT rds_iam TO username;"}),(0,a.jsx)(r.HCh,{children:"GRANT SELECT ON ALL TABLES IN SCHEMA public TO username;"}),(0,a.jsx)(r.HCh,{children:"GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO username;"})]})]})]}),{}),tags:["Database","Detection","Discovery","RDS","Postgres"]},b={placeholder:{name:"Amazon S3",key:"s3_placeholder",connection_type:d.Rj.S3,access:d.uv.READ,created_at:""},category:n.DATA_WAREHOUSE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Continuously monitor S3 to detect and track schema-level changes, automatically discover and label data categories as well as automatically process DSR (privacy requests) and consent enforcement to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Object storage"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Cloud provider"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"Fides requires an IAM principal with read-only S3 permissions in order to detect, discover, and classify sensitive data. The AWS-managed AmazonS3ReadOnlyAccess policy can be used to assign these permissions. An IAM administrator can create the necessary principal for Fides using the AWS IAM guides, and assign the appropriate permissions policy to the IAM principal."}),(0,a.jsx)(o.XU,{children:"The permissions allow Fides to list buckets and read object data data stored in those buckets. This data is inspected only for the purpose of detecting sensitive data risks and no data is stored by Fides."}),(0,a.jsx)(o.XU,{children:"Ethyca recommends creating an IAM role with the appropriate permissions, which will be assumed by Fides at runtime, with ephemeral credentials. There must also be an IAM user with fixed credentials that Fides uses strictly for assuming the IAM role with the appropriate permissions. If desired, Fides also supports authenticating directly as an IAM user with the appropriate permissions, but this is considered a less secure option."}),(0,a.jsx)(o.cB,{text:"Permissions list"}),(0,a.jsx)(o.Z5,{children:(0,a.jsx)(r.HCh,{children:"AmazonS3ReadOnlyAccess"})})]})]}),{}),instructions:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Configuring a Fides -> Amazon S3 Integration"}),(0,a.jsx)(o.cB,{text:"Step 1: Create an IAM role in AWS"}),(0,a.jsx)(o.XU,{children:"Create an IAM role for Fides' S3 access following the AWS IAM roles guide. This role will be referred to below as the Fides S3 Access Role."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Step 2: Assign policies to the IAM role"}),(0,a.jsx)(o.XU,{children:"Grant the necessary permissions to the IAM role by attaching the following AWS-managed policy:"}),(0,a.jsx)(o.aG,{data:[{permission:"AmazonS3ReadOnlyAccess",description:"Provides read-only access to all buckets via the AWS Management Console."}]}),(0,a.jsx)(o.cB,{text:"Step 3: Create an IAM user for assuming a role"}),(0,a.jsxs)(o.XU,{children:["Follow the ",(0,a.jsx)(o.Hn,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html#getting-started-iam-user",children:"AWS guide"})," for creating an IAM user to create an IAM user that Fides will authenticate as in order to assume the Fides S3 Access Role created above, and retrieve ephemeral credentials."]}),(0,a.jsx)(o.cB,{text:"Step 4: Grant the IAM user permission to assume the Fides S3 Access Role"}),(0,a.jsx)(o.XU,{children:"Navigate to the IAM user’s Permissions page and add a permission by creating an inline policy. This permission should grant the IAM user permission to assume the Fides S3 Access Role created above (you’ll need to retrieve the role ARN). The inline policy should look similar to this:"}),(0,a.jsx)(o.hX,{children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "VisualEditor0",\n "Effect": "Allow",\n "Action": "sts:AssumeRole",\n "Resource": "arn:aws:iam::[AWS ACCOUNT NUMBER]:role/[Fides S3 Access Role ARN]"\n }\n ]\n}'}),(0,a.jsx)(o.cB,{text:"Step 5: Create an access key for the IAM user"}),(0,a.jsxs)(o.vQ,{children:[(0,a.jsxs)(r.HCh,{children:["Create an access key for the IAM user under"," ",(0,a.jsx)("strong",{children:"Security credentials"}),"."]}),(0,a.jsx)(r.HCh,{children:"Select the Other use case"}),(0,a.jsx)(r.HCh,{children:"Copy the Access Key ID and Secret Access Key"})]}),(0,a.jsx)(o.cB,{text:"Step 6: Use the credentials to authenticate your integration"}),(0,a.jsxs)(o.XU,{children:["Provide the credentials to your Fides instance to securely connect Fides. For the Assume Role ARN, provide the ARN for the Fides S3 Access Role created in step 1."," "]})]})]}),{}),tags:["Data Warehouse","S3","Detection","Discovery"]},D={placeholder:{name:"Scylla",key:"scylla_placeholder",connection_type:d.Rj.SCYLLA,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"ScyllaDB is an open-sources distributed NoSQL data store designed to be compatible with Apache Cassandra. Connect Fides to your ScyllaDB to detect and track changes in keyspaces and tables and automatically discover and label data categories to proactively manage data governance risks."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"NoSQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"}),(0,a.jsx)(r.HCh,{children:"DSR automation"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsx)(o.XU,{children:"For detection and discovery, Fides requires a user with the SELECT permission on all keyspaces. If you intend to automate governance for DSR or Consent, Fides requires the role to to be granted SELECT and MODIFY on all keyspaces. The permissions allow Fides to read the schema of, and data stored in keyspaces, tables, and fields as well as write restricted updates based on your policy configurations to tables you specify as part of DSR and Consent orchestration. For a complete list of permissions view the Scylla DB documentation."}),(0,a.jsx)(o.cB,{text:"Permissions list"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"SELECT ALL KEYSPACES"}),(0,a.jsx)(r.HCh,{children:"MODIFY ALL KEYSPACES"})]})]})]}),{}),tags:["Database","Detection","Discovery","DSR automation","ScyllaDB"]},w={placeholder:{name:"Snowflake",key:"snowflake_placeholder",connection_type:d.Rj.SNOWFLAKE,access:d.uv.READ,created_at:""},category:n.DATABASE,overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Snowflake is a cloud-based data warehousing platform designed for handling large-scale data storage and analytics. It enables organizations to store, manage, and analyze massive amounts of data efficiently, offering features like scalability, performance, and flexibility."}),(0,a.jsxs)(c,{children:[(0,a.jsx)(o.cB,{text:"Categories"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"Database"}),(0,a.jsx)(r.HCh,{children:"SQL database"}),(0,a.jsx)(r.HCh,{children:"Storage system"}),(0,a.jsx)(r.HCh,{children:"Data detection"}),(0,a.jsx)(r.HCh,{children:"Data discovery"})]}),(0,a.jsx)(o.cB,{text:"Permissions"}),(0,a.jsxs)(o.Z5,{children:[(0,a.jsx)(r.HCh,{children:"CREATE ROLE my_monitor_role;"}),(0,a.jsx)(r.HCh,{children:"GRANT USAGE ON DATABASE DATABASE_1 TO ROLE my_monitor_role;"}),(0,a.jsx)(r.HCh,{children:"GRANT USAGE ON SCHEMA DATABASE_1.TEST_SCHEMA TO ROLE my_monitor_role;"}),(0,a.jsx)(r.HCh,{children:"GRANT SELECT ON ALL TABLES IN SCHEMA DATABASE_1.TEST_SCHEMA TO ROLE my_monitor_role;"}),(0,a.jsx)(r.HCh,{children:"CREATE USER test_user PASSWORD='***';"}),(0,a.jsx)(r.HCh,{children:"GRANT ROLE my_monitor_role TO USER test_user;"})]})]})]}),{}),tags:["Data warehouse","Detection","Discovery","DSR automation"]},R={placeholder:{name:"Website",key:"website_placeholder",connection_type:d.Rj.WEBSITE,access:d.uv.READ,created_at:""},category:n.WEBSITE,tags:["Website","Discovery","Inventory"],overview:(0,a.jsx)(()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.cB,{text:"Overview"}),(0,a.jsx)(o.XU,{children:"Websites, or “properties”, often process user data. Adding a website as an integration lets you configure a Consent Management Platform (CMP), a site-specific privacy center, and Cross-Origin requests via Fides. You can also set up monitors to detect vendors, track technologies like cookies or pixels, and ensure compliance."})]}),{})},E={[d.Rj.BIGQUERY]:x,[d.Rj.DATAHUB]:m,[d.Rj.DYNAMODB]:g,[d.Rj.GOOGLE_CLOUD_SQL_MYSQL]:y,[d.Rj.GOOGLE_CLOUD_SQL_POSTGRES]:v,[d.Rj.MSSQL]:f,[d.Rj.RDS_MYSQL]:C,[d.Rj.RDS_POSTGRES]:A,[d.Rj.S3]:b,[d.Rj.SCYLLA]:D,[d.Rj.SNOWFLAKE]:w,[d.Rj.MYSQL]:S,[d.Rj.WEBSITE]:R},_=Object.values(E),T=Object.keys(E),H={placeholder:{name:"",key:"placeholder",connection_type:d.Rj.MANUAL,access:d.uv.READ,created_at:""},category:n.DATA_WAREHOUSE,tags:[]};var B=e=>{var s;return e&&null!==(s=E[e])&&void 0!==s?s:H}},64176:function(e,s,t){var i=t(27378),n=t(20682);s.Z=e=>{let{data:s}=(0,n.$I)({});return(0,i.useMemo)(()=>null==s?void 0:s.items.find(s=>s.identifier===e),[s,e])}},31883:function(e,s,t){t.d(s,{Bw:function(){return i.Bw},D4:function(){return i.D4}});var i=t(19043)}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6277],{87361:function(e,a,t){var n=t(24246),i=t(56351);a.Z=e=>{let{title:a,text:t,onClose:l}=e;return(0,n.jsxs)(i.Ugi,{backgroundColor:"gray.50",border:"1px solid",borderRadius:"md",justifyContent:"space-between",py:4,pr:6,pl:3,"data-testid":"empty-state",gap:2,position:"relative",children:[l&&(0,n.jsx)(i.Two,{boxSize:5,position:"absolute",right:3,top:3,zIndex:1,cursor:"pointer",p:1,onClick:l}),(0,n.jsx)(i.iid,{alignSelf:"start",color:"minos",mt:.5,flexGrow:0}),(0,n.jsxs)(i.kCb,{direction:"column",gap:2,flexGrow:1,children:[(0,n.jsx)(i.X6q,{fontSize:"md",children:a}),(0,n.jsx)(i.xvT,{fontSize:"sm",color:"gray.600",lineHeight:"5",children:t})]})]})}},57899:function(e,a,t){var n=t(24246),i=t(56351),l=t(27378);a.Z=e=>{let{handleConfirm:a,isOpen:t,onClose:s,title:o,message:r,confirmButtonText:d="Continue",cancelButtonText:c="Cancel"}=e,u=(0,l.useRef)(null);return(0,n.jsx)(i.aRR,{isOpen:t,leastDestructiveRef:u,onClose:s,children:(0,n.jsx)(i.dhV,{children:(0,n.jsxs)(i._Tf,{alignItems:"center",textAlign:"center",children:[(0,n.jsx)(i.aNP,{marginTop:3}),(0,n.jsx)(i.fYl,{fontSize:"lg",fontWeight:"bold",children:o}),(0,n.jsx)(i.iPF,{pt:0,children:r}),(0,n.jsxs)(i.xoY,{children:[(0,n.jsx)(i.wpx,{ref:u,onClick:s,size:"large",children:c}),(0,n.jsx)(i.wpx,{onClick:()=>a(),type:"primary",size:"large",className:"ml-3","data-testid":"warning-modal-confirm-btn",children:d})]})]})})})}},90980:function(e,a,t){t.d(a,{R:function(){return r}});var n=t(24246),i=t(56351),l=t(79894),s=t.n(l),o=t(63662);let r=e=>{let{onClick:a,...t}=e;return(0,n.jsxs)(i.kCb,{alignItems:"center",mt:-4,mb:3,onClick:a,cursor:"pointer",...t,children:[(0,n.jsx)(i.wpx,{"aria-label":"Back",icon:(0,n.jsx)(i.Rpv,{}),className:"mr-2",size:"small"}),(0,n.jsx)(i.xvT,{as:"a",fontSize:"sm",fontWeight:"500",children:"Back"})]})};a.Z=e=>{let{backPath:a,...t}=e,l=(0,o.useRouter)();return(0,n.jsxs)(i.kCb,{alignItems:"center",mb:6,...t,children:[(0,n.jsx)(i.wpx,{onClick:()=>l.push(a),"aria-label":"Back",icon:(0,n.jsx)(i.Rpv,{}),className:"mr-2",size:"small"}),(0,n.jsx)(i.xvT,{as:s(),href:a,fontSize:"sm",fontWeight:"500",children:"Back"})]})}},16194:function(e,a,t){t.d(a,{RN:function(){return w},d0:function(){return A}});var n=t(24246),i=t(56351),l=t(34090),s=t(86677),o=t(27378),r=t(16134),d=t(40324),c=t(90980),u=t(77830),p=t(8411),b=t(51472),m=t(64781),x=t(48515),_=t(60325),v=t(34334),h=t(71922),g=t(98795),j=t(21702),f=t(97181);let y=[{label:"Banner and modal",value:j.re.BANNER_AND_MODAL},{label:"Modal",value:j.re.MODAL},{label:"Privacy center",value:j.re.PRIVACY_CENTER},{label:"Headless",value:j.re.HEADLESS}],k=[{label:"Opt In/Opt Out",value:x.O.OPT_IN_OPT_OUT},{label:"Acknowledge",value:x.O.ACKNOWLEDGE}],C="tcf_purposes_placeholder",w=e=>{let{buttonPanel:a,children:t}=e;return(0,n.jsxs)(i.kCb,{direction:"column",minH:"full",w:"25%",borderRight:"1px solid #DEE5EE",children:[(0,n.jsx)(i.kCb,{direction:"column",h:"full",overflowY:"auto",px:4,children:(0,n.jsx)(i.kCb,{direction:"column",gap:4,w:"full",pb:4,children:t})}),a]})},A=e=>{var a,t,x,A,R;let{allPrivacyNotices:E,translationsEnabled:T,onSelectTranslation:O,onCreateTranslation:N}=e,I=(0,s.useRouter)(),{values:D,setFieldValue:L,dirty:P,isValid:q,isSubmitting:z,initialValues:B}=(0,l.u6)(),F=(0,r.C)(h.Zp),S=(0,r.C)(h.G1);(0,h.J6)({page:F,size:S});let Z=(0,o.useMemo)(()=>{let e=[...E];return e.some(e=>e.id===C)||e.push({name:"TCF Purposes",id:C,notice_key:C,data_uses:[],consent_mechanism:j.J7.NOTICE_ONLY,disabled:!1}),e},[E]),Y=e=>{var a;let t=Z.find(a=>a.id===e);return null!==(a=null==t?void 0:t.name)&&void 0!==a?a:e};(0,m.QM)();let M=(0,r.C)(m.P8),V=[...(0,_.TK)(M.locations),...(0,_.TK)(M.location_groups)],W=(0,r.C)(v.fJ),U=(0,r.C)(g.Zp),H=(0,r.C)(g.G1);(0,g.gz)({page:U,size:H});let G=(0,r.C)(g.YO),J=(0,n.jsxs)("div",{className:"flex justify-between border-t border-[#DEE5EE] p-4",children:[(0,n.jsx)(i.wpx,{onClick:()=>I.push(u.w0),children:"Cancel"}),(0,n.jsx)(i.wpx,{htmlType:"submit",type:"primary","data-testid":"save-btn",disabled:z||!P||!q,loading:z,children:"Save"})]});return(0,n.jsxs)(w,{buttonPanel:J,children:[(0,n.jsx)(c.Z,{backPath:u.w0,mt:4}),(0,n.jsx)(i.X6q,{fontSize:"md",fontWeight:"semibold",children:"Configure experience"}),(0,n.jsx)(d.j0,{name:"name",id:"name",label:"Name (internal admin use only)",isRequired:!0,variant:"stacked"}),D.component!==j.re.TCF_OVERLAY&&(0,n.jsx)(f.d,{name:"component",id:"component",options:y,label:"Experience type",layout:"stacked",disabled:!!B.component,isRequired:!0}),(0,n.jsx)(i.UO1,{in:D.component!==j.re.PRIVACY_CENTER&&D.component!==j.re.HEADLESS,animateOpacity:!0,children:(0,n.jsx)(i.xuv,{p:"1px",children:(0,n.jsx)(d.w8,{name:"dismissable",id:"dismissable",label:"Allow user to dismiss",variant:"stacked"})})}),(0,n.jsx)(i.UO1,{in:D.component===j.re.BANNER_AND_MODAL,animateOpacity:!0,children:(0,n.jsx)(f.d,{name:"layer1_button_options",id:"layer1_button_options",options:k,label:"Banner options",layout:"stacked",disabled:D.component!==j.re.BANNER_AND_MODAL})}),(0,n.jsx)(b.Z,{label:"Associated properties",addButtonLabel:"Add property",idField:"id",nameField:"name",allItems:G.map(e=>({id:e.id,name:e.name})),values:null!==(t=D.properties)&&void 0!==t?t:[],setValues:e=>L("properties",e),draggable:!0,maxHeight:100,baseTestId:"property"}),(0,n.jsx)(i.izJ,{}),(0,n.jsx)(i.X6q,{fontSize:"md",fontWeight:"semibold",children:"Privacy notices"}),D.component===j.re.TCF_OVERLAY?(0,n.jsx)(b.Z,{addButtonLabel:"Add privacy notice",allItems:Z.map(e=>e.id),values:function(e){if(!e.privacy_notice_ids)return[C];let a=e.privacy_notice_ids;return a.includes(C)||a.push(C),a}(D),setValues:e=>L("privacy_notice_ids",e),canDeleteItem:e=>e!==C,getTooltip:e=>{if(e===C)return"TCF Purposes are required by the framework and cannot be deleted."},getItemLabel:Y,draggable:!0,baseTestId:"privacy-notice"}):(0,n.jsx)(b.Z,{addButtonLabel:"Add privacy notice",allItems:(e=>{var a;let t=e.map(e=>{var a;return null===(a=e.children)||void 0===a?void 0:a.map(e=>e.id)}).flat();return null!==(a=E.filter(e=>!t.includes(e.id)))&&void 0!==a?a:[]})(E).map(e=>e.id),values:null!==(x=D.privacy_notice_ids)&&void 0!==x?x:[],setValues:e=>L("privacy_notice_ids",e),getItemLabel:Y,draggable:!0,baseTestId:"privacy-notice"}),D.component===j.re.BANNER_AND_MODAL?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.UO1,{in:!!(null===(a=D.privacy_notice_ids)||void 0===a?void 0:a.length),animateOpacity:!0,children:(0,n.jsx)(i.xuv,{p:"1px",children:(0,n.jsx)(d.w8,{name:"show_layer1_notices",id:"show_layer1_notices",label:"Add privacy notices to banner",variant:"stacked"})})}),(0,n.jsx)(i.izJ,{})]}):null,(0,n.jsx)(i.xvT,{as:"h2",fontWeight:"600",children:"Locations & Languages"}),(0,n.jsx)(b.Z,{label:"Locations for this experience",addButtonLabel:"Add location",allItems:V,values:null!==(A=D.regions)&&void 0!==A?A:[],setValues:e=>L("regions",e),getItemLabel:e=>p.Z8[e],draggable:!0,baseTestId:"location"}),T?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(b.Z,{label:"Languages for this experience",addButtonLabel:"Add language",values:null!==(R=D.translations)&&void 0!==R?R:[],setValues:e=>L("translations",e),idField:"language",canDeleteItem:e=>!e.is_default,allItems:W.slice().sort((e,a)=>e.name.localeCompare(a.name)).map(e=>({language:e.id,is_default:!1})),getItemLabel:e=>{let a=W.find(a=>a.id===e.language),t=a?a.name:e.language;return"".concat(t).concat(e.is_default?" (Default)":"")},createNewValue:e=>N(e.value),onRowClick:O,selectOnAdd:!0,draggable:!0,baseTestId:"language"}),(0,n.jsx)(d.w8,{name:"auto_detect_language",id:"auto_detect_language",label:"Auto detect language",variant:"stacked"})]}):(0,n.jsx)(i.wpx,{icon:(0,n.jsx)(i.mrv,{}),iconPosition:"end",onClick:()=>O(D.translations[0]),"data-testid":"edit-experience-btn",children:"Edit experience text"}),(0,n.jsx)(d.w8,{name:"auto_subdomain_cookie_deletion",id:"auto_subdomain_cookie_deletion",label:"Automatically delete subdomain cookies",variant:"stacked",tooltip:"If enabled, automatically deletes cookies set on subdomains in addition to main domain where appropriate. Recommended to enable for full consent compliance."})]})}},16277:function(e,a,t){t.d(a,{f:function(){return _}});var n=t(24246),i=t(56351),l=t(34090),s=t(56141),o=t.n(s),r=t(27378),d=t(40324),c=t(87361),u=t(57899),p=t(90980),b=t(60325),m=t(16194),x=t(21702);let _=e=>{let{languageName:a}=e;return(0,n.jsx)(c.Z,{text:"This is a default translation provided by Fides. If you've modified the default English language text, these translations will not match, so verify any changes with a native ".concat(a," speaker before using."),"data-testid":"oob-translation-notice"})};a.Z=e=>{var a,t,s,c,v,h,g;let j,{translation:f,translationsEnabled:y,isOOB:k,onReturnToMainForm:C}=e,{values:w,setFieldValue:A,errors:R,touched:E,setTouched:T}=(0,l.u6)(),O=(0,r.useMemo)(()=>{let{name:e,...a}=f;return a},[f]),N=!!O.title&&!k,I=(0,b.y3)(w.component),D=w.translations.findIndex(e=>e.language===f.language),L=!o()(w.translations[D],O),{onOpen:P,isOpen:q,onClose:z}=(0,i.qY0)(),{onOpen:B,isOpen:F,onClose:S}=(0,i.qY0)(),Z=()=>{L||k?P():C()},Y=e=>{let a=w.translations.map((a,t)=>({...a,is_default:t===e}));a.unshift(a.splice(e,1)[0]),A("translations",a),C()},M=(0,n.jsxs)("div",{className:"flex justify-between border-t border-[#DEE5EE] p-4",children:[(0,n.jsx)(i.wpx,{onClick:Z,"data-testid":"cancel-btn",children:"Cancel"}),(0,n.jsx)(i.wpx,{onClick:()=>{w.translations[D].is_default&&!O.is_default?B():C()},type:"primary","data-testid":"save-btn",disabled:!L&&!k||!!R.translations,children:N?"Save":"Add translation"})]});return j=y?N?"You have unsaved changes to this translation. Discard changes?":"This translation has not been added to your experience. Discard translation?":"You have unsaved changes to this experience text. Discard changes?",(0,n.jsxs)(m.RN,{buttonPanel:M,children:[(0,n.jsx)(p.R,{onClick:Z,mt:4}),(0,n.jsx)(u.Z,{isOpen:q,onClose:z,title:y?"Translation not saved":"Text not saved",message:(0,n.jsx)(i.xvT,{children:j}),confirmButtonText:"Discard",handleConfirm:()=>{let e=w.translations.slice();N?e[D]={...O,title:O.title,description:O.description}:e.splice(D,1),A("translations",e);let{translations:a,...t}=E;T({...t}),C()}}),(0,n.jsx)(i.X6q,{fontSize:"md",fontWeight:"semibold",children:y?"Edit ".concat(f.name," translation"):"Edit experience text"}),k?(0,n.jsx)(_,{languageName:f.name}):null,y&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.w8,{name:"translations.".concat(D,".is_default"),id:"translations.".concat(D,".is_default"),label:"Default language",isDisabled:!!O.is_default,variant:"stacked"}),(0,n.jsx)(u.Z,{isOpen:F,onClose:S,title:"Update default language",message:(0,n.jsx)(i.xvT,{children:"Are you sure you want to update the default language of this experience?"}),handleConfirm:()=>Y(D)})]}),(0,n.jsx)(d.j0,{name:"translations.".concat(D,".title"),id:"translations.".concat(D,".title"),label:"Title",isRequired:!0,variant:"stacked"}),(0,n.jsx)(d.Ks,{name:"translations.".concat(D,".description"),id:"translations.".concat(D,".description"),label:"Description",isRequired:!0,variant:"stacked"}),(w.component===x.re.BANNER_AND_MODAL||w.component===x.re.TCF_OVERLAY)&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.j0,{name:"translations.".concat(D,".banner_title"),id:"translations.".concat(D,".banner_title"),label:"Banner title (optional)",tooltip:"A separate title for the banner (defaults to main title)",variant:"stacked"}),(0,n.jsx)(d.Ks,{name:"translations.".concat(D,".banner_description"),id:"translations.".concat(D,".banner_description"),label:"Banner description (optional)",tooltip:"A separate description for the banner (defaults to main description)",variant:"stacked"})]}),w.component===x.re.TCF_OVERLAY&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".purpose_header"),id:"translations.".concat(D,".purpose_header"),label:"Purpose header (optional)",tooltip:"Appears above the Purpose list section of the TCF banner",variant:"stacked"}),(0,n.jsx)(d.j0,{name:"translations.".concat(D,".accept_button_label"),id:"translations.".concat(D,".accept_button_label"),label:'"Accept" button label',isRequired:!0,variant:"stacked"}),(0,n.jsx)(d.j0,{name:"translations.".concat(D,".reject_button_label"),id:"translations.".concat(D,".reject_button_label"),label:'"Reject" button label',isRequired:!0,variant:"stacked"}),(null===(a=I.privacy_preferences_link_label)||void 0===a?void 0:a.included)&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".privacy_preferences_link_label"),id:"translations.".concat(D,".privacy_preferences_link_label"),label:'"Manage privacy preferences" button label',variant:"stacked",isRequired:null===(t=I.privacy_preferences_link_label)||void 0===t?void 0:t.required}),(null===(s=I.save_button_label)||void 0===s?void 0:s.included)&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".save_button_label"),id:"translations.".concat(D,".save_button_label"),label:'"Save" button label',variant:"stacked",isRequired:I.save_button_label.required}),(null===(c=I.acknowledge_button_label)||void 0===c?void 0:c.included)&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".acknowledge_button_label"),id:"translations.".concat(D,".acknowledge_button_label"),label:'"Acknowledge" button label',variant:"stacked",isRequired:I.acknowledge_button_label.required}),(null===(v=I.privacy_policy_link_label)||void 0===v?void 0:v.included)&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".privacy_policy_link_label"),id:"translations.".concat(D,".privacy_policy_link_label"),label:"Privacy policy link label (optional)",variant:"stacked"}),(null===(h=I.privacy_policy_url)||void 0===h?void 0:h.included)&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".privacy_policy_url"),id:"translations.".concat(D,".privacy_policy_url"),label:"Privacy policy link URL (optional)",variant:"stacked"}),(null===(g=I.modal_link_label)||void 0===g?void 0:g.included)&&(0,n.jsx)(d.j0,{name:"translations.".concat(D,".modal_link_label"),id:"translations.".concat(D,".modal_link_label"),label:"Trigger link label (optional)",tooltip:"Include text here if you would like the Fides CMP to manage the copy of the button that is included on your site to open the CMP.",variant:"stacked"})]})}}}]);
|