ethyca-fides 2.58.2rc0__py2.py3-none-any.whl → 2.58.3b1__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 (266) hide show
  1. {ethyca_fides-2.58.2rc0.dist-info → ethyca_fides-2.58.3b1.dist-info}/METADATA +20 -11
  2. {ethyca_fides-2.58.2rc0.dist-info → ethyca_fides-2.58.3b1.dist-info}/RECORD +225 -216
  3. {ethyca_fides-2.58.2rc0.dist-info → ethyca_fides-2.58.3b1.dist-info}/WHEEL +1 -1
  4. {ethyca_fides-2.58.2rc0.dist-info → ethyca_fides-2.58.3b1.dist-info}/entry_points.txt +0 -1
  5. fides/_version.py +3 -3
  6. fides/api/alembic/migrations/versions/67d01c4e124e_add_reject_all_mechanism_to_privacy_.py +56 -0
  7. fides/api/alembic/migrations/versions/6e565c16dae1_add_tcf_publisher_restrictions.py +107 -0
  8. fides/api/alembic/migrations/versions/9288f729cac4_add_tcf_configuration_fk_to_experience_.py +62 -0
  9. fides/api/alembic/migrations/versions/99c603c1b8f9_add_password_login_enabled_and_totp_secret_to_fidesuser.py +45 -0
  10. fides/api/api/deps.py +38 -2
  11. fides/api/api/v1/endpoints/user_endpoints.py +8 -12
  12. fides/api/cryptography/identity_salt.py +12 -13
  13. fides/api/custom_types.py +6 -1
  14. fides/api/db/base.py +5 -0
  15. fides/api/db/system.py +1 -3
  16. fides/api/migrations/hash_migration_job.py +2 -2
  17. fides/api/models/attachment.py +80 -11
  18. fides/api/models/comment.py +45 -15
  19. fides/api/models/detection_discovery.py +31 -0
  20. fides/api/models/fides_user.py +26 -9
  21. fides/api/models/fides_user_invite.py +2 -0
  22. fides/api/models/privacy_experience.py +68 -0
  23. fides/api/models/privacy_request/privacy_request.py +23 -6
  24. fides/api/models/tcf_publisher_restrictions.py +465 -0
  25. fides/api/schemas/connection_configuration/connection_config.py +30 -16
  26. fides/api/schemas/user.py +5 -1
  27. fides/api/service/deps.py +9 -0
  28. fides/api/service/storage/s3.py +14 -1
  29. fides/api/task/graph_task.py +1 -1
  30. fides/api/util/collection_util.py +48 -9
  31. fides/cli/commands/pull.py +77 -13
  32. fides/config/database_settings.py +46 -0
  33. fides/core/api.py +2 -1
  34. fides/core/pull.py +38 -7
  35. fides/service/error_handling/__init__.py +0 -0
  36. fides/service/error_handling/error_handler.py +202 -0
  37. fides/service/user/__init__.py +0 -0
  38. fides/service/user/user_service.py +140 -0
  39. fides/ui-build/static/admin/404.html +1 -1
  40. fides/ui-build/static/admin/_next/static/Phr0wJQrVglnj5svYDeUY/_buildManifest.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/1376-f2e68d1cfdacfd48.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/146-9567a3d2f9e21b83.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/1817-5c32a7592d18a859.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/1904-689b67a43153d56c.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/2479-bf5586191c72fb2b.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/3244-c728351365b77871.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/3702-70f90912a76ecef3.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/{3855-b6b7865dedd7bc2a.js → 3855-c02445526594fc1f.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/{3872-4e053c20d546f027.js → 3872-0b61e674a790491b.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/401-839481005c1ba95e.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/{4060-8d165e1236ea521a.js → 4060-fd2f97afa5ba80d4.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/4121-28beb1c0ce3330b6.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/4481-865277e9623e6014.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/5102-626b9ff42e904276.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/{5480-f49696df5e8ae500.js → 5480-ff3e05a015ee2799.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/{5487-3ad50d21cdbc9209.js → 5487-f281d138cb89b5c9.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/5973-28d2af853d8498d7.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/{6372-ca9c12ac8902365b.js → 6372-8479ec83d73af02b.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/6395-4224d6d26d1e8bb7.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/{6853-8941824350c3c1a8.js → 6853-3562089cc16a6799.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/{6954-3b887fb444f9228c.js → 6954-23438f7f9729748b.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/{7751-a8f31c062d4cb09d.js → 7751-95349028f1ee3fb5.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/{79-f9b948ebb186900f.js → 79-488979db197d250c.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/8934-ffa2b0509bc7a845.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/9572-82484a4dd5ebc57e.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/9767-d1d54cb9b74c0693.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/9951-8425f24ce61496bd.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/{main-24f422f93845a596.js → main-090643377c8254e6.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/{main-app-94a0711202e08b15.js → main-app-59156a9331ac7bce.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-fc89ce7bed454c84.js → _app-fadef5a6a65d3ec4.js} +8 -8
  71. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-58e9256e86916ecd.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-ba975134a85588f8.js → multiple-2392e3a101fae073.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-d258f0c25fa020bf.js → add-systems-661ff00f91fe62df.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-b34e5324461d0c87.js → add-vendors-7dfe37b9f0ff9a3c.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-723cc3d4f5740ea6.js → configure-dba7848b760ba227.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-78de4bde88e18b0f.js +1 -0
  77. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a9d9402c219d13e5.js → new-c02b14c50b19bd91.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-7dcbcd6f74029d90.js +1 -0
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-c27810fc7d8ad4c0.js +1 -0
  80. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-788cf0e34829af46.js → reporting-71c8a8557a0fb316.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-900004e402c31797.js → data-catalog-6dae602b509b00b5.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-f149a0df946c05db.js +1 -0
  83. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-c5b3283cddb68c19.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-38476c697da53480.js +1 -0
  85. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-36ce3e322670e082.js +1 -0
  86. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-054ca46a782e99a5.js → [resourceUrn]-1bcaa606739ea1c5.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-b75dd3e4306ac18e.js → detection-22f55dc12354b4c6.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-1da20aeb6fc995e4.js → [resourceUrn]-86111c25dc30ef2b.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-cad50b0cc6d1050c.js → discovery-853be75f08b9ab5c.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-8cb714cdd44ac40e.js → datamap-423172d31de8e9c6.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-803c1b577ab17ae3.js → new-afb5d98731bc1bb1.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-fa743ddc7f89d76b.js → dataset-13e06b0a4a8c114c.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-bbe1ca2793798e6b.js → [id]-d796cf4c25d0b988.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-abc17fef69cd951b.js → new-814849a549132ffa.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-be295129568a929c.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/pages/{index-bfaacdb55a5a6c9f.js → index-b0926c4083d4ac88.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-dadebdf2d6fbcc64.js +1 -0
  98. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-eef56c95b08aa24c.js +1 -0
  99. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-b1d39bb680cfd6d2.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-ea8c82f36520e542.js +1 -0
  101. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-2a56dc41a292a468.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-d85c0d16ba09ba35.js → privacy-requests-f394d59981a4f50c.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-afedc48ef4e7f858.js → datamap-4e04234aa5dff9f8.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-b359f061d3b9d455.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-dcf102352d4d4d98.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-2f03e981234c40ad.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-a08693d0d1e10bc8.js → organization-b208f9fd45ebb829.js} +1 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-151571cff4e85894.js → test-datasets-37c8930711ca2b8e.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-dd053a3bf2a9ca6c.js +1 -0
  110. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-abd68fc5ddde5482.js → systems-4f07a39a7def714a.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-ec35b1f86d536b75.js +1 -0
  112. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-be690621a944bfe2.js → new-082c3156175f9267.js} +1 -1
  113. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-963b0dbbf93b9e49.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-6c9ad62479a7d03e.js → user-management-cb40808c1509f191.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/css/687135955af5b7e1.css +1 -0
  116. fides/ui-build/static/admin/_next/static/css/b89fc4b36b501cf6.css +1 -0
  117. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  118. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  119. fides/ui-build/static/admin/add-systems.html +1 -1
  120. fides/ui-build/static/admin/ant-poc.html +1 -1
  121. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  122. fides/ui-build/static/admin/consent/configure.html +1 -1
  123. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  124. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  125. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  126. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  127. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  128. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  129. fides/ui-build/static/admin/consent/properties.html +1 -1
  130. fides/ui-build/static/admin/consent/reporting.html +1 -1
  131. fides/ui-build/static/admin/consent.html +1 -1
  132. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  133. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  134. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  135. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  136. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  137. fides/ui-build/static/admin/data-catalog.html +1 -1
  138. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  139. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  140. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  141. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  142. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  143. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  144. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  145. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  146. fides/ui-build/static/admin/datamap.html +1 -1
  147. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  148. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  149. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  150. fides/ui-build/static/admin/dataset/new.html +1 -1
  151. fides/ui-build/static/admin/dataset.html +1 -1
  152. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  153. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  154. fides/ui-build/static/admin/datastore-connection.html +1 -1
  155. fides/ui-build/static/admin/images/connector-logos/website.svg +10 -0
  156. fides/ui-build/static/admin/index.html +1 -1
  157. fides/ui-build/static/admin/integrations/[id].html +1 -1
  158. fides/ui-build/static/admin/integrations.html +1 -1
  159. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  160. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  161. fides/ui-build/static/admin/lib/fides-tcf.js +4 -4
  162. fides/ui-build/static/admin/lib/fides.js +3 -3
  163. fides/ui-build/static/admin/login/[provider].html +1 -1
  164. fides/ui-build/static/admin/login.html +1 -1
  165. fides/ui-build/static/admin/messaging/[id].html +1 -1
  166. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  167. fides/ui-build/static/admin/messaging.html +1 -1
  168. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  169. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  170. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  171. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  172. fides/ui-build/static/admin/privacy-requests.html +1 -1
  173. fides/ui-build/static/admin/properties/[id].html +1 -1
  174. fides/ui-build/static/admin/properties/add-property.html +1 -1
  175. fides/ui-build/static/admin/properties.html +1 -1
  176. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  177. fides/ui-build/static/admin/settings/about.html +1 -1
  178. fides/ui-build/static/admin/settings/consent.html +1 -1
  179. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  180. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  181. fides/ui-build/static/admin/settings/domains.html +1 -1
  182. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  183. fides/ui-build/static/admin/settings/locations.html +1 -1
  184. fides/ui-build/static/admin/settings/organization.html +1 -1
  185. fides/ui-build/static/admin/settings/regulations.html +1 -1
  186. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  187. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  188. fides/ui-build/static/admin/systems.html +1 -1
  189. fides/ui-build/static/admin/taxonomy.html +1 -1
  190. fides/ui-build/static/admin/user-management/new.html +1 -1
  191. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  192. fides/ui-build/static/admin/user-management.html +1 -1
  193. fides/api/service/user/fides_user_service.py +0 -128
  194. fides/ui-build/static/admin/_next/static/chunks/1150-035a721a04f4451e.js +0 -1
  195. fides/ui-build/static/admin/_next/static/chunks/1376-5cea5ef9362215e8.js +0 -1
  196. fides/ui-build/static/admin/_next/static/chunks/2397-ee53235fb21b5e97.js +0 -1
  197. fides/ui-build/static/admin/_next/static/chunks/3412-7ec8751b8182e1bf.js +0 -1
  198. fides/ui-build/static/admin/_next/static/chunks/355-8a77c9a1cd027f2e.js +0 -1
  199. fides/ui-build/static/admin/_next/static/chunks/4450-36234280bee624ff.js +0 -1
  200. fides/ui-build/static/admin/_next/static/chunks/4481-aab99ff80f707473.js +0 -1
  201. fides/ui-build/static/admin/_next/static/chunks/4723-0a3c5e2ce143a7d0.js +0 -1
  202. fides/ui-build/static/admin/_next/static/chunks/5258-0658dc2274df6832.js +0 -1
  203. fides/ui-build/static/admin/_next/static/chunks/5973-52aee296edc44f7e.js +0 -1
  204. fides/ui-build/static/admin/_next/static/chunks/6315-fa1519cdf080f42d.js +0 -1
  205. fides/ui-build/static/admin/_next/static/chunks/7453-39761c38da31257e.js +0 -1
  206. fides/ui-build/static/admin/_next/static/chunks/7980-4bd08957448dea32.js +0 -1
  207. fides/ui-build/static/admin/_next/static/chunks/8499-43606100edf42fdf.js +0 -1
  208. fides/ui-build/static/admin/_next/static/chunks/9046-04bd7becea207cb1.js +0 -1
  209. fides/ui-build/static/admin/_next/static/chunks/9767-1a23925d2cb27b51.js +0 -1
  210. fides/ui-build/static/admin/_next/static/chunks/9999-637e0e5341f15f4a.js +0 -1
  211. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-9acaab973dfe86e2.js +0 -1
  212. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-fb75fa0aea77678d.js +0 -1
  213. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-c946b33b0322b8ad.js +0 -1
  214. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-ea57f9d6ad17e957.js +0 -1
  215. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-b66831fdafcdf67c.js +0 -1
  216. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5f9ef1f99818117c.js +0 -1
  217. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-d001337d1bb73bd1.js +0 -1
  218. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-11b3ce9f61d9bfe9.js +0 -1
  219. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-a78a73b65929853a.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-d4329043219fed9b.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-1e60754abec1ee6b.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-fe765154315782cf.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-f5f7a8069909ef24.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-9f7eaad05e5b9292.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-89524101b7279f6e.js +0 -1
  226. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-52d030b1db2ca1b9.js +0 -1
  227. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-24cba38685dc872c.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-4f5a28226575c976.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-16b4d75c49276add.js +0 -1
  230. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-78eaf933f755bfe8.js +0 -1
  231. fides/ui-build/static/admin/_next/static/css/113d823fe71f6af0.css +0 -1
  232. fides/ui-build/static/admin/_next/static/css/15fb7d4837a1de34.css +0 -1
  233. fides/ui-build/static/admin/_next/static/o0mKeH0cB6eAYV6qOlVD0/_buildManifest.js +0 -1
  234. {ethyca_fides-2.58.2rc0.dist-info → ethyca_fides-2.58.3b1.dist-info/licenses}/LICENSE +0 -0
  235. {ethyca_fides-2.58.2rc0.dist-info → ethyca_fides-2.58.3b1.dist-info}/top_level.txt +0 -0
  236. /fides/ui-build/static/admin/_next/static/{o0mKeH0cB6eAYV6qOlVD0 → Phr0wJQrVglnj5svYDeUY}/_ssgManifest.js +0 -0
  237. /fides/ui-build/static/admin/_next/static/chunks/{1100-053fc6b76c65a00f.js → 1100-45c0634b4f51d10c.js} +0 -0
  238. /fides/ui-build/static/admin/_next/static/chunks/{3086-b5054ec2c75700b9.js → 3086-d1ba90bc6ac9174b.js} +0 -0
  239. /fides/ui-build/static/admin/_next/static/chunks/{5826-e5dcb4e68cfe6289.js → 5826-1f4f74bf3b5348e4.js} +0 -0
  240. /fides/ui-build/static/admin/_next/static/chunks/{8433-b3008ecaf9834e7f.js → 8433-c4c765833ab9cc07.js} +0 -0
  241. /fides/ui-build/static/admin/_next/static/chunks/{9282-2bfbdca45e84e810.js → 9282-1a48b10b114d01f4.js} +0 -0
  242. /fides/ui-build/static/admin/_next/static/chunks/{9327-2cba327d10586683.js → 9327-4970d356f7000c0b.js} +0 -0
  243. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-b202c0d8f6fc75c3.js → 404-29560aa2e6a60963.js} +0 -0
  244. /fides/ui-build/static/admin/_next/static/chunks/pages/{ant-poc-b9932971a479f3a7.js → ant-poc-404f3c9018952800.js} +0 -0
  245. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-72251b48e2e03a1e.js → [id]-75c2ed6ba3de48cd.js} +0 -0
  246. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-9611dd42856d6062.js → new-487ae57dc7e2ded2.js} +0 -0
  247. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-e5748812ba055a56.js → properties-f67fda6a71d0a46b.js} +0 -0
  248. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-39d65f13cc8f1cf8.js → consent-75395dfc224cf44b.js} +0 -0
  249. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-a29850536c85d4b8.js → [projectUrn]-fa65c67ec8c4b5e6.js} +0 -0
  250. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-c44ce244122e96d5.js → projects-e76a07ee6ee8d55f.js} +0 -0
  251. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-d79551d4c64c398c.js → [...subfieldNames]-704553f5329fb9d4.js} +0 -0
  252. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-7e5df4a0de7540bb.js → [collectionName]-06c19dca941edb14.js} +0 -0
  253. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-6ba18f92ba561114.js → [datasetId]-eac517f43d5f53a8.js} +0 -0
  254. /fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-ef8000d7388dc915.js → integrations-373fb3a596099fc9.js} +0 -0
  255. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-ad02e019b2467958.js → [id]-66f5fbadd8455805.js} +0 -0
  256. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-f9693cb6a0b7ded8.js → add-template-d441abb1f045940f.js} +0 -0
  257. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-2987edc77388e85a.js → configure-b8c94b10ab90b061.js} +0 -0
  258. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-94e2faa73dd6a3e6.js → [id]-f4fb941df069b7bf.js} +0 -0
  259. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-630a6a3dd6502ba6.js → add-property-bccb6ffab25aa214.js} +0 -0
  260. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-20ca2f963906674b.js → properties-9a7ac623370b7c00.js} +0 -0
  261. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-a49d0f84cf0cf05e.js → about-4412a7b468b6d4bf.js} +0 -0
  262. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-fa42d8f18df44927.js → domain-records-d9088f5cd9fb2822.js} +0 -0
  263. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-6fd6071e2009b8f2.js → email-templates-cf09ad896c7396a6.js} +0 -0
  264. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-66c757325cb58467.js → locations-759564ca0ae62840.js} +0 -0
  265. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-c6c239996cfa6ae8.js → regulations-2dce4501fca920b3.js} +0 -0
  266. /fides/ui-build/static/admin/_next/static/chunks/{webpack-2c7ccac5843c4d8e.js → webpack-03e375f6d6b2c71b.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.45.1)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -1,3 +1,2 @@
1
1
  [console_scripts]
2
2
  fides = fides.cli:cli
3
-
fides/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-09T11:48:07+0200",
11
+ "date": "2025-04-09T09:35:48-0700",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "90178f03d530f5525b2acc955bdea0cde7751c7a",
15
- "version": "2.58.2rc0"
14
+ "full-revisionid": "ad12d73be3bfe01cd2fd5a4a1145760b09639d83",
15
+ "version": "2.58.3b1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,56 @@
1
+ """add_reject_all_mechanism_to_privacy_experience_config
2
+
3
+ Revision ID: 67d01c4e124e
4
+ Revises: 1d2f04ac19f2
5
+ Create Date: 2025-03-27 15:26:24.635947
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "67d01c4e124e"
15
+ down_revision = "1d2f04ac19f2"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ # ### commands auto generated by Alembic - please adjust! ###
22
+
23
+ # Add the reject all mechanism enum and column
24
+ op.execute(
25
+ "CREATE TYPE rejectallmechanism AS ENUM ('REJECT_ALL', 'REJECT_CONSENT_ONLY')"
26
+ )
27
+ op.add_column(
28
+ "privacyexperienceconfig",
29
+ sa.Column(
30
+ "reject_all_mechanism",
31
+ sa.Enum("REJECT_ALL", "REJECT_CONSENT_ONLY", name="rejectallmechanism"),
32
+ nullable=True,
33
+ ),
34
+ )
35
+ op.add_column(
36
+ "privacyexperienceconfighistory",
37
+ sa.Column(
38
+ "reject_all_mechanism",
39
+ sa.Enum("REJECT_ALL", "REJECT_CONSENT_ONLY", name="rejectallmechanism"),
40
+ nullable=True,
41
+ ),
42
+ )
43
+
44
+ # Data migration - set the reject_all_mechanism for all TCF experience configs to REJECT_ALL
45
+ op.execute(
46
+ "UPDATE privacyexperienceconfig SET reject_all_mechanism = 'REJECT_ALL' WHERE component = 'tcf_overlay'"
47
+ )
48
+ # ### end Alembic commands ###
49
+
50
+
51
+ def downgrade():
52
+ # ### commands auto generated by Alembic - please adjust! ###
53
+ op.drop_column("privacyexperienceconfig", "reject_all_mechanism")
54
+ op.drop_column("privacyexperienceconfighistory", "reject_all_mechanism")
55
+ op.execute("DROP TYPE IF EXISTS rejectallmechanism")
56
+ # ### end Alembic commands ###
@@ -0,0 +1,107 @@
1
+ """Add TCF Publisher Restrictions
2
+
3
+ Revision ID: 6e565c16dae1
4
+ Revises: 67d01c4e124e
5
+ Create Date: 2025-04-02 12:35:34.105607
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "6e565c16dae1"
15
+ down_revision = "67d01c4e124e"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ # Create tcf_configuration table
22
+ op.create_table(
23
+ "tcf_configuration",
24
+ sa.Column("id", sa.String(length=255), nullable=False),
25
+ sa.Column(
26
+ "created_at",
27
+ sa.DateTime(timezone=True),
28
+ server_default=sa.text("now()"),
29
+ nullable=True,
30
+ ),
31
+ sa.Column(
32
+ "updated_at",
33
+ sa.DateTime(timezone=True),
34
+ server_default=sa.text("now()"),
35
+ nullable=True,
36
+ ),
37
+ sa.Column("name", sa.String(), nullable=False),
38
+ sa.PrimaryKeyConstraint("id"),
39
+ sa.UniqueConstraint("name"),
40
+ )
41
+ # Create tcf_publisher_restriction table
42
+ op.create_table(
43
+ "tcf_publisher_restriction",
44
+ sa.Column("id", sa.String(length=255), nullable=False),
45
+ sa.Column(
46
+ "created_at",
47
+ sa.DateTime(timezone=True),
48
+ server_default=sa.text("now()"),
49
+ nullable=True,
50
+ ),
51
+ sa.Column(
52
+ "updated_at",
53
+ sa.DateTime(timezone=True),
54
+ server_default=sa.text("now()"),
55
+ nullable=True,
56
+ ),
57
+ sa.Column("tcf_configuration_id", sa.String(255), nullable=False),
58
+ sa.Column("purpose_id", sa.Integer(), nullable=False),
59
+ sa.Column(
60
+ "restriction_type",
61
+ sa.Enum(
62
+ "purpose_restriction",
63
+ "require_consent",
64
+ "require_legitimate_interest",
65
+ name="tcfrestrictiontype",
66
+ ),
67
+ nullable=False,
68
+ ),
69
+ sa.Column(
70
+ "vendor_restriction",
71
+ sa.Enum(
72
+ "restrict_all_vendors",
73
+ "allow_specific_vendors",
74
+ "restrict_specific_vendors",
75
+ name="tcfvendorrestriction",
76
+ ),
77
+ nullable=False,
78
+ ),
79
+ sa.Column(
80
+ "range_entries",
81
+ postgresql.ARRAY(postgresql.JSONB(astext_type=sa.Text())),
82
+ server_default="{}",
83
+ nullable=False,
84
+ ),
85
+ sa.ForeignKeyConstraint(
86
+ ["tcf_configuration_id"],
87
+ ["tcf_configuration.id"],
88
+ ondelete="CASCADE",
89
+ ),
90
+ sa.PrimaryKeyConstraint("id"),
91
+ )
92
+ op.create_index(
93
+ op.f("ix_tcf_publisher_restriction_config_purpose"),
94
+ "tcf_publisher_restriction",
95
+ ["tcf_configuration_id", "purpose_id"],
96
+ unique=False,
97
+ )
98
+
99
+
100
+ def downgrade():
101
+ # Drop tables
102
+ op.drop_table("tcf_publisher_restriction")
103
+ op.drop_table("tcf_configuration")
104
+
105
+ # Drop enums
106
+ op.execute("DROP TYPE tcfrestrictiontype")
107
+ op.execute("DROP TYPE tcfvendorrestriction")
@@ -0,0 +1,62 @@
1
+ """Add tcf_configuration FK to experience config
2
+
3
+ Revision ID: 9288f729cac4
4
+ Revises: 99c603c1b8f9
5
+ Create Date: 2025-04-07 18:49:31.843362
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "9288f729cac4"
14
+ down_revision = "99c603c1b8f9"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade():
20
+ # ### commands auto generated by Alembic - please adjust! ###
21
+ op.add_column(
22
+ "privacyexperienceconfig",
23
+ sa.Column("tcf_configuration_id", sa.String(), nullable=True),
24
+ )
25
+ op.create_foreign_key(
26
+ "privacyexperienceconfig_tcf_configuration_fkey",
27
+ "privacyexperienceconfig",
28
+ "tcf_configuration",
29
+ ["tcf_configuration_id"],
30
+ ["id"],
31
+ ondelete="SET NULL",
32
+ )
33
+ op.add_column(
34
+ "privacyexperienceconfighistory",
35
+ sa.Column("tcf_configuration_id", sa.String(), nullable=True),
36
+ )
37
+ op.create_foreign_key(
38
+ "privacyexperienceconfighistory_tcf_configuration_fkey",
39
+ "privacyexperienceconfighistory",
40
+ "tcf_configuration",
41
+ ["tcf_configuration_id"],
42
+ ["id"],
43
+ ondelete="SET NULL",
44
+ )
45
+ # ### end Alembic commands ###
46
+
47
+
48
+ def downgrade():
49
+ # ### commands auto generated by Alembic - please adjust! ###
50
+ op.drop_constraint(
51
+ "privacyexperienceconfighistory_tcf_configuration_fkey",
52
+ "privacyexperienceconfighistory",
53
+ type_="foreignkey",
54
+ )
55
+ op.drop_column("privacyexperienceconfighistory", "tcf_configuration_id")
56
+ op.drop_constraint(
57
+ "privacyexperienceconfig_tcf_configuration_fkey",
58
+ "privacyexperienceconfig",
59
+ type_="foreignkey",
60
+ )
61
+ op.drop_column("privacyexperienceconfig", "tcf_configuration_id")
62
+ # ### end Alembic commands ###
@@ -0,0 +1,45 @@
1
+ """add password login enabled and totp secret to fidesuser
2
+
3
+ Revision ID: 99c603c1b8f9
4
+ Revises: 6e565c16dae1
5
+ Create Date: 2025-04-02 01:55:57.890545
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ import sqlalchemy_utils
11
+ from alembic import op
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "99c603c1b8f9"
15
+ down_revision = "6e565c16dae1"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ op.add_column(
22
+ "fidesuser",
23
+ sa.Column(
24
+ "password_login_enabled",
25
+ sa.Boolean(),
26
+ nullable=True,
27
+ ),
28
+ )
29
+ op.add_column(
30
+ "fidesuser",
31
+ sa.Column(
32
+ "totp_secret",
33
+ sqlalchemy_utils.types.encrypted.encrypted_type.StringEncryptedType(),
34
+ nullable=True,
35
+ ),
36
+ )
37
+ op.alter_column("fidesuser", "hashed_password", nullable=True)
38
+ op.alter_column("fidesuser", "salt", nullable=True)
39
+
40
+
41
+ def downgrade():
42
+ op.alter_column("fidesuser", "hashed_password", nullable=False)
43
+ op.alter_column("fidesuser", "salt", nullable=False)
44
+ op.drop_column("fidesuser", "totp_secret")
45
+ op.drop_column("fidesuser", "password_login_enabled")
fides/api/api/deps.py CHANGED
@@ -12,6 +12,7 @@ from fides.config import get_config as get_app_config
12
12
  from fides.config.config_proxy import ConfigProxy
13
13
 
14
14
  _engine = None
15
+ _readonly_engine = None
15
16
 
16
17
 
17
18
  def get_config() -> FidesConfig:
@@ -28,9 +29,24 @@ def get_db() -> Generator:
28
29
  db.close()
29
30
 
30
31
 
32
+ def get_readonly_db() -> Generator:
33
+ """Return our readonly database session"""
34
+ try:
35
+ db = get_readonly_api_session()
36
+ yield db
37
+ finally:
38
+ db.close()
39
+
40
+
31
41
  @contextmanager
32
- def get_db_contextmanager() -> Generator[Session, None, None]:
33
- """Return our database session as a context manager"""
42
+ def get_autoclose_db_session() -> Generator[Session, None, None]:
43
+ """
44
+ Return a database session as a context manager that automatically closes when the context exits.
45
+
46
+ Unlike get_api_session which is managed by FastAPI's dependency injection,
47
+ this context manager explicitly closes the session when exiting the context.
48
+ Use this when you need manual control over the session lifecycle outside of API endpoints.
49
+ """
34
50
  try:
35
51
  db = get_api_session()
36
52
  yield db
@@ -55,6 +71,26 @@ def get_api_session() -> Session:
55
71
  return db
56
72
 
57
73
 
74
+ def get_readonly_api_session() -> Session:
75
+ """Gets the shared read-only database session to use for API functionality"""
76
+ if not CONFIG.database.sqlalchemy_readonly_database_uri:
77
+ return get_api_session()
78
+
79
+ global _readonly_engine # pylint: disable=W0603
80
+ if not _readonly_engine:
81
+ _readonly_engine = get_db_engine(
82
+ database_uri=CONFIG.database.sqlalchemy_readonly_database_uri,
83
+ pool_size=CONFIG.database.api_engine_pool_size,
84
+ max_overflow=CONFIG.database.api_engine_max_overflow,
85
+ keepalives_idle=CONFIG.database.api_engine_keepalives_idle,
86
+ keepalives_interval=CONFIG.database.api_engine_keepalives_interval,
87
+ keepalives_count=CONFIG.database.api_engine_keepalives_count,
88
+ )
89
+ SessionLocal = get_db_session(CONFIG, engine=_readonly_engine)
90
+ db = SessionLocal()
91
+ return db
92
+
93
+
58
94
  def get_config_proxy(db: Session = Depends(get_db)) -> ConfigProxy:
59
95
  return ConfigProxy(db)
60
96
 
@@ -54,11 +54,7 @@ from fides.api.schemas.user import (
54
54
  UserResponse,
55
55
  UserUpdate,
56
56
  )
57
- from fides.api.service.user.fides_user_service import (
58
- accept_invite,
59
- invite_user,
60
- perform_login,
61
- )
57
+ from fides.api.service.deps import get_user_service
62
58
  from fides.api.util.api_router import APIRouter
63
59
  from fides.common.api.scope_registry import (
64
60
  SCOPE_REGISTRY,
@@ -75,6 +71,7 @@ from fides.common.api.v1 import urn_registry as urls
75
71
  from fides.common.api.v1.urn_registry import V1_URL_PREFIX
76
72
  from fides.config import CONFIG, FidesConfig, get_config
77
73
  from fides.config.config_proxy import ConfigProxy
74
+ from fides.service.user.user_service import UserService
78
75
 
79
76
  router = APIRouter(tags=["Users"], prefix=V1_URL_PREFIX)
80
77
 
@@ -423,6 +420,7 @@ def create_user(
423
420
  db: Session = Depends(get_db),
424
421
  user_data: UserCreate,
425
422
  config_proxy: ConfigProxy = Depends(get_config_proxy),
423
+ user_service: UserService = Depends(get_user_service),
426
424
  ) -> FidesUser:
427
425
  """
428
426
  Create a user given a username and password.
@@ -461,7 +459,7 @@ def create_user(
461
459
  user = FidesUser.create(db=db, data=user_data.model_dump(mode="json"))
462
460
 
463
461
  # invite user via email
464
- invite_user(db=db, config_proxy=config_proxy, user=user)
462
+ user_service.invite_user(user)
465
463
 
466
464
  logger.info("Created user with id: '{}'.", user.id)
467
465
  FidesUserPermissions.create(
@@ -544,6 +542,7 @@ def user_login(
544
542
  db: Session = Depends(get_db),
545
543
  config: FidesConfig = Depends(get_config),
546
544
  user_data: UserLogin,
545
+ user_service: UserService = Depends(get_user_service),
547
546
  ) -> UserLoginResponse:
548
547
  """Login the user by creating a client if it doesn't exist, and have that client
549
548
  generate a token."""
@@ -602,8 +601,7 @@ def user_login(
602
601
  # from complaining.
603
602
  user = user_check
604
603
 
605
- client = perform_login(
606
- db,
604
+ client = user_service.perform_login(
607
605
  config.security.oauth_client_id_length_bytes,
608
606
  config.security.oauth_client_secret_length_bytes,
609
607
  user,
@@ -666,9 +664,9 @@ def verify_invite_code(
666
664
  def accept_user_invite(
667
665
  *,
668
666
  db: Session = Depends(get_db),
669
- config: FidesConfig = Depends(get_config),
670
667
  user_data: UserForcePasswordReset,
671
668
  verified_invite: FidesUserInvite = Depends(verify_invite_code),
669
+ user_service: UserService = Depends(get_user_service),
672
670
  ) -> UserLoginResponse:
673
671
  """Sets the password and enables the user if a valid username and invite code are provided."""
674
672
 
@@ -681,9 +679,7 @@ def accept_user_invite(
681
679
  detail=f"User with username {verified_invite.username} does not exist.",
682
680
  )
683
681
 
684
- user, access_code = accept_invite(
685
- db=db, config=config, user=user, new_password=user_data.new_password
686
- )
682
+ user, access_code = user_service.accept_invite(user, user_data.new_password)
687
683
 
688
684
  return UserLoginResponse(
689
685
  user_data=user,
@@ -3,9 +3,8 @@ from functools import cache
3
3
 
4
4
  from loguru import logger
5
5
 
6
- from fides.api.db.session import get_db_session
6
+ from fides.api.api.deps import get_autoclose_db_session
7
7
  from fides.api.models.identity_salt import IdentitySalt
8
- from fides.config import CONFIG
9
8
 
10
9
 
11
10
  @cache
@@ -15,14 +14,14 @@ def get_identity_salt() -> str:
15
14
  This function is cached to avoid repeated calls to the database for the same value.
16
15
  """
17
16
 
18
- SessionLocal = get_db_session(CONFIG)
19
- db = SessionLocal()
20
- existing_salt = db.query(IdentitySalt).first()
21
- if existing_salt is None:
22
- new_salt = IdentitySalt.create(
23
- db, data={"encrypted_value": {"value": secrets.token_hex(32)}}
24
- )
25
- logger.info("Created new identity salt.")
26
- return new_salt.encrypted_value.get("value")
27
- logger.info("Caching existing identity salt.")
28
- return existing_salt.encrypted_value.get("value")
17
+ with get_autoclose_db_session() as db:
18
+ existing_salt = db.query(IdentitySalt).first()
19
+ if existing_salt is None:
20
+ new_salt = IdentitySalt.create(
21
+ db, data={"encrypted_value": {"value": secrets.token_hex(32)}}
22
+ )
23
+ logger.info("Created new identity salt.")
24
+ return new_salt.encrypted_value.get("value")
25
+
26
+ logger.info("Caching existing identity salt.")
27
+ return existing_salt.encrypted_value.get("value")
fides/api/custom_types.py CHANGED
@@ -66,8 +66,13 @@ def validate_html_str(val: str) -> str:
66
66
  "strong",
67
67
  "u",
68
68
  }
69
+
70
+ ALLOWED_ATTRIBUTES = {
71
+ "a": {"href", "hreflang", "target"},
72
+ }
73
+
69
74
  if val:
70
- return clean(val, tags=ALLOWED_HTML_TAGS)
75
+ return clean(val, tags=ALLOWED_HTML_TAGS, attributes=ALLOWED_ATTRIBUTES)
71
76
  return val
72
77
 
73
78
 
fides/api/db/base.py CHANGED
@@ -8,6 +8,7 @@ from fides.api.models.attachment import Attachment, AttachmentReference
8
8
  from fides.api.models.audit_log import AuditLog
9
9
  from fides.api.models.authentication_request import AuthenticationRequest
10
10
  from fides.api.models.client import ClientDetail
11
+ from fides.api.models.comment import Comment, CommentReference
11
12
  from fides.api.models.connectionconfig import ConnectionConfig
12
13
  from fides.api.models.consent_automation import ConsentAutomation
13
14
  from fides.api.models.custom_asset import CustomAsset
@@ -58,4 +59,8 @@ from fides.api.models.storage import StorageConfig
58
59
  from fides.api.models.system_compass_sync import SystemCompassSync
59
60
  from fides.api.models.system_history import SystemHistory
60
61
  from fides.api.models.system_manager import SystemManager
62
+ from fides.api.models.tcf_publisher_restrictions import (
63
+ TCFConfiguration,
64
+ TCFPublisherRestriction,
65
+ )
61
66
  from fides.api.models.tcf_purpose_overrides import TCFPurposeOverride
fides/api/db/system.py CHANGED
@@ -406,9 +406,7 @@ async def create_system(
406
406
 
407
407
  # create the system resource using generic creation
408
408
  # the system must be created before the privacy declarations so that it can be referenced
409
- resource_dict = resource.model_dump(
410
- mode="json"
411
- ) # mode=json helps Url fields be converted to strings before saving to db
409
+ resource_dict = resource.model_dump()
412
410
 
413
411
  # set the current user's ID
414
412
  resource_dict["user_id"] = current_user_id
@@ -2,7 +2,7 @@ from loguru import logger
2
2
  from sqlalchemy import text
3
3
  from sqlalchemy.orm import Session
4
4
 
5
- from fides.api.api.deps import get_db_contextmanager
5
+ from fides.api.api.deps import get_autoclose_db_session
6
6
  from fides.api.db.base_class import FidesBase
7
7
  from fides.api.migrations.hash_migration_mixin import HashMigrationMixin
8
8
  from fides.api.migrations.hash_migration_tracker import HashMigrationTracker
@@ -47,7 +47,7 @@ def bcrypt_migration_task() -> None:
47
47
  Job to migrate all the tables using bcrypt hashes for general data (excludes tables with credentials).
48
48
  """
49
49
 
50
- with get_db_contextmanager() as db:
50
+ with get_autoclose_db_session() as db:
51
51
  # Do a single pass to check if any of the models have already been migrated.
52
52
  # This will allow us to optimize searching for these models by not calling
53
53
  # the previously used bcrypt hash.