langflow-base-nightly 0.5.0.dev38__py3-none-any.whl → 0.5.0.dev39__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 (233) hide show
  1. langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  2. langflow/api/v1/mcp_projects.py +373 -52
  3. langflow/api/v1/schemas.py +1 -2
  4. langflow/components/FAISS/__init__.py +34 -0
  5. langflow/components/agents/agent.py +246 -52
  6. langflow/components/cassandra/__init__.py +40 -0
  7. langflow/components/chroma/__init__.py +34 -0
  8. langflow/components/clickhouse/__init__.py +34 -0
  9. langflow/components/couchbase/__init__.py +34 -0
  10. langflow/components/datastax/__init__.py +3 -3
  11. langflow/components/elastic/__init__.py +37 -0
  12. langflow/components/milvus/__init__.py +34 -0
  13. langflow/components/mongodb/__init__.py +34 -0
  14. langflow/components/ollama/ollama.py +1 -0
  15. langflow/components/perplexity/perplexity.py +3 -13
  16. langflow/components/pgvector/__init__.py +34 -0
  17. langflow/components/pinecone/__init__.py +34 -0
  18. langflow/components/qdrant/__init__.py +34 -0
  19. langflow/components/redis/__init__.py +36 -2
  20. langflow/components/redis/redis.py +75 -29
  21. langflow/components/redis/redis_chat.py +43 -0
  22. langflow/components/supabase/__init__.py +37 -0
  23. langflow/components/upstash/__init__.py +34 -0
  24. langflow/components/vectara/__init__.py +37 -0
  25. langflow/components/vectorstores/__init__.py +0 -69
  26. langflow/components/vectorstores/local_db.py +1 -0
  27. langflow/components/weaviate/__init__.py +34 -0
  28. langflow/custom/dependency_analyzer.py +165 -0
  29. langflow/custom/utils.py +34 -16
  30. langflow/frontend/assets/{SlackIcon-BhW6H3JR.js → SlackIcon-Cr3Q15Px.js} +1 -1
  31. langflow/frontend/assets/{Wikipedia-Dx5jbiy3.js → Wikipedia-GxM5sPdM.js} +1 -1
  32. langflow/frontend/assets/{Wolfram-CIyonzwo.js → Wolfram-BN3-VOCA.js} +1 -1
  33. langflow/frontend/assets/{index-DOEvKC2X.js → index-28oOcafk.js} +1 -1
  34. langflow/frontend/assets/{index-Bhv79Zso.js → index-2wSXqBtB.js} +1 -1
  35. langflow/frontend/assets/{index-BRmSeoWR.js → index-3wW7BClE.js} +1 -1
  36. langflow/frontend/assets/{index-eUkS6iJM.js → index-6pyH3ZJB.js} +1 -1
  37. langflow/frontend/assets/{index-Cr5v2ave.js → index-AWCSdofD.js} +1 -1
  38. langflow/frontend/assets/{index-C27Jj_26.js → index-B2Zgv_xv.js} +1 -1
  39. langflow/frontend/assets/{index-BKKrUElc.js → index-B2ptVQGM.js} +1 -1
  40. langflow/frontend/assets/{index-BnAFhkSN.js → index-B3TANVes.js} +1 -1
  41. langflow/frontend/assets/{index-hZUcL0MZ.js → index-B4yCvZKV.js} +1 -1
  42. langflow/frontend/assets/{index-BPR2mEFC.js → index-BC65VuWx.js} +1 -1
  43. langflow/frontend/assets/{index-CgU7KF4I.js → index-BCDSei1q.js} +1 -1
  44. langflow/frontend/assets/{index-CzHzeZuA.js → index-BJy50PvP.js} +1 -1
  45. langflow/frontend/assets/{index-DkGhPNeA.js → index-BKseQQ2I.js} +1 -1
  46. langflow/frontend/assets/{index-BVFaF7HW.js → index-BLTxEeTi.js} +1 -1
  47. langflow/frontend/assets/{index-cEXY6V06.js → index-BRg1f4Mu.js} +1 -1
  48. langflow/frontend/assets/{index-C2eQmQsn.js → index-BS8Vo8nc.js} +1 -1
  49. langflow/frontend/assets/{index-gdb7XMS8.js → index-BTKOU4xC.js} +1 -1
  50. langflow/frontend/assets/{index-U9GWm1eH.js → index-BVwJDmw-.js} +1 -1
  51. langflow/frontend/assets/{index-BWt5xGeA.js → index-BWYuQ2Sj.js} +1 -1
  52. langflow/frontend/assets/{index-Dx-Z87KT.js → index-BWdLILDG.js} +1 -1
  53. langflow/frontend/assets/{index-paQEWYGT.js → index-BZcw4827.js} +1 -1
  54. langflow/frontend/assets/{index-BDQrd7Tj.js → index-Bbi87Ve4.js} +1 -1
  55. langflow/frontend/assets/{index-vJOO5U8M.js → index-Bf0IYKLd.js} +1 -1
  56. langflow/frontend/assets/{index-1Q3VBqKn.js → index-Bg5nrMRh.js} +1 -1
  57. langflow/frontend/assets/{index-BFQ8KFK0.js → index-BiC280Nx.js} +1 -1
  58. langflow/frontend/assets/{index-CFNTYfFK.js → index-BiKKN6FR.js} +1 -1
  59. langflow/frontend/assets/{index-BPfdqCc_.js → index-Bief6eyJ.js} +1 -1
  60. langflow/frontend/assets/{index-Cxy9sEpy.js → index-BkXec1Yf.js} +1 -1
  61. langflow/frontend/assets/{index-D4tjMhfY.js → index-Bnl6QHtP.js} +1 -1
  62. langflow/frontend/assets/{index-BD7Io1hL.js → index-BpxbUiZD.js} +1978 -1978
  63. langflow/frontend/assets/{index-Ch5r0oW6.js → index-BrJV8psX.js} +1 -1
  64. langflow/frontend/assets/{index-DOQDkSoK.js → index-BwLWcUXL.js} +1 -1
  65. langflow/frontend/assets/{index-CMHpjHZl.js → index-Bx7dBY26.js} +1 -1
  66. langflow/frontend/assets/{index-CbnWRlYY.js → index-C-EdnFdA.js} +1 -1
  67. langflow/frontend/assets/{index-DljpLeCW.js → index-C-Xfg4cD.js} +1 -1
  68. langflow/frontend/assets/{index-Bwi4flFg.js → index-C1f2wMat.js} +1 -1
  69. langflow/frontend/assets/index-C1xroOlH.css +1 -0
  70. langflow/frontend/assets/{index-D6CSIrp1.js → index-C3KequvP.js} +1 -1
  71. langflow/frontend/assets/{index-BYjw7Gk3.js → index-C3ZjKdCD.js} +1 -1
  72. langflow/frontend/assets/{index-DIKUsGLF.js → index-C3l0zYn0.js} +1 -1
  73. langflow/frontend/assets/{index-CfPBgkqg.js → index-C3yvArUT.js} +1 -1
  74. langflow/frontend/assets/{index-CsLQiWNf.js → index-C9Cxnkl8.js} +1 -1
  75. langflow/frontend/assets/{index-mzl9ULw5.js → index-CBc8fEAE.js} +1 -1
  76. langflow/frontend/assets/{index-CEJNWPhA.js → index-CBvrGgID.js} +1 -1
  77. langflow/frontend/assets/{index-DwfHWnX7.js → index-CD-PqGCY.js} +1 -1
  78. langflow/frontend/assets/{index-dyXKnkMi.js → index-CGO1CiUr.js} +1 -1
  79. langflow/frontend/assets/{index-Dka_Rk4-.js → index-CH5UVA9b.js} +1 -1
  80. langflow/frontend/assets/{index-uiKla4UR.js → index-CLJeJYjH.js} +1 -1
  81. langflow/frontend/assets/{index-D9kwEzPB.js → index-CMZ79X-Y.js} +1 -1
  82. langflow/frontend/assets/{index-BrVhdPZb.js → index-CMzfJKiW.js} +1 -1
  83. langflow/frontend/assets/{index-Bct1s6__.js → index-CNw1H-Wc.js} +1 -1
  84. langflow/frontend/assets/{index-B7uEuOPK.js → index-CPHEscq9.js} +1 -1
  85. langflow/frontend/assets/{index-ekfMOqrF.js → index-CRPKJZw9.js} +1 -1
  86. langflow/frontend/assets/{index-G4ro0MjT.js → index-CRPyCfYy.js} +1 -1
  87. langflow/frontend/assets/{index-CSu8KHOi.js → index-CRcMqCIj.js} +1 -1
  88. langflow/frontend/assets/{index-DsoX2o1S.js → index-CUVDws8F.js} +1 -1
  89. langflow/frontend/assets/{index-r_8gs4nL.js → index-CVWQfRYZ.js} +1 -1
  90. langflow/frontend/assets/{index-7hzXChQz.js → index-CVl6MbaM.js} +1 -1
  91. langflow/frontend/assets/{index-B8UR8v-Q.js → index-CVwWoX99.js} +1 -1
  92. langflow/frontend/assets/{index-Dda2u_yz.js → index-CWPzZtSx.js} +1 -1
  93. langflow/frontend/assets/{index-BKeZt2hQ.js → index-CZqRL9DE.js} +1 -1
  94. langflow/frontend/assets/{index-DHngW1k8.js → index-CdIf07Rw.js} +1 -1
  95. langflow/frontend/assets/{index-C--IDAyc.js → index-Cewy7JZE.js} +1 -1
  96. langflow/frontend/assets/{index-DZP_SaHb.js → index-CfwLpbMM.js} +1 -1
  97. langflow/frontend/assets/{index-CuCM7Wu7.js → index-CiR1dxI4.js} +1 -1
  98. langflow/frontend/assets/{index-Xi4TplbI.js → index-CiixOzDG.js} +1 -1
  99. langflow/frontend/assets/{index-BLYw9MK2.js → index-ClsuDmR6.js} +1 -1
  100. langflow/frontend/assets/{index-DMCWDJOl.js → index-CmEYYRN1.js} +1 -1
  101. langflow/frontend/assets/{index-CrAF-31Y.js → index-Co20d-eQ.js} +1 -1
  102. langflow/frontend/assets/{index-DXAfIEvs.js → index-CpzXS6md.js} +1 -1
  103. langflow/frontend/assets/{index-BmYJJ5YS.js → index-Cqpzl1J4.js} +1 -1
  104. langflow/frontend/assets/{index-KWY77KfV.js → index-CtVIONP2.js} +1 -1
  105. langflow/frontend/assets/{index-B3KCdQ91.js → index-CuFXdTx4.js} +1 -1
  106. langflow/frontend/assets/{index-p2kStSPe.js → index-Cyd2HtHK.js} +1 -1
  107. langflow/frontend/assets/{index-CkjwSTSM.js → index-D-1tA8Dt.js} +1 -1
  108. langflow/frontend/assets/{index-BFf0HTFI.js → index-D-KY3kkq.js} +1 -1
  109. langflow/frontend/assets/{index-BYhcGLTV.js → index-D-_B1a8v.js} +1 -1
  110. langflow/frontend/assets/{index-Dr6pVDPI.js → index-D14EWPyZ.js} +1 -1
  111. langflow/frontend/assets/{index-BDuk0d7P.js → index-D2N3l-cw.js} +1 -1
  112. langflow/frontend/assets/{index-BvGQfVBD.js → index-D5ETnvJa.js} +1 -1
  113. langflow/frontend/assets/{index-D1oynC8a.js → index-D7kquVv2.js} +1 -1
  114. langflow/frontend/assets/{index-B1XqWJhG.js → index-DA6-bvgN.js} +1 -1
  115. langflow/frontend/assets/{index-DzIv3RyR.js → index-DDWBeudF.js} +1 -1
  116. langflow/frontend/assets/{index-BKlQbl-6.js → index-DDcMAaG4.js} +1 -1
  117. langflow/frontend/assets/{index-CkK25zZO.js → index-DHgomBdh.js} +1 -1
  118. langflow/frontend/assets/{index-Bj3lSwvZ.js → index-DJP-ss47.js} +1 -1
  119. langflow/frontend/assets/{index-DDXsm8tz.js → index-DQ7VYqQc.js} +1 -1
  120. langflow/frontend/assets/{index-BNQIbda3.js → index-DTqbvGC0.js} +1 -1
  121. langflow/frontend/assets/{index-BzoRPtTY.js → index-DUpri6zF.js} +1 -1
  122. langflow/frontend/assets/{index-35sspuLu.js → index-DV3utZDZ.js} +1 -1
  123. langflow/frontend/assets/{index-BpmqDOeZ.js → index-DXRfN4HV.js} +1 -1
  124. langflow/frontend/assets/{index-C0E3_MIK.js → index-Db9dYSzy.js} +1 -1
  125. langflow/frontend/assets/{index-C8K0r39B.js → index-DdtMEn6I.js} +1 -1
  126. langflow/frontend/assets/{index-BLsVo9iW.js → index-DfDhMHgQ.js} +1 -1
  127. langflow/frontend/assets/{index-BZFljdMa.js → index-Dfe7qfvf.js} +1 -1
  128. langflow/frontend/assets/{index-CyP3py8K.js → index-DhtZ5hx8.js} +1 -1
  129. langflow/frontend/assets/{index-w72fDjpG.js → index-DiB3CTo8.js} +1 -1
  130. langflow/frontend/assets/{index-CY7_TBTC.js → index-DiGWASY5.js} +1 -1
  131. langflow/frontend/assets/{index-CmSFKgiD.js → index-Dl5amdBz.js} +1 -1
  132. langflow/frontend/assets/{index-B0m53xKd.js → index-DlD4dXlZ.js} +1 -1
  133. langflow/frontend/assets/{index-DnVYJtVO.js → index-DmeiHnfl.js} +1 -1
  134. langflow/frontend/assets/index-Dmu-X5-4.js +1 -0
  135. langflow/frontend/assets/{index-CWYiSeWV.js → index-DpVWih90.js} +1 -1
  136. langflow/frontend/assets/{index-CjsommIr.js → index-DrDrcajG.js} +1 -1
  137. langflow/frontend/assets/{index-Un9pWxnP.js → index-Du-pc0KE.js} +1 -1
  138. langflow/frontend/assets/{index-oxHBZk2v.js → index-DwPkMTaY.js} +1 -1
  139. langflow/frontend/assets/{index-CgwykVGh.js → index-DwQEZe3C.js} +1 -1
  140. langflow/frontend/assets/{index-BmIx1cws.js → index-DyJFTK24.js} +1 -1
  141. langflow/frontend/assets/{index-0XQqYgdG.js → index-J38wh62w.js} +1 -1
  142. langflow/frontend/assets/{index-H7J7w7fa.js → index-Kwdl-e29.js} +1 -1
  143. langflow/frontend/assets/{index-CUKmGsI6.js → index-OwPvCmpW.js} +1 -1
  144. langflow/frontend/assets/{index-zV82kQ6k.js → index-Tw3Os-DN.js} +1 -1
  145. langflow/frontend/assets/{index-8cuhogZP.js → index-X0guhYF8.js} +1 -1
  146. langflow/frontend/assets/{index-BUse-kxM.js → index-dJWNxIRH.js} +1 -1
  147. langflow/frontend/assets/{index-DyqITq51.js → index-dcJ8-agu.js} +1 -1
  148. langflow/frontend/assets/{index-Cg53lrYh.js → index-eo2mAtL-.js} +1 -1
  149. langflow/frontend/assets/{index-DqbzUcI5.js → index-hG24k5xJ.js} +1 -1
  150. langflow/frontend/assets/{index-BQrVDjR1.js → index-h_aSZHf3.js} +1 -1
  151. langflow/frontend/assets/{index-kkA-qHB_.js → index-hbndqB9B.js} +1 -1
  152. langflow/frontend/assets/{index-DZxUIhWh.js → index-iJngutFo.js} +1 -1
  153. langflow/frontend/assets/{index-Dg8N3NSO.js → index-lTpteg8t.js} +1 -1
  154. langflow/frontend/assets/{index-DDhJVVel.js → index-lZX9AvZW.js} +1 -1
  155. langflow/frontend/assets/{index-BHhnpSkW.js → index-m8QA6VNM.js} +1 -1
  156. langflow/frontend/assets/{index-Bk4mTwnI.js → index-o0D2S7xW.js} +1 -1
  157. langflow/frontend/assets/{index-DJESSNJi.js → index-ovFJ_0J6.js} +1 -1
  158. langflow/frontend/assets/{index-DH6o91_s.js → index-pYJJOcma.js} +1 -1
  159. langflow/frontend/assets/{index-Bo-ww0Bb.js → index-sI75DsdM.js} +1 -1
  160. langflow/frontend/assets/{index-BcAgItH4.js → index-xvFOmxx4.js} +1 -1
  161. langflow/frontend/assets/{index-_cbGmjF4.js → index-z3SRY-mX.js} +1 -1
  162. langflow/frontend/assets/lazyIconImports-D97HEZkE.js +2 -0
  163. langflow/frontend/assets/{use-post-add-user-CvtuazTg.js → use-post-add-user-C0MdTpQ5.js} +1 -1
  164. langflow/frontend/index.html +2 -2
  165. langflow/graph/graph/base.py +1 -1
  166. langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +26 -0
  167. langflow/initial_setup/starter_projects/Basic Prompting.json +26 -0
  168. langflow/initial_setup/starter_projects/Blog Writer.json +56 -0
  169. langflow/initial_setup/starter_projects/Custom Component Generator.json +35 -0
  170. langflow/initial_setup/starter_projects/Document Q&A.json +26 -0
  171. langflow/initial_setup/starter_projects/Financial Report Parser.json +43 -0
  172. langflow/initial_setup/starter_projects/Hybrid Search RAG.json +83 -1
  173. langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +43 -0
  174. langflow/initial_setup/starter_projects/Instagram Copywriter.json +49 -1
  175. langflow/initial_setup/starter_projects/Invoice Summarizer.json +40 -1
  176. langflow/initial_setup/starter_projects/Knowledge Ingestion.json +71 -0
  177. langflow/initial_setup/starter_projects/Knowledge Retrieval.json +63 -0
  178. langflow/initial_setup/starter_projects/Market Research.json +57 -1
  179. langflow/initial_setup/starter_projects/Meeting Summary.json +95 -0
  180. langflow/initial_setup/starter_projects/Memory Chatbot.json +35 -0
  181. langflow/initial_setup/starter_projects/News Aggregator.json +61 -1
  182. langflow/initial_setup/starter_projects/Nvidia Remix.json +67 -2
  183. langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +48 -1
  184. langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +43 -0
  185. langflow/initial_setup/starter_projects/Price Deal Finder.json +53 -1
  186. langflow/initial_setup/starter_projects/Research Agent.json +40 -1
  187. langflow/initial_setup/starter_projects/Research Translation Loop.json +66 -0
  188. langflow/initial_setup/starter_projects/SEO Keyword Generator.json +17 -0
  189. langflow/initial_setup/starter_projects/SaaS Pricing.json +27 -1
  190. langflow/initial_setup/starter_projects/Search agent.json +40 -1
  191. langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +72 -3
  192. langflow/initial_setup/starter_projects/Simple Agent.json +57 -1
  193. langflow/initial_setup/starter_projects/Social Media Agent.json +77 -1
  194. langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +34 -0
  195. langflow/initial_setup/starter_projects/Travel Planning Agents.json +51 -3
  196. langflow/initial_setup/starter_projects/Twitter Thread Generator.json +80 -0
  197. langflow/initial_setup/starter_projects/Vector Store RAG.json +109 -2
  198. langflow/initial_setup/starter_projects/Youtube Analysis.json +82 -1
  199. langflow/initial_setup/starter_projects/vector_store_rag.py +1 -1
  200. langflow/processing/process.py +3 -0
  201. langflow/services/auth/mcp_encryption.py +104 -0
  202. langflow/services/settings/feature_flags.py +1 -1
  203. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.0.dev39.dist-info}/METADATA +1 -1
  204. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.0.dev39.dist-info}/RECORD +229 -211
  205. langflow/components/vectorstores/redis.py +0 -89
  206. langflow/frontend/assets/index-BWgIWfv2.js +0 -1
  207. langflow/frontend/assets/index-CqS7zir1.css +0 -1
  208. langflow/frontend/assets/lazyIconImports-DTNgvPE-.js +0 -2
  209. /langflow/components/{vectorstores → FAISS}/faiss.py +0 -0
  210. /langflow/components/{vectorstores → cassandra}/cassandra.py +0 -0
  211. /langflow/components/{datastax/cassandra.py → cassandra/cassandra_chat.py} +0 -0
  212. /langflow/components/{vectorstores → cassandra}/cassandra_graph.py +0 -0
  213. /langflow/components/{vectorstores → chroma}/chroma.py +0 -0
  214. /langflow/components/{vectorstores → clickhouse}/clickhouse.py +0 -0
  215. /langflow/components/{vectorstores → couchbase}/couchbase.py +0 -0
  216. /langflow/components/{vectorstores → datastax}/astradb.py +0 -0
  217. /langflow/components/{vectorstores → datastax}/astradb_graph.py +0 -0
  218. /langflow/components/{vectorstores → datastax}/graph_rag.py +0 -0
  219. /langflow/components/{vectorstores → datastax}/hcd.py +0 -0
  220. /langflow/components/{vectorstores → elastic}/elasticsearch.py +0 -0
  221. /langflow/components/{vectorstores → elastic}/opensearch.py +0 -0
  222. /langflow/components/{vectorstores → milvus}/milvus.py +0 -0
  223. /langflow/components/{vectorstores → mongodb}/mongodb_atlas.py +0 -0
  224. /langflow/components/{vectorstores → pgvector}/pgvector.py +0 -0
  225. /langflow/components/{vectorstores → pinecone}/pinecone.py +0 -0
  226. /langflow/components/{vectorstores → qdrant}/qdrant.py +0 -0
  227. /langflow/components/{vectorstores → supabase}/supabase.py +0 -0
  228. /langflow/components/{vectorstores → upstash}/upstash.py +0 -0
  229. /langflow/components/{vectorstores → vectara}/vectara.py +0 -0
  230. /langflow/components/{vectorstores → vectara}/vectara_rag.py +0 -0
  231. /langflow/components/{vectorstores → weaviate}/weaviate.py +0 -0
  232. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.0.dev39.dist-info}/WHEEL +0 -0
  233. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.0.dev39.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,122 @@
1
+ """Encrypt existing MCP auth_settings credentials
2
+
3
+ Revision ID: 0882f9657f22
4
+ Revises: 1cb603706752
5
+ Create Date: 2025-08-21 20:11:26.504681
6
+
7
+ """
8
+ import json
9
+ from typing import Sequence, Union
10
+
11
+ from alembic import op
12
+ import sqlalchemy as sa
13
+ import sqlmodel
14
+ from sqlalchemy.engine.reflection import Inspector
15
+ from langflow.utils import migration
16
+
17
+
18
+ # revision identifiers, used by Alembic.
19
+ revision: str = '0882f9657f22'
20
+ down_revision: Union[str, None] = '1cb603706752'
21
+ branch_labels: Union[str, Sequence[str], None] = None
22
+ depends_on: Union[str, Sequence[str], None] = None
23
+
24
+
25
+ def upgrade() -> None:
26
+ """Encrypt sensitive fields in existing auth_settings data."""
27
+ conn = op.get_bind()
28
+
29
+ # Import encryption utilities
30
+ try:
31
+ from langflow.services.auth.mcp_encryption import encrypt_auth_settings
32
+ from langflow.services.deps import get_settings_service
33
+
34
+ # Check if the folder table exists
35
+ inspector = sa.inspect(conn)
36
+ if 'folder' not in inspector.get_table_names():
37
+ return
38
+
39
+ # Query all folders with auth_settings
40
+ result = conn.execute(
41
+ sa.text("SELECT id, auth_settings FROM folder WHERE auth_settings IS NOT NULL")
42
+ )
43
+
44
+ # Encrypt auth_settings for each folder
45
+ for row in result:
46
+ folder_id = row.id
47
+ auth_settings = row.auth_settings
48
+
49
+ if auth_settings:
50
+ try:
51
+ # Parse JSON if it's a string
52
+ if isinstance(auth_settings, str):
53
+ auth_settings_dict = json.loads(auth_settings)
54
+ else:
55
+ auth_settings_dict = auth_settings
56
+
57
+ # Encrypt sensitive fields
58
+ encrypted_settings = encrypt_auth_settings(auth_settings_dict)
59
+
60
+ # Update the record with encrypted data
61
+ if encrypted_settings:
62
+ conn.execute(
63
+ sa.text("UPDATE folder SET auth_settings = :auth_settings WHERE id = :id"),
64
+ {"auth_settings": json.dumps(encrypted_settings), "id": folder_id}
65
+ )
66
+ except Exception as e:
67
+ # Log the error but continue with other records
68
+ print(f"Warning: Failed to encrypt auth_settings for folder {folder_id}: {e}")
69
+
70
+ except ImportError as e:
71
+ # If encryption utilities are not available, skip the migration
72
+ print(f"Warning: Encryption utilities not available, skipping encryption migration: {e}")
73
+
74
+
75
+ def downgrade() -> None:
76
+ """Decrypt sensitive fields in auth_settings data (for rollback)."""
77
+ conn = op.get_bind()
78
+
79
+ # Import decryption utilities
80
+ try:
81
+ from langflow.services.auth.mcp_encryption import decrypt_auth_settings
82
+ from langflow.services.deps import get_settings_service
83
+
84
+ # Check if the folder table exists
85
+ inspector = sa.inspect(conn)
86
+ if 'folder' not in inspector.get_table_names():
87
+ return
88
+
89
+ # Query all folders with auth_settings
90
+ result = conn.execute(
91
+ sa.text("SELECT id, auth_settings FROM folder WHERE auth_settings IS NOT NULL")
92
+ )
93
+
94
+ # Decrypt auth_settings for each folder
95
+ for row in result:
96
+ folder_id = row.id
97
+ auth_settings = row.auth_settings
98
+
99
+ if auth_settings:
100
+ try:
101
+ # Parse JSON if it's a string
102
+ if isinstance(auth_settings, str):
103
+ auth_settings_dict = json.loads(auth_settings)
104
+ else:
105
+ auth_settings_dict = auth_settings
106
+
107
+ # Decrypt sensitive fields
108
+ decrypted_settings = decrypt_auth_settings(auth_settings_dict)
109
+
110
+ # Update the record with decrypted data
111
+ if decrypted_settings:
112
+ conn.execute(
113
+ sa.text("UPDATE folder SET auth_settings = :auth_settings WHERE id = :id"),
114
+ {"auth_settings": json.dumps(decrypted_settings), "id": folder_id}
115
+ )
116
+ except Exception as e:
117
+ # Log the error but continue with other records
118
+ print(f"Warning: Failed to decrypt auth_settings for folder {folder_id}: {e}")
119
+
120
+ except ImportError as e:
121
+ # If decryption utilities are not available, skip the migration
122
+ print(f"Warning: Decryption utilities not available, skipping decryption migration: {e}")