ethyca-fides 2.59.2b3__py2.py3-none-any.whl → 2.59.2rc0__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.
Files changed (274) hide show
  1. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/METADATA +2 -2
  2. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/RECORD +212 -215
  3. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/WHEEL +1 -1
  4. fides/_version.py +3 -3
  5. fides/api/api/v1/endpoints/storage_endpoints.py +6 -7
  6. fides/api/db/system.py +121 -1
  7. fides/api/models/asset.py +2 -1
  8. fides/api/models/privacy_notice.py +19 -14
  9. fides/api/models/sql_models.py +51 -0
  10. fides/api/schemas/application_config.py +0 -1
  11. fides/api/schemas/connection_configuration/connection_secrets_datahub.py +3 -3
  12. fides/api/schemas/connection_configuration/connection_secrets_mysql.py +0 -12
  13. fides/api/schemas/connection_configuration/connection_secrets_postgres.py +4 -0
  14. fides/api/schemas/consentable_item.py +8 -5
  15. fides/api/schemas/messaging/messaging.py +2 -9
  16. fides/api/schemas/storage/storage.py +4 -40
  17. fides/api/schemas/storage/storage_secrets_docs_only.py +2 -8
  18. fides/api/schemas/system.py +2 -1
  19. fides/api/service/connectors/mysql_connector.py +1 -13
  20. fides/api/service/connectors/postgres_connector.py +4 -2
  21. fides/api/service/connectors/saas_connector.py +13 -18
  22. fides/api/service/saas_request/saas_request_override_factory.py +3 -3
  23. fides/api/service/storage/storage_authenticator_service.py +16 -39
  24. fides/api/service/storage/storage_uploader_service.py +1 -25
  25. fides/api/task/graph_task.py +3 -2
  26. fides/api/tasks/storage.py +2 -50
  27. fides/api/util/aws_util.py +17 -28
  28. fides/api/util/consent_util.py +4 -10
  29. fides/api/util/storage_util.py +0 -2
  30. fides/service/messaging/aws_ses_service.py +16 -25
  31. fides/ui-build/static/admin/404.html +1 -1
  32. fides/ui-build/static/admin/_next/static/P3RkpoojridGfvvbDI91a/_buildManifest.js +1 -0
  33. fides/ui-build/static/admin/_next/static/chunks/1100-45c0634b4f51d10c.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/1376-92890c17ce39ca0d.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/146-d1820217dc36d46d.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{1817-90e54de7c706b571.js → 1817-6abbe957a53026d7.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{1904-e1034674c6eef004.js → 1904-281183a117e26585.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/{2479-b4f7654c27a15c05.js → 2479-b4f7a1c7c711cb65.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/3086-d1ba90bc6ac9174b.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/3244-3d94bf3393366412.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/{3702-8a6360b2deef2a87.js → 3702-3d814671c31eaca3.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/3855-237afbbea7f54707.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/3872-c53d74aebd12cfd3.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/401-50974f107c2712fc.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/4060-52fd85fb1e15a2b8.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/4121-476f657b03a78965.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/4481-288d74a33473cff7.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/5102-626b9ff42e904276.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/5480-1623dbacdf4e6794.js +1 -0
  50. fides/ui-build/static/admin/_next/static/chunks/5487-9a2aecb0ec63d567.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/{5826-8a035114917033bb.js → 5826-1f4f74bf3b5348e4.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/5973-942ce645a4279587.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/{6372-3d6d19a89e1d7a37.js → 6372-2aee10b79089521a.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/6395-4224d6d26d1e8bb7.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/6853-ca5dacd25c9ccb7c.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/6954-127745bfdc5bc0b3.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/7751-3913b8c055f599e5.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/79-77cfed02164241ca.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/8433-c4c765833ab9cc07.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/8934-ffa2b0509bc7a845.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/9282-1a48b10b114d01f4.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/9327-4970d356f7000c0b.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/{9392.9178313b7a01d889.js → 9392.da35a8e778812d91.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/9572-2b9b10e146130c85.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/{9676.d1e42fd1d03c4a76.js → 9676.f297a1347ac09c56.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/9767-bf415d0daea960cd.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/{9951-a0ba5bccbbbd5f33.js → 9951-66aad0602aadfbe2.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/{404-b482dd9e6ba3397d.js → 404-29560aa2e6a60963.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-dc66d9fb6547cb04.js → _app-1ce747bb4aa843da.js} +48 -48
  70. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-58e9256e86916ecd.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-892fc00510cddef8.js → multiple-2392e3a101fae073.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a6926f7ec7ad10cf.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-404f3c9018952800.js +1 -0
  74. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-cc58c1e18966fcfd.js → add-vendors-7dfe37b9f0ff9a3c.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-422f4d002822a5ce.js → configure-dba7848b760ba227.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-cd8bb60adf783c4a.js → [id]-78de4bde88e18b0f.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-300fd2800c417d0b.js → new-c02b14c50b19bd91.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-7eeeee3769e73f78.js +1 -0
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-72dd15bfd87616c9.js → [id]-75c2ed6ba3de48cd.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-8bbccdd747f4100c.js → new-487ae57dc7e2ded2.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-65091908d6296afc.js +1 -0
  82. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-55cc394ebc428e59.js → properties-f67fda6a71d0a46b.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-7a1976c0d1aca8b6.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-ec420ff6cfb82abd.js → consent-75395dfc224cf44b.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-b0b976e8dd5e4cd6.js → [projectUrn]-fa65c67ec8c4b5e6.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-4ea56a1c3010ba99.js → projects-e76a07ee6ee8d55f.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-75989f9732d90793.js +1 -0
  88. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-6b3d1fe762c747d8.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-61eafb8444bffb76.js +1 -0
  90. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-38476c697da53480.js +1 -0
  91. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-e7869f658e3017b9.js +1 -0
  92. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-10f789d4ab2b8927.js → [resourceUrn]-1bcaa606739ea1c5.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-f473b2ee1c67be3c.js → detection-22f55dc12354b4c6.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-2569551ae75ea5a2.js → [resourceUrn]-86111c25dc30ef2b.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-ad077f30849fdc0a.js → discovery-853be75f08b9ab5c.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-4b12c6b141f6cda3.js → datamap-423172d31de8e9c6.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-da407b63cd3f5276.js → [...subfieldNames]-704553f5329fb9d4.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-76205fa5ddc5c3ae.js → [collectionName]-06c19dca941edb14.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-ab7c88da427b6396.js → [datasetId]-eac517f43d5f53a8.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-8dba366b1d55a15c.js → new-5aff1d01c6c30ad6.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-ee98d1a24a68f13b.js → dataset-f4d57b3432c57112.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-e39d66c8dfdc4c6f.js → [id]-b2b1168d0361baa8.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-8f2cfc79022cb6d0.js → new-c804349a417a888b.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-0faa9b3c4555e585.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/pages/index-e72904e316ede1b0.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-17191a759e167ca8.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-88e51c81a380ebad.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-1d18e28fa55a149b.js → [id]-66f5fbadd8455805.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-11bdab1b292c6f89.js → add-template-d441abb1f045940f.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-eef56c95b08aa24c.js +1 -0
  111. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-96350050e842bde5.js → [id]-54ea39f203182c53.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-d889076067104e56.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-3355b4803b2916f3.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b8c94b10ab90b061.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-3ac47981f1e2b0aa.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-835b7c4dd2240d16.js → [id]-f4fb941df069b7bf.js} +1 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-984851804558be53.js → add-property-bccb6ffab25aa214.js} +1 -1
  118. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-d2b95b0ebae06804.js → properties-9a7ac623370b7c00.js} +1 -1
  119. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-fe743440d7eb007b.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-4412a7b468b6d4bf.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-cdc866af93898716.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-a7dc8113067dff42.js +1 -0
  123. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-87df4b6493ca8162.js → domain-records-d9088f5cd9fb2822.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-2f03e981234c40ad.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-cf09ad896c7396a6.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-a8cd013bdd3aef75.js → locations-759564ca0ae62840.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-5bcc7a6976e01a56.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-5abb227df116c9c4.js → regulations-2dce4501fca920b3.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-0b47ff26897c1d9a.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-693c726f22ae11c5.js → [id]-dd053a3bf2a9ca6c.js} +1 -1
  131. fides/ui-build/static/admin/_next/static/chunks/pages/systems-820893393f1516ee.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-8fccd670220dbf60.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-65ef1bdebb679666.js → new-082c3156175f9267.js} +1 -1
  134. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-28abb07c95f2c7c2.js → [id]-d527d1d1635541df.js} +1 -1
  135. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-facb8c0128a44cb1.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/{webpack-cf42f5a0e9af0ace.js → webpack-03e375f6d6b2c71b.js} +1 -1
  137. fides/ui-build/static/admin/_next/static/css/687135955af5b7e1.css +1 -0
  138. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  139. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  140. fides/ui-build/static/admin/add-systems.html +1 -1
  141. fides/ui-build/static/admin/ant-poc.html +1 -1
  142. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  143. fides/ui-build/static/admin/consent/configure.html +1 -1
  144. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  145. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  146. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  147. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  148. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  149. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  150. fides/ui-build/static/admin/consent/properties.html +1 -1
  151. fides/ui-build/static/admin/consent/reporting.html +1 -1
  152. fides/ui-build/static/admin/consent.html +1 -1
  153. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  154. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  155. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  156. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  157. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  158. fides/ui-build/static/admin/data-catalog.html +1 -1
  159. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  160. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  161. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  162. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  163. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  164. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  165. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  166. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  167. fides/ui-build/static/admin/datamap.html +1 -1
  168. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  169. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  170. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  171. fides/ui-build/static/admin/dataset/new.html +1 -1
  172. fides/ui-build/static/admin/dataset.html +1 -1
  173. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  174. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  175. fides/ui-build/static/admin/datastore-connection.html +1 -1
  176. fides/ui-build/static/admin/index.html +1 -1
  177. fides/ui-build/static/admin/integrations/[id].html +1 -1
  178. fides/ui-build/static/admin/integrations.html +1 -1
  179. fides/ui-build/static/admin/login/[provider].html +1 -1
  180. fides/ui-build/static/admin/login.html +1 -1
  181. fides/ui-build/static/admin/messaging/[id].html +1 -1
  182. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  183. fides/ui-build/static/admin/messaging.html +1 -1
  184. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  185. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  186. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  187. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  188. fides/ui-build/static/admin/privacy-requests.html +1 -1
  189. fides/ui-build/static/admin/properties/[id].html +1 -1
  190. fides/ui-build/static/admin/properties/add-property.html +1 -1
  191. fides/ui-build/static/admin/properties.html +1 -1
  192. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  193. fides/ui-build/static/admin/settings/about.html +1 -1
  194. fides/ui-build/static/admin/settings/consent.html +1 -1
  195. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  196. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  197. fides/ui-build/static/admin/settings/domains.html +1 -1
  198. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  199. fides/ui-build/static/admin/settings/locations.html +1 -1
  200. fides/ui-build/static/admin/settings/organization.html +1 -1
  201. fides/ui-build/static/admin/settings/regulations.html +1 -1
  202. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  203. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  204. fides/ui-build/static/admin/systems.html +1 -1
  205. fides/ui-build/static/admin/taxonomy.html +1 -1
  206. fides/ui-build/static/admin/user-management/new.html +1 -1
  207. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  208. fides/ui-build/static/admin/user-management.html +1 -1
  209. fides/api/alembic/migrations/versions/c9c72b3d550b_data_migration_cookie_asset.py +0 -218
  210. fides/api/service/storage/gcs.py +0 -38
  211. fides/ui-build/static/admin/_next/static/WiKelYdZvuyhqjL7rLRaz/_buildManifest.js +0 -1
  212. fides/ui-build/static/admin/_next/static/chunks/1100-0046887f49e9e7c7.js +0 -1
  213. fides/ui-build/static/admin/_next/static/chunks/3503-2e773a38d4a79c2d.js +0 -1
  214. fides/ui-build/static/admin/_next/static/chunks/3513-2ee2ff13c15af241.js +0 -1
  215. fides/ui-build/static/admin/_next/static/chunks/3855-7a43acdb1f8de2f5.js +0 -1
  216. fides/ui-build/static/admin/_next/static/chunks/3872-53b86dcc7ee3ddec.js +0 -1
  217. fides/ui-build/static/admin/_next/static/chunks/401-a15fcc78cc272c09.js +0 -1
  218. fides/ui-build/static/admin/_next/static/chunks/4060-93514991b84ca46c.js +0 -1
  219. fides/ui-build/static/admin/_next/static/chunks/4121-01e2b9f905b8ca29.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/4481-c19a0c5e273a3ec7.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/5487-b6957c5ba835167b.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/5835-2e2aa29b4a8bf4e6.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/5973-4b83cf367b6d82a2.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/6277-2f2d89b83a19ee67.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/6853-45e8c48ad0fdf1db.js +0 -1
  226. fides/ui-build/static/admin/_next/static/chunks/6954-6de30beefefac64a.js +0 -1
  227. fides/ui-build/static/admin/_next/static/chunks/7751-f83e9877478aafcf.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/79-576004c5ee5116f6.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/8433-234a6feeb457cbb8.js +0 -1
  230. fides/ui-build/static/admin/_next/static/chunks/8934-e357867355f1f924.js +0 -1
  231. fides/ui-build/static/admin/_next/static/chunks/9282-c7f853a8175266bc.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/9327-0bc418b9b16cc2c5.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/9572-c34e18bd40467909.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/9719-d3de30714871f267.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/9767-ee5b0af0e65d3802.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/9965-8880affd11242777.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-e16fcedb2215db13.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-cb85a0014fad7c58.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-2bade915860dd327.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-046051bb82ec1c53.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-1f402b7525f78140.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-de9118ec446ce994.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-7efbc1558febf026.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-cdd23dc94e1fbf89.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-94308fff1468b5e6.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-920ed6df7e0aa3a5.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-7e25ddfe45048b35.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-340e311fa02584dc.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/pages/index-259c1f1281f9b634.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-0fc3ffd11ba163f9.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-d584110d81e5b395.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-de5efa1ff6d0e9ea.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-e8e9ae8d58acceb2.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a76f1d1a19e61fe8.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-6b9a46fef5031a0b.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-630db544f2a27167.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-5d1aededc7523146.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-44f96bcf57cd4cbf.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-0ba66c149139737a.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-943dfe977678edb5.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-39d098cbcb33d4f5.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-45a8a86266308028.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-272eb2c0b7ffd290.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-aaa200f916ba79d8.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-da1b2dd3ec61a08e.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/pages/systems-5eccb5fe50f7aaa9.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-0611d707ce426ec7.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-4eb69d5c6af8581b.js +0 -1
  269. fides/ui-build/static/admin/_next/static/css/e728309361a9758b.css +0 -1
  270. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +0 -1
  271. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/entry_points.txt +0 -0
  272. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/licenses/LICENSE +0 -0
  273. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/top_level.txt +0 -0
  274. /fides/ui-build/static/admin/_next/static/{WiKelYdZvuyhqjL7rLRaz → P3RkpoojridGfvvbDI91a}/_ssgManifest.js +0 -0
@@ -37,7 +37,8 @@ class PostgreSQLConnector(SQLConnector):
37
37
  netloc = config.host
38
38
  port = f":{config.port}" if config.port else ""
39
39
  dbname = f"/{config.dbname}" if config.dbname else ""
40
- return f"postgresql://{user_password}{netloc}{port}{dbname}"
40
+ query = f"?sslmode=${config.ssl_mode}" if config.ssl_mode else ""
41
+ return f"postgresql://{user_password}{netloc}{port}{dbname}{query}"
41
42
 
42
43
  def build_ssh_uri(self, local_address: tuple) -> str:
43
44
  """Build URI of format postgresql://[user[:password]@][ssh_host][:ssh_port][/dbname]"""
@@ -53,7 +54,8 @@ class PostgreSQLConnector(SQLConnector):
53
54
  netloc = local_host
54
55
  port = f":{local_port}" if local_port else ""
55
56
  dbname = f"/{config.dbname}" if config.dbname else ""
56
- return f"postgresql://{user_password}{netloc}{port}{dbname}"
57
+ query = f"?sslmode=${config.ssl_mode}" if config.ssl_mode else ""
58
+ return f"postgresql://{user_password}{netloc}{port}{dbname}{query}"
57
59
 
58
60
  # Overrides SQLConnector.create_client
59
61
  def create_client(self) -> Engine:
@@ -4,7 +4,6 @@ from json import JSONDecodeError
4
4
  from typing import Any, Dict, List, Optional, Tuple, Union, cast
5
5
 
6
6
  import pydash
7
- from fideslang.validation import FidesKey
8
7
  from loguru import logger
9
8
  from requests import Response
10
9
  from sqlalchemy.orm import Session
@@ -19,6 +18,7 @@ from fides.api.common_exceptions import (
19
18
  from fides.api.graph.execution import ExecutionNode
20
19
  from fides.api.models.connectionconfig import ConnectionConfig, ConnectionTestStatus
21
20
  from fides.api.models.policy import Policy
21
+ from fides.api.models.privacy_notice import UserConsentPreference
22
22
  from fides.api.models.privacy_request import PrivacyRequest, RequestTask
23
23
  from fides.api.schemas.consentable_item import (
24
24
  ConsentableItem,
@@ -687,16 +687,15 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
687
687
 
688
688
  if notice_based_override_function:
689
689
  # follow the notice-based SaaS consent flow
690
- (
691
- notice_preference_map,
692
- filtered_preferences,
693
- ) = build_user_consent_and_filtered_preferences_for_service(
694
- self.configuration.system,
695
- privacy_request,
696
- session,
697
- True,
690
+ notice_id_to_preference_map, filtered_preferences = (
691
+ build_user_consent_and_filtered_preferences_for_service(
692
+ self.configuration.system,
693
+ privacy_request,
694
+ session,
695
+ True,
696
+ )
698
697
  )
699
- if not notice_preference_map:
698
+ if not notice_id_to_preference_map:
700
699
  logger.info(
701
700
  "Skipping consent requests on node {}: No actionable consent preferences to propagate",
702
701
  node.address.value,
@@ -724,13 +723,12 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
724
723
  )
725
724
  consent_propagation_status = self._invoke_consent_request_override(
726
725
  notice_based_override_function,
727
- self.configuration.key,
728
726
  self.create_client(),
729
727
  policy,
730
728
  privacy_request,
731
729
  self.secrets,
732
730
  identity_data,
733
- notice_preference_map, # type: ignore[arg-type]
731
+ notice_id_to_preference_map, # type: ignore[arg-type]
734
732
  notice_based_consentable_item_hierarchy,
735
733
  )
736
734
  if consent_propagation_status == ConsentPropagationStatus.no_update_needed:
@@ -802,7 +800,6 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
802
800
  )
803
801
  consent_propagation_status = self._invoke_consent_request_override(
804
802
  override_function,
805
- self.configuration.key,
806
803
  self.create_client(),
807
804
  policy,
808
805
  privacy_request,
@@ -1000,13 +997,12 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
1000
997
  @staticmethod
1001
998
  def _invoke_consent_request_override(
1002
999
  override_function: RequestOverrideFunction,
1003
- connection_key: FidesKey,
1004
1000
  client: AuthenticatedClient,
1005
1001
  policy: Policy,
1006
1002
  privacy_request: PrivacyRequest,
1007
1003
  secrets: Any,
1008
1004
  identity_data: Optional[Dict[str, Any]] = None,
1009
- notice_preference_map: Optional[Dict[str, Dict[str, Any]]] = None,
1005
+ notice_id_to_preference_map: Optional[Dict[str, UserConsentPreference]] = None,
1010
1006
  consentable_items_hierarchy: Optional[List[ConsentableItem]] = None,
1011
1007
  ) -> ConsentPropagationStatus:
1012
1008
  """
@@ -1015,14 +1011,13 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
1015
1011
  """
1016
1012
  try:
1017
1013
  logger.info("Invoking consent request override function...")
1018
- if notice_preference_map:
1014
+ if notice_id_to_preference_map:
1019
1015
  # At this point, we've already validated the override function signature to take these params
1020
1016
  return override_function(
1021
- connection_key,
1022
1017
  client,
1023
1018
  secrets,
1024
1019
  identity_data,
1025
- notice_preference_map,
1020
+ notice_id_to_preference_map,
1026
1021
  consentable_items_hierarchy,
1027
1022
  ) # type: ignore
1028
1023
  return override_function(
@@ -248,7 +248,7 @@ def validate_update_consent_function(f: Callable) -> None:
248
248
  )
249
249
  if len(sig.parameters) < 5:
250
250
  raise InvalidSaaSRequestOverrideException(
251
- "Provided SaaS update consent function must declare at least 5 parameters"
251
+ "Provided SaaS update consent function must declare at least 4 parameters"
252
252
  )
253
253
 
254
254
 
@@ -258,9 +258,9 @@ def validate_process_consent_webhook_function(f: Callable) -> None:
258
258
  raise InvalidSaaSRequestOverrideException(
259
259
  "Provided SaaS process consent webhook function must return a ConsentWebhookResult"
260
260
  )
261
- if len(sig.parameters) < 4:
261
+ if len(sig.parameters) < 5:
262
262
  raise InvalidSaaSRequestOverrideException(
263
- "Provided SaaS process consent webhook function must declare at least 4 parameters"
263
+ "Provided SaaS process consent webhook function must declare at least 5 parameters"
264
264
  )
265
265
 
266
266
 
@@ -1,12 +1,7 @@
1
- from typing import Any
1
+ from typing import Any, Dict, Union
2
2
 
3
3
  from botocore.exceptions import ClientError
4
- from google.auth.exceptions import GoogleAuthError
5
- from google.auth.transport.requests import Request
6
- from google.oauth2 import service_account
7
- from loguru import logger
8
4
 
9
- from fides.api.models.storage import StorageConfig
10
5
  from fides.api.schemas.storage.storage import (
11
6
  SUPPORTED_STORAGE_SECRETS,
12
7
  AWSAuthMethod,
@@ -18,50 +13,32 @@ from fides.api.util.aws_util import get_aws_session
18
13
 
19
14
  def secrets_are_valid(
20
15
  secrets: SUPPORTED_STORAGE_SECRETS,
21
- storage_config: StorageConfig,
16
+ storage_type: Union[StorageType, str],
22
17
  ) -> bool:
23
18
  """Authenticates upload destination with appropriate upload method"""
24
- uploader: Any = _get_authenticator_from_config(storage_config.type) # type: ignore
25
- return uploader(storage_config, secrets)
26
-
27
-
28
- def _s3_authenticator(
29
- config: StorageConfig, secrets: dict[StorageSecrets, Any]
30
- ) -> bool:
19
+ if not isinstance(storage_type, StorageType):
20
+ # try to coerce into an enum
21
+ try:
22
+ storage_type = StorageType[storage_type]
23
+ except KeyError:
24
+ raise ValueError(
25
+ "storage_type argument must be a valid StorageType enum member."
26
+ )
27
+ uploader: Any = _get_authenticator_from_config(storage_type)
28
+ return uploader(secrets)
29
+
30
+
31
+ def _s3_authenticator(secrets: Dict[StorageSecrets, Any]) -> bool:
31
32
  """Authenticates secrets for s3, returns true if secrets are valid"""
32
33
  try:
33
- get_aws_session(config.details["auth_method"] or AWSAuthMethod.SECRET_KEYS.value, secrets.model_dump(mode="json")) # type: ignore
34
+ get_aws_session(AWSAuthMethod.SECRET_KEYS.value, secrets.model_dump(mode="json")) # type: ignore
34
35
  return True
35
36
  except ClientError:
36
37
  return False
37
38
 
38
39
 
39
- def _gcs_authenticator(storage_config: StorageConfig, secrets: dict) -> bool:
40
- """Autenticates secrets for Google Cloud Storage, returns true if secrets are valid"""
41
- try:
42
- credentials = service_account.Credentials.from_service_account_info(
43
- dict(secrets),
44
- scopes=["https://www.googleapis.com/auth/devstorage.read_only"],
45
- )
46
- # To validate the credentials, it is necessary to make a request to Google Cloud API
47
- credentials.refresh(Request())
48
- return True
49
-
50
- except GoogleAuthError as auth_error:
51
- logger.warning(
52
- "Google authentication error trying to authenticate GCS secrets: {}",
53
- auth_error,
54
- )
55
- return False
56
-
57
- except Exception as e:
58
- logger.warning("Unexpected error authenticating GCS secrets: {}", e)
59
- return False
60
-
61
-
62
40
  def _get_authenticator_from_config(storage_type: StorageType) -> Any:
63
41
  """Determines which uploader method to use based on storage type"""
64
42
  return {
65
43
  StorageType.s3.value: _s3_authenticator,
66
- StorageType.gcs.value: _gcs_authenticator,
67
44
  }[storage_type.value]
@@ -14,7 +14,7 @@ from fides.api.schemas.storage.storage import (
14
14
  StorageDetails,
15
15
  StorageType,
16
16
  )
17
- from fides.api.tasks.storage import upload_to_gcs, upload_to_local, upload_to_s3
17
+ from fides.api.tasks.storage import upload_to_local, upload_to_s3
18
18
 
19
19
 
20
20
  def upload(
@@ -78,7 +78,6 @@ def _get_uploader_from_config_type(storage_type: StorageType) -> Any:
78
78
  return {
79
79
  StorageType.s3.value: _s3_uploader,
80
80
  StorageType.local.value: _local_uploader,
81
- StorageType.gcs.value: _gcs_uploader,
82
81
  }[storage_type.value]
83
82
 
84
83
 
@@ -107,29 +106,6 @@ def _s3_uploader(
107
106
  )
108
107
 
109
108
 
110
- def _gcs_uploader(
111
- _: Session,
112
- config: StorageConfig,
113
- data: Dict,
114
- privacy_request: PrivacyRequest,
115
- ) -> str:
116
- """Constructs necessary info needed for Google Cloud Storage before calling upload"""
117
- file_key: str = _construct_file_key(privacy_request.id, config)
118
-
119
- bucket_name = config.details[StorageDetails.BUCKET.value]
120
- auth_method = config.details[StorageDetails.AUTH_METHOD.value]
121
-
122
- return upload_to_gcs(
123
- config.secrets,
124
- data,
125
- bucket_name,
126
- file_key,
127
- config.format.value, # type: ignore
128
- privacy_request,
129
- auth_method,
130
- )
131
-
132
-
133
109
  def _local_uploader(
134
110
  _: Session,
135
111
  config: StorageConfig,
@@ -125,15 +125,16 @@ def retry(
125
125
  ActionDisabled,
126
126
  NotSupportedForCollection,
127
127
  ) as exc:
128
+ traceback.print_exc()
128
129
  logger.warning(
129
- "{} - Skipping collection {} for privacy_request: {}",
130
- exc.__class__.__name__,
130
+ "Skipping collection {} for privacy_request: {}",
131
131
  self.execution_node.address,
132
132
  self.resources.request.id,
133
133
  )
134
134
  self.log_skipped(action_type, exc)
135
135
  return default_return
136
136
  except SkippingConsentPropagation as exc:
137
+ traceback.print_exc()
137
138
  logger.warning(
138
139
  "Skipping consent propagation on collection {} for privacy_request: {}",
139
140
  self.execution_node.address,
@@ -16,7 +16,6 @@ from fides.api.schemas.storage.storage import ResponseFormat, StorageSecrets
16
16
  from fides.api.service.privacy_request.dsr_package.dsr_report_builder import (
17
17
  DsrReportBuilder,
18
18
  )
19
- from fides.api.service.storage.gcs import get_gcs_client
20
19
  from fides.api.service.storage.s3 import (
21
20
  create_presigned_url_for_s3,
22
21
  generic_upload_to_s3,
@@ -65,7 +64,7 @@ def encrypt_access_request_results(data: Union[str, bytes], request_id: str) ->
65
64
  def write_to_in_memory_buffer(
66
65
  resp_format: str, data: Dict[str, Any], privacy_request: PrivacyRequest
67
66
  ) -> BytesIO:
68
- """Write JSON/CSV data to in-memory file-like object to be passed to S3 or GCS. Encrypt data if encryption key/nonce
67
+ """Write JSON/CSV data to in-memory file-like object to be passed to S3. Encrypt data if encryption key/nonce
69
68
  has been cached for the given privacy request id
70
69
 
71
70
  :param resp_format: str, should be one of ResponseFormat
@@ -131,11 +130,7 @@ def upload_to_s3( # pylint: disable=R0913
131
130
  raise ValueError("Privacy request must be provided")
132
131
 
133
132
  try:
134
- s3_client = get_s3_client(
135
- auth_method,
136
- storage_secrets,
137
- assume_role_arn=CONFIG.credentials["storage"].get("aws_s3_assume_role_arn"),
138
- )
133
+ s3_client = get_s3_client(auth_method, storage_secrets)
139
134
 
140
135
  # handles file chunking
141
136
  try:
@@ -162,49 +157,6 @@ def upload_to_s3( # pylint: disable=R0913
162
157
  raise ValueError(f"The parameters you provided are incorrect: {e}")
163
158
 
164
159
 
165
- def upload_to_gcs(
166
- storage_secrets: Dict,
167
- data: Dict,
168
- bucket_name: str,
169
- file_key: str,
170
- resp_format: str,
171
- privacy_request: PrivacyRequest,
172
- auth_method: str,
173
- ) -> str:
174
- """Uploads access request data to a Google Cloud Storage bucket"""
175
- logger.info("Starting Google Cloud Storage upload of {}", file_key)
176
-
177
- try:
178
- storage_client = get_gcs_client(auth_method, storage_secrets)
179
- bucket = storage_client.bucket(bucket_name)
180
-
181
- blob = bucket.blob(file_key)
182
- in_memory_file = write_to_in_memory_buffer(resp_format, data, privacy_request)
183
- content_type = {
184
- ResponseFormat.json.value: "application/json",
185
- ResponseFormat.csv.value: "application/zip",
186
- ResponseFormat.html.value: "application/zip",
187
- }
188
- blob.upload_from_string(
189
- in_memory_file.getvalue(), content_type=content_type[resp_format]
190
- )
191
-
192
- logger.info("File {} uploaded to {}", file_key, blob.public_url)
193
-
194
- presigned_url = blob.generate_signed_url(
195
- version="v4",
196
- expiration=CONFIG.security.subject_request_download_link_ttl_seconds,
197
- method="GET",
198
- )
199
- return presigned_url
200
- except Exception as e:
201
- logger.error(
202
- "Encountered error while uploading and generating link for Google Cloud Storage object: {}",
203
- e,
204
- )
205
- raise e
206
-
207
-
208
160
  def upload_to_local(
209
161
  data: Dict,
210
162
  file_key: str,
@@ -22,10 +22,6 @@ def get_aws_session(
22
22
  if storage_secrets is None:
23
23
  # set to an empty dict to allow for more dynamic code downstream
24
24
  storage_secrets = {}
25
-
26
- stored_region_name = storage_secrets.get("region_name") # type: ignore
27
- stored_assume_role_arn: Optional[str] = storage_secrets.get("assume_role_arn") # type: ignore
28
-
29
25
  if auth_method == AWSAuthMethod.SECRET_KEYS.value:
30
26
  if not storage_secrets:
31
27
  err_msg = "Storage secrets not found for S3 storage."
@@ -37,10 +33,12 @@ def get_aws_session(
37
33
  aws_secret_access_key=storage_secrets[
38
34
  StorageSecrets.AWS_SECRET_ACCESS_KEY.value # type: ignore
39
35
  ],
40
- region_name=stored_region_name,
36
+ region_name=storage_secrets.get("region_name"), # type: ignore
41
37
  )
42
38
  elif auth_method == AWSAuthMethod.AUTOMATIC.value:
43
- session = Session(region_name=stored_region_name)
39
+ session = Session(
40
+ region_name=storage_secrets.get("region_name"), # type: ignore
41
+ )
44
42
  logger.info("Successfully created automatic session")
45
43
  else:
46
44
  logger.error("AWS auth method not supported: {}", auth_method)
@@ -50,13 +48,20 @@ def get_aws_session(
50
48
  sts_client = session.client("sts")
51
49
  sts_client.get_caller_identity()
52
50
 
53
- target_assume_role_arn = assume_role_arn or stored_assume_role_arn
54
- if target_assume_role_arn:
51
+ if assume_role_arn:
55
52
  try:
56
- return get_assumed_role_session(
57
- target_assume_role_arn,
58
- sts_client,
59
- stored_region_name,
53
+ response = sts_client.assume_role(
54
+ RoleArn=assume_role_arn, RoleSessionName="FidesAssumeRoleSession"
55
+ )
56
+ temp_credentials = response["Credentials"]
57
+ logger.info(
58
+ f"Assumed role {assume_role_arn} and got temporary credentials."
59
+ )
60
+ return Session(
61
+ aws_access_key_id=temp_credentials["AccessKeyId"],
62
+ aws_secret_access_key=temp_credentials["SecretAccessKey"],
63
+ aws_session_token=temp_credentials["SessionToken"],
64
+ region_name=storage_secrets.get("region_name"), # type: ignore
60
65
  )
61
66
  except ClientError as error:
62
67
  logger.exception(
@@ -67,22 +72,6 @@ def get_aws_session(
67
72
  return session
68
73
 
69
74
 
70
- def get_assumed_role_session(
71
- assume_role_arn: str, sts_client: Any, region_name: Optional[str] = None
72
- ) -> Session:
73
- response = sts_client.assume_role(
74
- RoleArn=assume_role_arn, RoleSessionName="FidesAssumeRoleSession"
75
- )
76
- temp_credentials = response["Credentials"]
77
- logger.info(f"Assumed role {assume_role_arn} and got temporary credentials.")
78
- return Session(
79
- aws_access_key_id=temp_credentials["AccessKeyId"],
80
- aws_secret_access_key=temp_credentials["SecretAccessKey"],
81
- aws_session_token=temp_credentials["SessionToken"],
82
- region_name=region_name,
83
- )
84
-
85
-
86
75
  def get_s3_client(
87
76
  auth_method: str,
88
77
  storage_secrets: Optional[Dict[StorageSecrets, Any]],
@@ -64,7 +64,7 @@ def build_user_consent_and_filtered_preferences_for_service(
64
64
  session: Session,
65
65
  is_notice_based: bool = False,
66
66
  ) -> Tuple[
67
- Optional[Union[bool, Dict[str, Dict[str, Any]]]],
67
+ Optional[Union[bool, Dict[str, UserConsentPreference]]],
68
68
  List[PrivacyPreferenceHistory],
69
69
  ]:
70
70
  """
@@ -109,7 +109,7 @@ def build_user_consent_and_filtered_preferences_for_service(
109
109
 
110
110
  # 1. NOTICE-BASED WORKFLOW
111
111
  if is_notice_based:
112
- notice_preference_map: Dict[str, Dict[str, Any]] = {}
112
+ notice_id_to_preference_map: Dict[str, UserConsentPreference] = {}
113
113
  # retrieve notices from the DB if they are associated with a relevant preference
114
114
  notices_with_preference: Query = session.query(PrivacyNotice).filter(
115
115
  PrivacyNotice.notice_key.in_(
@@ -125,16 +125,10 @@ def build_user_consent_and_filtered_preferences_for_service(
125
125
  ]
126
126
  # we only expect max 1 preference in this list
127
127
  if preference and preference[0]:
128
- notice_preference_map[notice.id] = {
129
- "preference": preference[0].preference,
130
- "notice_key": notice.notice_key,
131
- }
128
+ notice_id_to_preference_map[notice.id] = preference[0].preference # type: ignore[assignment]
132
129
  filtered_preferences.append(preference[0])
133
130
 
134
- return (
135
- notice_preference_map,
136
- filtered_preferences,
137
- )
131
+ return notice_id_to_preference_map, filtered_preferences
138
132
 
139
133
  # 2. GLOBAL (OPT-IN/OUT) WORKFLOW
140
134
  preference_to_propagate: UserConsentPreference = (
@@ -6,7 +6,6 @@ from pydantic import ValidationError
6
6
 
7
7
  from fides.api.schemas.storage.storage import (
8
8
  SUPPORTED_STORAGE_SECRETS,
9
- StorageSecretsGCS,
10
9
  StorageSecretsS3,
11
10
  StorageType,
12
11
  )
@@ -32,7 +31,6 @@ def get_schema_for_secrets(
32
31
  try:
33
32
  schema = {
34
33
  StorageType.s3: StorageSecretsS3,
35
- StorageType.gcs: StorageSecretsGCS,
36
34
  }[storage_type]
37
35
  except KeyError:
38
36
  raise ValueError(
@@ -97,29 +97,27 @@ class AWS_SES_Service:
97
97
 
98
98
  def validate_email_and_domain_status(self) -> None:
99
99
  """
100
- Validate that either the email or domain (or both) are verified in SES.
100
+ Validate that the email and domain are verified in SES.
101
101
  """
102
102
  email = self.messaging_config_details.email_from
103
103
  domain = self.messaging_config_details.domain
104
- identities = list(filter(None, (email, domain)))
105
-
106
- # Defensive code just in case, there should always be email_from or domain
107
- if not identities:
108
- raise AWS_SESException(
109
- "No identity (email_from or domain) configured for SES validation."
110
- )
111
104
 
112
105
  ses_client = self.get_ses_client()
113
106
  response = ses_client.get_identity_verification_attributes(
114
- Identities=identities
107
+ Identities=[email, domain]
115
108
  )
116
- attributes = response.get("VerificationAttributes", {})
117
-
118
- for identity in identities:
119
- status = attributes.get(identity, {}).get("VerificationStatus")
120
- if status != "Success":
121
- logger.error(f"{identity} is not verified in SES.")
122
- raise AWS_SESException(f"{identity} is not verified in SES.")
109
+ email_status = (
110
+ response["VerificationAttributes"].get(email, {}).get("VerificationStatus")
111
+ )
112
+ domain_status = (
113
+ response["VerificationAttributes"].get(domain, {}).get("VerificationStatus")
114
+ )
115
+ if email_status != "Success":
116
+ logger.error(f"Email {email} is not verified in SES.")
117
+ raise AWS_SESException(f"Email {email} is not verified in SES.")
118
+ if domain_status != "Success":
119
+ logger.error(f"Domain {domain} is not verified in SES.")
120
+ raise AWS_SESException(f"Domain {domain} is not verified in SES.")
123
121
 
124
122
  def send_email(
125
123
  self,
@@ -129,20 +127,13 @@ class AWS_SES_Service:
129
127
  ) -> None:
130
128
  """
131
129
  Send an email using AWS SES.
132
- Either `email_from` or `domain` must be verified in SES.
130
+ Both the from_email and domain set in the messaging config must be verified in SES.
133
131
  """
134
132
  self.validate_email_and_domain_status()
135
133
  ses_client = self.get_ses_client()
136
134
 
137
- from_address = self.messaging_config_details.email_from
138
- if not from_address:
139
- # If there is no email_from, there is a domain, and the domain was verified against SES.
140
- # When you verify a domain identity, you can send email from any subdomain or email address of the
141
- # verified domain without having to verify each one individually.
142
- from_address = f"noreply@{self.messaging_config_details.domain}"
143
-
144
135
  ses_client.send_email(
145
- Source=from_address,
136
+ Source=self.messaging_config_details.email_from,
146
137
  Destination={"ToAddresses": [to.strip()]},
147
138
  Message={
148
139
  "Subject": {"Data": subject},
@@ -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/e728309361a9758b.css" as="style"/><link rel="stylesheet" href="/_next/static/css/e728309361a9758b.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-cf42f5a0e9af0ace.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-dc66d9fb6547cb04.js" defer=""></script><script src="/_next/static/chunks/pages/404-b482dd9e6ba3397d.js" defer=""></script><script src="/_next/static/WiKelYdZvuyhqjL7rLRaz/_buildManifest.js" defer=""></script><script src="/_next/static/WiKelYdZvuyhqjL7rLRaz/_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":"WiKelYdZvuyhqjL7rLRaz","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/687135955af5b7e1.css" as="style"/><link rel="stylesheet" href="/_next/static/css/687135955af5b7e1.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-03e375f6d6b2c71b.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-1ce747bb4aa843da.js" defer=""></script><script src="/_next/static/chunks/pages/404-29560aa2e6a60963.js" defer=""></script><script src="/_next/static/P3RkpoojridGfvvbDI91a/_buildManifest.js" defer=""></script><script src="/_next/static/P3RkpoojridGfvvbDI91a/_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":"P3RkpoojridGfvvbDI91a","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(s,t,a,e,c,n,i,d,o,r,u,g,p,f,b,j,k,h,m,y,l,v,I,U,_,w,q,x,N,B,F,z,A,D,E,L,M,S,T,C,P,G,H,J,K,O,Q){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[w,"static/chunks/pages/index-e72904e316ede1b0.js"],"/404":["static/chunks/pages/404-29560aa2e6a60963.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[w,"static/chunks/pages/add-systems-a6926f7ec7ad10cf.js"],"/add-systems/manual":[s,t,e,c,n,b,a,r,j,k,y,q,i,"static/chunks/pages/add-systems/manual-58e9256e86916ecd.js"],"/add-systems/multiple":[s,t,a,r,l,x,"static/chunks/pages/add-systems/multiple-2392e3a101fae073.js"],"/ant-poc":["static/chunks/pages/ant-poc-404f3c9018952800.js"],"/consent":["static/chunks/pages/consent-75395dfc224cf44b.js"],"/consent/configure":[s,t,a,r,l,"static/chunks/pages/consent/configure-dba7848b760ba227.js"],"/consent/configure/add-vendors":[s,t,a,r,l,x,"static/chunks/pages/consent/configure/add-vendors-7dfe37b9f0ff9a3c.js"],"/consent/privacy-experience":[s,t,b,a,N,"static/chunks/pages/consent/privacy-experience-7eeeee3769e73f78.js"],"/consent/privacy-experience/new":[e,c,g,B,d,h,F,"static/chunks/pages/consent/privacy-experience/new-c02b14c50b19bd91.js"],"/consent/privacy-experience/[id]":[e,c,g,B,d,h,F,"static/chunks/pages/consent/privacy-experience/[id]-78de4bde88e18b0f.js"],"/consent/privacy-notices":[s,t,a,N,"static/chunks/pages/consent/privacy-notices-65091908d6296afc.js"],"/consent/privacy-notices/new":[e,c,g,z,d,h,A,"static/chunks/pages/consent/privacy-notices/new-487ae57dc7e2ded2.js"],"/consent/privacy-notices/[id]":[e,c,g,z,d,h,A,"static/chunks/pages/consent/privacy-notices/[id]-75c2ed6ba3de48cd.js"],"/consent/properties":[s,t,a,D,"static/chunks/pages/consent/properties-f67fda6a71d0a46b.js"],"/consent/reporting":[s,t,e,a,"static/chunks/pages/consent/reporting-7a1976c0d1aca8b6.js"],"/data-catalog":[s,t,e,c,n,a,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-75989f9732d90793.js"],"/data-catalog/[systemId]/projects":[s,t,e,c,n,a,p,v,i,"static/chunks/pages/data-catalog/[systemId]/projects-e76a07ee6ee8d55f.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[s,t,a,E,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-fa65c67ec8c4b5e6.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,t,e,c,n,a,p,v,L,i,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-ac033a16f043e6f9.js"],"/data-catalog/[systemId]/resources":[s,t,a,E,"static/chunks/pages/data-catalog/[systemId]/resources-305555b74c357bf2.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,t,e,c,n,a,p,v,L,i,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-71e26d262afcaea5.js"],"/data-discovery/action-center":[s,t,a,"static/chunks/pages/data-discovery/action-center-38476c697da53480.js"],"/data-discovery/action-center/[monitorId]":[s,t,e,c,n,a,o,k,"static/chunks/pages/data-discovery/action-center/[monitorId]-61eafb8444bffb76.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,t,e,c,n,a,o,r,k,y,i,"static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-6b3d1fe762c747d8.js"],"/data-discovery/activity":[s,t,a,"static/chunks/pages/data-discovery/activity-e7869f658e3017b9.js"],"/data-discovery/detection":[s,t,a,o,m,M,"static/chunks/pages/data-discovery/detection-22f55dc12354b4c6.js"],"/data-discovery/detection/[resourceUrn]":[s,t,a,o,m,M,"static/chunks/pages/data-discovery/detection/[resourceUrn]-1bcaa606739ea1c5.js"],"/data-discovery/discovery":[s,t,e,c,n,a,o,p,m,S,i,"static/chunks/pages/data-discovery/discovery-853be75f08b9ab5c.js"],"/data-discovery/discovery/[resourceUrn]":[s,t,e,c,n,a,o,p,m,S,i,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-86111c25dc30ef2b.js"],"/datamap":[s,t,"static/chunks/255-7db55b0e3a0f9dea.js",a,j,T,"static/chunks/pages/datamap-423172d31de8e9c6.js"],"/dataset":[s,t,u,a,f,"static/chunks/pages/dataset-f4d57b3432c57112.js"],"/dataset/new":[u,f,"static/chunks/pages/dataset/new-5aff1d01c6c30ad6.js"],"/dataset/[datasetId]":[s,t,"static/chunks/9729-fcf6ff4e3534e4a8.js",a,I,"static/chunks/pages/dataset/[datasetId]-eac517f43d5f53a8.js"],"/dataset/[datasetId]/[collectionName]":[s,t,e,c,n,U,a,I,i,"static/chunks/pages/dataset/[datasetId]/[collectionName]-06c19dca941edb14.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,t,e,c,n,U,a,I,i,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-704553f5329fb9d4.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-0faa9b3c4555e585.js"],"/datastore-connection/new":[u,b,f,C,"static/chunks/pages/datastore-connection/new-c804349a417a888b.js"],"/datastore-connection/[id]":[u,f,C,"static/chunks/pages/datastore-connection/[id]-b2b1168d0361baa8.js"],"/fides-js-docs":["static/chunks/2fbcc6de-a6c61724c327e9fa.js","static/chunks/e3251fe7-5777b5d778e6fffa.js",e,c,n,u,U,P,"static/css/ab65b8cc3144bfc8.css","static/chunks/905-8ab919e7b274ed50.js","static/chunks/pages/fides-js-docs-80b241bf6cddb72e.js"],"/integrations":[e,c,n,"static/chunks/6834-dcda0a8ed484775e.js",G,"static/chunks/pages/integrations-88e51c81a380ebad.js"],"/integrations/[id]":[s,t,e,c,n,a,G,"static/css/92c81f666644c594.css","static/chunks/pages/integrations/[id]-17191a759e167ca8.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,t,e,c,n,a,"static/chunks/pages/messaging-eef56c95b08aa24c.js"],"/messaging/add-template":[d,H,"static/chunks/pages/messaging/add-template-d441abb1f045940f.js"],"/messaging/[id]":[d,H,"static/chunks/pages/messaging/[id]-66f5fbadd8455805.js"],"/privacy-requests":[s,t,a,J,"static/chunks/pages/privacy-requests-3ac47981f1e2b0aa.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-b8c94b10ab90b061.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-d889076067104e56.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-3355b4803b2916f3.js"],"/privacy-requests/[id]":[e,c,n,J,"static/css/b89fc4b36b501cf6.css","static/chunks/pages/privacy-requests/[id]-54ea39f203182c53.js"],"/properties":[s,t,a,D,"static/chunks/pages/properties-9a7ac623370b7c00.js"],"/properties/add-property":[d,K,"static/chunks/pages/properties/add-property-bccb6ffab25aa214.js"],"/properties/[id]":[d,K,"static/chunks/pages/properties/[id]-f4fb941df069b7bf.js"],"/reporting/datamap":[s,t,e,c,n,P,a,j,T,"static/chunks/pages/reporting/datamap-fe743440d7eb007b.js"],"/settings/about":["static/chunks/pages/settings/about-4412a7b468b6d4bf.js"],"/settings/consent":["static/chunks/pages/settings/consent-cdc866af93898716.js"],"/settings/custom-fields":[s,t,a,"static/chunks/pages/settings/custom-fields-a7dc8113067dff42.js"],"/settings/domain-records":[s,t,a,"static/chunks/pages/settings/domain-records-d9088f5cd9fb2822.js"],"/settings/domains":["static/chunks/pages/settings/domains-2f03e981234c40ad.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-cf09ad896c7396a6.js"],"/settings/locations":[s,O,"static/chunks/pages/settings/locations-759564ca0ae62840.js"],"/settings/organization":["static/chunks/pages/settings/organization-5bcc7a6976e01a56.js"],"/settings/regulations":[s,O,"static/chunks/pages/settings/regulations-2dce4501fca920b3.js"],"/systems":[s,t,a,"static/chunks/pages/systems-820893393f1516ee.js"],"/systems/configure/[id]":[s,t,e,c,n,b,a,o,r,j,k,y,q,i,"static/chunks/pages/systems/configure/[id]-dd053a3bf2a9ca6c.js"],"/systems/configure/[id]/test-datasets":[u,f,"static/chunks/pages/systems/configure/[id]/test-datasets-0b47ff26897c1d9a.js"],"/taxonomy":["static/chunks/678d4732-50255cc09048e643.js",e,c,n,g,"static/chunks/570-c99f07161bd339cd.js","static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-8fccd670220dbf60.js"],"/user-management":[_,"static/chunks/pages/user-management-facb8c0128a44cb1.js"],"/user-management/new":[_,Q,"static/chunks/pages/user-management/new-082c3156175f9267.js"],"/user-management/profile/[id]":[_,Q,"static/chunks/pages/user-management/profile/[id]-d527d1d1635541df.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/ant-poc","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/fides-js-docs","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/consent","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/c78d26b1-88a3e1bacb2a03c2.js","static/chunks/6060-cb1ab5be7067bf7b.js","static/chunks/4481-288d74a33473cff7.js","static/chunks/2858-0b44609b6be7850b.js","static/chunks/2866-a73888c17a195cbe.js","static/chunks/9278-9b1b5970f0702668.js","static/css/d2d4e9a6923e6730.css","static/chunks/9282-1a48b10b114d01f4.js","static/chunks/6395-4224d6d26d1e8bb7.js","static/chunks/401-50974f107c2712fc.js","static/chunks/6527-0eed08abe252a918.js","static/chunks/4294-5b3aa9d605217915.js","static/chunks/6372-2aee10b79089521a.js","static/chunks/9327-4970d356f7000c0b.js","static/chunks/5277-e8a036319456127f.js","static/chunks/9951-66aad0602aadfbe2.js","static/chunks/146-d1820217dc36d46d.js","static/chunks/1376-92890c17ce39ca0d.js","static/chunks/3702-3d814671c31eaca3.js","static/chunks/5102-626b9ff42e904276.js","static/chunks/8934-ffa2b0509bc7a845.js","static/chunks/7751-3913b8c055f599e5.js","static/chunks/5487-9a2aecb0ec63d567.js","static/chunks/8702-d1c8296f9f6afc10.js","static/chunks/5480-1623dbacdf4e6794.js","static/css/972dc7eef106ee7c.css","static/chunks/3244-3d94bf3393366412.js","static/chunks/5826-1f4f74bf3b5348e4.js","static/chunks/6853-ca5dacd25c9ccb7c.js","static/chunks/9014-eeae6f581158e645.js","static/chunks/1817-6abbe957a53026d7.js","static/chunks/3615-5e2d062d684b8fa1.js","static/chunks/6954-127745bfdc5bc0b3.js","static/chunks/79-77cfed02164241ca.js","static/chunks/3872-c53d74aebd12cfd3.js","static/chunks/3855-237afbbea7f54707.js","static/chunks/2479-b4f7a1c7c711cb65.js","static/chunks/1904-281183a117e26585.js","static/chunks/9572-2b9b10e146130c85.js","static/chunks/9767-bf415d0daea960cd.js","static/chunks/9187-851756440f79cd75.js","static/chunks/5973-942ce645a4279587.js","static/chunks/1100-45c0634b4f51d10c.js","static/chunks/8433-c4c765833ab9cc07.js","static/chunks/4060-52fd85fb1e15a2b8.js","static/chunks/3086-d1ba90bc6ac9174b.js","static/chunks/4121-476f657b03a78965.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1100],{58754:function(e,t,n){var r=n(24246),i=n(77181),s=n(70788);t.Z=e=>{let{heading:t,breadcrumbItems:n,isSticky:a=!0,children:o,rightContent:l,style:u,...c}=e;return(0,r.jsxs)("div",{...c,style:a?{position:"sticky",top:"-24px",paddingTop:"24px",paddingBottom:"24px",paddingLeft:"40px",marginLeft:"-40px",paddingRight:"40px",marginRight:"-40px",marginTop:"-24px",left:0,zIndex:20,backgroundColor:"white",...u}:{paddingBottom:"24px",...u},children:[(0,r.jsxs)(i.jqI,{justify:"space-between",children:["string"==typeof t?(0,r.jsx)(i.X6q,{className:n||o?"pb-4":void 0,fontSize:"2xl","data-testid":"page-heading",children:t}):t,l&&(0,r.jsx)("div",{"data-testid":"page-header-right-content",children:l})]}),!!n&&(0,r.jsx)(s.m,{className:o?"pb-4":void 0,items:n,"data-testid":"page-breadcrumb"}),o]})}},10342:function(e,t,n){var r=n(24246),i=n(77181),s=n(91613);t.Z=e=>{let{title:t,tooltip:n,children:a,...o}=e;return(0,r.jsxs)(i.xuv,{borderRadius:"md",border:"1px solid",borderColor:"gray.200",...o,children:[(0,r.jsxs)(i.X6q,{as:"h3",fontSize:"sm",fontWeight:"semibold",color:"gray.700",py:4,px:6,backgroundColor:"gray.50",borderRadius:"md",textAlign:"left",children:[t,n?(0,r.jsx)(i.xvT,{as:"span",mx:1,children:(0,r.jsx)(s.Z,{label:n})}):void 0]}),(0,r.jsx)(i.Kqy,{p:6,spacing:6,children:a})]})}},70788:function(e,t,n){n.d(t,{m:function(){return u}});var r=n(24246),i=n(77181),s=n(79894),a=n.n(s),o=n(27378);let{Text:l}=i.AntTypography,u=e=>{let{items:t,...n}=e,s=(0,o.useMemo)(()=>null==t?void 0:t.map((e,n)=>{let s=n===t.length-1,o={...e},u=o.onClick&&!o.href;return("string"==typeof o.title&&(o.title=(0,r.jsx)(l,{style:{color:"inherit",maxWidth:s?void 0:400},ellipsis:!s,children:o.title})),u)?o.title=(0,r.jsx)(i.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,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"anticon align-text-bottom",children:o.icon}),o.title]})),o.href&&o.title&&(o.title=(0,r.jsx)(a(),{href:o.href,className:"ant-breadcrumb-link",children:o.title}),delete o.href)),o}),[t]);return(0,r.jsx)(i.zrq,{items:s,...n})}},67810:function(e,t,n){n.d(t,{Z:function(){return s}}),(r=i||(i={})).PRIVACY_REQUEST_REVIEW_APPROVE="privacy_request_review_approve",r.PRIVACY_REQUEST_REVIEW_DENY="privacy_request_review_deny",r.PRIVACY_REQUEST_RECEIPT="privacy_request_receipt",r.PRIVACY_REQUEST_COMPLETE_ACCESS="privacy_request_complete_access",r.PRIVACY_REQUEST_COMPLETE_DELETION="privacy_request_complete_deletion",r.SUBJECT_IDENTITY_VERIFICATION="subject_identity_verification";var r,i,s={[i.PRIVACY_REQUEST_COMPLETE_ACCESS]:"Access request completed",[i.PRIVACY_REQUEST_COMPLETE_DELETION]:"Erasure request completed",[i.PRIVACY_REQUEST_RECEIPT]:"Privacy request received",[i.PRIVACY_REQUEST_REVIEW_APPROVE]:"Privacy request approved",[i.PRIVACY_REQUEST_REVIEW_DENY]:"Privacy request denied",[i.SUBJECT_IDENTITY_VERIFICATION]:"Subject identity verification"}},20149:function(e,t,n){var r=n(24246),i=n(77830),s=n(77181),a=n(34090),o=n(86677),l=n(16134),u=n(10342),c=n(40324),d=n(51472),p=n(67810),m=n(64826);let g=()=>{var e;let t=(0,l.C)(m.Zp),n=(0,l.C)(m.G1);(0,m.gz)({page:t,size:n});let i=(0,l.C)(m.YO),{values:s,setFieldValue:o}=(0,a.u6)();return(0,r.jsx)(d.Z,{label:"Associated properties",addButtonLabel:"Add property",idField:"id",nameField:"name",allItems:i.map(e=>({id:e.id,name:e.name})),values:null!==(e=s.properties)&&void 0!==e?e:[],setValues:e=>o("properties",e),draggable:!0,maxHeight:100,baseTestId:"property"})};t.Z=e=>{let{template:t,handleSubmit:n,handleDelete:l}=e,d=(0,o.useRouter)(),m=()=>{d.push(i.q)},f={type:t.type,content:t.content,properties:t.properties||[],is_enabled:t.is_enabled,id:t.id||""};return(0,r.jsx)(a.J9,{enableReinitialize:!0,initialValues:f,onSubmit:n,children:e=>{let{dirty:t,isValid:n,isSubmitting:i}=e;return(0,r.jsxs)(a.l0,{style:{paddingTop:"12px",paddingBottom:"12px"},children:[(0,r.jsx)(s.xuv,{py:3,children:(0,r.jsxs)(u.Z,{title:"".concat(p.Z[f.type]),children:[(0,r.jsx)(c.j0,{isRequired:!0,label:"Email subject",name:"content.subject",variant:"stacked"}),(0,r.jsx)(c.Ks,{isRequired:!0,label:"Message body",name:"content.body",value:"test",variant:"stacked",resize:!0}),(0,r.jsx)(s.xuv,{py:3,children:(0,r.jsx)(g,{})}),(0,r.jsx)(c.w8,{name:"is_enabled",label:"Enable message",variant:"switchFirst"})]})}),(0,r.jsxs)(s.kCb,{justifyContent:"space-between",width:"100%",paddingTop:2,children:[f.id&&l&&(0,r.jsx)(s.wpx,{"data-testid":"delete-template-button",loading:!1,className:"mr-3",onClick:l,children:"Delete"}),(0,r.jsxs)(s.kCb,{justifyContent:"right",width:"100%",paddingTop:2,children:[(0,r.jsx)(s.wpx,{loading:!1,className:"mr-3",onClick:m,children:"Cancel"}),(0,r.jsx)(s.wpx,{htmlType:"submit",type:"primary",disabled:i||!t||!n,loading:i,"data-testid":"submit-btn",children:"Save"})]})]})]})}})}},5058:function(e,t,n){n.d(t,{Vw:function(){return s},ms:function(){return r},pS:function(){return i},vm:function(){return a}});let{useGetSummaryMessagingTemplatesQuery:r,usePutMessagingTemplateByIdMutation:i,useCreateMessagingTemplateByTypeMutation:s,usePatchMessagingTemplateByIdMutation:a}=n(78780).u.injectEndpoints({endpoints:e=>({getSummaryMessagingTemplates:e.query({query:e=>({method:"GET",url:"plus/messaging/templates/summary",params:e}),providesTags:()=>["Property-Specific Messaging Templates"]}),putMessagingTemplateById:e.mutation({query:e=>{let{templateId:t,template:n}=e;return{url:"plus/messaging/templates/".concat(t),method:"PUT",body:n}},invalidatesTags:()=>["Property-Specific Messaging Templates"]}),patchMessagingTemplateById:e.mutation({query:e=>{let{templateId:t,template:n}=e;return{url:"plus/messaging/templates/".concat(t),method:"PATCH",body:n}},invalidatesTags:()=>["Property-Specific Messaging Templates"]}),createMessagingTemplateByType:e.mutation({query:e=>{let{templateType:t,template:n}=e;return{url:"plus/messaging/templates/".concat(t),method:"POST",body:n}},invalidatesTags:()=>["Property-Specific Messaging Templates"]})})})},47466:function(e,t,n){n.d(t,{KC:function(){return a},ew:function(){return o},gQ:function(){return s},jM:function(){return r},lE:function(){return i}});let{useGetMessagingTemplatesQuery:r,useUpdateMessagingTemplatesMutation:i,useGetMessagingTemplateByIdQuery:s,useGetMessagingTemplateDefaultQuery:a,useDeleteMessagingTemplateByIdMutation:o}=n(78780).u.injectEndpoints({endpoints:e=>({getMessagingTemplates:e.query({query:()=>({url:"messaging/templates"}),providesTags:()=>["Messaging Templates"]}),updateMessagingTemplates:e.mutation({query:e=>({url:"messaging/templates",method:"PUT",body:e}),invalidatesTags:()=>["Messaging Templates"]}),getMessagingTemplateById:e.query({query:e=>({url:"/messaging/templates/".concat(e)}),providesTags:()=>["Property-Specific Messaging Templates"]}),getMessagingTemplateDefault:e.query({query:e=>({url:"/messaging/templates/default/".concat(e)})}),deleteMessagingTemplateById:e.mutation({query:e=>({url:"/messaging/templates/".concat(e),method:"DELETE"}),invalidatesTags:()=>["Property-Specific Messaging Templates"]})})})},31883:function(e,t,n){n.d(t,{Bw:function(){return r.Bw},D4:function(){return r.D4}});var r=n(19043)},11055:function(e,t,n){n.d(t,{M:function(){return d}});var r=n(24246),i=n(29427),s=n(27378),a=n(40976),o=n(18397),l=n(42308),u=n(25431),c=n(39556);let d=(0,s.forwardRef)(function({children:e,as:t="ul",axis:n="y",onReorder:d,values:g,...f},y){let h=(0,l.h)(()=>o.E[t]),x=[],E=(0,s.useRef)(!1);return(0,i.k)(!!g,"Reorder.Group must be provided a values prop"),(0,s.useEffect)(()=>{E.current=!1}),(0,r.jsx)(h,{...f,ref:y,ignoreStrict:!0,children:(0,r.jsx)(a.Y.Provider,{value:{axis:n,registerItem:(e,t)=>{let r=x.findIndex(t=>e===t.value);-1!==r?x[r].layout=t[n]:x.push({value:e,layout:t[n]}),x.sort(m)},updateOrder:(e,t,n)=>{if(E.current)return;let r=function(e,t,n,r){if(!r)return e;let i=e.findIndex(e=>e.value===t);if(-1===i)return e;let s=r>0?1:-1,a=e[i+s];if(!a)return e;let o=e[i],l=a.layout,d=(0,c.t)(l.min,l.max,.5);return 1===s&&o.layout.max+n>d||-1===s&&o.layout.min+n<d?(0,u.uo)(e,i,i+s):e}(x,e,t,n);x!==r&&(E.current=!0,d(r.map(p).filter(e=>-1!==g.indexOf(e))))}},children:e})})});function p(e){return e.value}function m(e,t){return e.layout.min-t.layout.min}},7078:function(e,t,n){n.d(t,{e:function(){return T}});var r=n(24246),i=n(29427),s=n(27378),a=n(40976),o=n(18397),l=n(42308),u=n(69222),c=n(67412);function d(e){let t=(0,l.h)(()=>(0,u.BX)(e)),{isStatic:n}=(0,s.useContext)(c._);if(n){let[,n]=(0,s.useState)(e);(0,s.useEffect)(()=>t.on("change",n),[])}return t}var p=n(13998);let m=e=>e&&"object"==typeof e&&e.mix,g=e=>m(e)?e.mix:void 0;var f=n(64306),y=n(95984);function h(e,t){let n=d(t()),r=()=>n.set(t());return r(),(0,f.L)(()=>{let t=()=>y.Wi.preRender(r,!1,!0),n=e.map(e=>e.on("change",t));return()=>{n.forEach(e=>e()),(0,y.Pn)(r)}}),n}function x(e,t){let n=(0,l.h)(()=>[]);return h(e,()=>{n.length=0;let r=e.length;for(let t=0;t<r;t++)n[t]=e[t].get();return t(n)})}var E=n(3522);function v(e,t=0){return(0,E.i)(e)?e:d(t)}let T=(0,s.forwardRef)(function({children:e,style:t={},value:n,as:c="li",onDrag:d,layout:m=!0,...f},y){let E=(0,l.h)(()=>o.E[c]),T=(0,s.useContext)(a.Y),b={x:v(t.x),y:v(t.y)},_=function(e,t,n,r){if("function"==typeof e)return function(e){u.S1.current=[],e();let t=h(u.S1.current,e);return u.S1.current=void 0,t}(e);let i="function"==typeof t?t:function(...e){let t=!Array.isArray(e[0]),n=t?0:-1,r=e[0+n],i=e[1+n],s=e[2+n],a=e[3+n],o=(0,p.s)(i,s,{mixer:g(s[0]),...a});return t?o(r):o}(t,void 0,void 0);return Array.isArray(e)?x(e,i):x([e],([e])=>i(e))}([b.x,b.y],([e,t])=>e||t?1:"unset");(0,i.k)(!!T,"Reorder.Item must be a child of Reorder.Group");let{axis:C,registerItem:j,updateOrder:R}=T;return(0,r.jsx)(E,{drag:C,...f,dragSnapToOrigin:!0,style:{...t,x:b.x,y:b.y,zIndex:_},layout:m,onDrag:(e,t)=>{let{velocity:r}=t;r[C]&&R(n,b[C].get(),r[C]),d&&d(e,t)},onLayoutMeasure:e=>j(n,e),ref:y,ignoreStrict:!0,children:e})})},40976:function(e,t,n){n.d(t,{Y:function(){return r}});let r=(0,n(27378).createContext)(null)},47397:function(e,t,n){n.d(t,{o:function(){return a}});var r=n(42308);class i{constructor(){this.componentControls=new Set}subscribe(e){return this.componentControls.add(e),()=>this.componentControls.delete(e)}start(e,t){this.componentControls.forEach(n=>{n.start(e.nativeEvent||e,t)})}}let s=()=>new i;function a(){return(0,r.h)(s)}},76649:function(e,t,n){n.d(t,{Ln:function(){return r}});let r=(e,t)=>s(e,t),i=Symbol("SOME"),s=(e,t)=>"string"==typeof e?e===typeof t:Array.isArray(e)?i in e?e.some(e=>s(e,t)):!!Array.isArray(t)&&(0===e.length||t.every(t=>e.some(e=>s(e,t)))):"object"==typeof t&&null!==t&&Object.entries(e).every(([e,n])=>s(n,t[e]));class a{static narrow(e){return new a(t=>r(e,t))}constructor(e){this.NF=void 0,this.NF=e}satisfied(e){return this.NF(e)}build(e){return e}and(e){let t=this.NF,n=e instanceof a?e.NF:e instanceof Function?e:t=>r(e,t);return new a(e=>t(e)&&n(e))}}new a(e=>!0)}}]);