From 45fc8513a13d4d822b68f7a30574977226cda50c Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Tue, 25 Mar 2025 09:17:53 +0100 Subject: [PATCH] tout marche --- backend/app/.env | 1 + .../app/__pycache__/config.cpython-312.pyc | Bin 1170 -> 1170 bytes .../routers/__pycache__/auth.cpython-312.pyc | Bin 6935 -> 7630 bytes .../__pycache__/helpers.cpython-312.pyc | Bin 1965 -> 1932 bytes backend/app/routers/auth.py | 5 +- backend/app/routers/helpers.py | 3 +- ui/package.json | 1 + ui/pnpm-lock.yaml | 111 ++++++++++++++++++ ui/src/App.tsx | 18 ++- .../BrandButtons/LoginWIthGoogle.tsx | 4 +- ui/src/components/ProtectedRoute.tsx | 1 + ui/src/contexts/AuthContext.tsx | 20 +++- ui/src/hooks/auth.ts | 17 +-- ui/src/hooks/user.ts | 27 +++++ ui/src/pages/tablo.tsx | 21 +++- 15 files changed, 199 insertions(+), 30 deletions(-) create mode 100644 ui/src/hooks/user.ts diff --git a/backend/app/.env b/backend/app/.env index 5e44bf0..33dc042 100644 --- a/backend/app/.env +++ b/backend/app/.env @@ -18,6 +18,7 @@ FIRST_SUPERUSER_PASSWORD=admin12345_gxydlksjwqnlk # run `supabase status` # API URL SUPABASE_URL=https://mhcafqvzbrrwvahpvvzd.supabase.co +SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1oY2FmcXZ6YnJyd3ZhaHB2dnpkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDEyNDEzMjEsImV4cCI6MjA1NjgxNzMyMX0.Otxn5BWCPD2ABlMM59hCgeur9Tf_Q7PndAbTkqXDPtM # service_role key SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1oY2FmcXZ6YnJyd3ZhaHB2dnpkIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc0MTI0MTMyMSwiZXhwIjoyMDU2ODE3MzIxfQ.9r33CUsu6ZR4vyv4ed-UY6cLE1FZzSSxTNE8pFUKjN4 diff --git a/backend/app/__pycache__/config.cpython-312.pyc b/backend/app/__pycache__/config.cpython-312.pyc index 5b42de0fb58fa82cdaeb8c51e4ba43b8e4855f29..6f0f24dfb16546e1ea5407ec101c27802cf61d7e 100644 GIT binary patch delta 20 acmbQlIf;||G%qg~0}%L3dAO0godp0hSOqx% delta 20 acmbQlIf;||G%qg~0}#lrxVMqJodp0gcm*2( diff --git a/backend/app/routers/__pycache__/auth.cpython-312.pyc b/backend/app/routers/__pycache__/auth.cpython-312.pyc index 61493de107b88d82a411ee8a293915ac4759a3d6..25c6831360e19fbf5695ef8837dbf94c00b2cc11 100644 GIT binary patch delta 2632 zcmZ`4OKjZM@ja5e%l+?a^kIr^Yh{E-qx@Fy``xs78tC>>z2SyC(7{A?b% zQ7p(+oEk_^2?`!^tdA|Mpbc~>&>oU=i&lmVIH7Db=pjgfqEO;PU7&}|y!~VqBLp~{ zH~*P8GyL$mzs;rol1#=3Ji<%=tnTK1o$BBCL?Gltq7jXn#G)#-1XZv^RkS2kqDU9a zkQG+L92d=qC95*WB{OQp)ELJ@X531s366)&q?J-r9FLf3E2CyOE}L1aOYO39YL1_y zX1Cg{{e);Sv&ZUHd#ygT&+1qEIWuk!Sa~&X4XT6I0rdcQdM2jQ; zLWQE_|6Wj{LFAJDW?gqZ|L?+lHgieW45nASOS)TgY**is#bI%z59EW0YgFx0y~Y$c zu|o(BA{atY@R!2#;Q>VR{s-aJ&@`Z#t$5^1A*>+vkpJJPb7~aOwcL68t+HuoN`>i~ zZhJ=Abc-T;2F1n^Oadq-gHVkbw%2gi=iiA951>3S%r&2ao9M?N_VtRUd zs$BP0rhsC;QLbDs3V~c>&Rd42Gd7HNWaO9X%w%J5EXs`6s*BgkuuH23a2=EhL=@uT zN+8KFo?z(Z%a?yznw_35o%jEp>?s^Y8zN7F&7%~??}`9;;J%XT3!Q`0Nq;^yPS5yS z>c;VCJGvmk8h2S~HU&r$g5G`!@8iD$xIifEmvwTD__ySozmUsiG}`LBo5H%_4*H4g zbHY0HKbCuF5{GF+S{IDA5G7t34Dm+`ZH8OQuab|%Ra%T(WJiFvmR~a9mh7s6xjW2Q zD|>KfO2vW7VWom7FC3oNdY-EM?9A~W6)8Idf<<{FNI-|O8>L#Al`S_AtGdV9HDnVY z)TsJ^{&r=hY*+OXnk_9mtkmiiT(eNvmrxd4ga`RuVSy5)tBzAOLAQC=Yze66;nm%r z0sM+Qd53%v?|Kj~+=~|;#7FMMNA8^4iBG(9=JR;^VQO$Q{NV8EdxuYN|9Ito%Gj2T zFQmkKOShIDNE7#@iQiuR|G8l>{qExM;;6ry`oGG1 zDALGA<~`)pz3(+mBjIMJG$syge6Lf05`>|}QT-J-T=Hi!@B6PN4t0CY1x=s}T6gC^ z$vj`An?h@uyh}a)Ujjuk3Nv<-df2Y~@xuOp663G5`=L`yBRAL}nW4#4B z;GgX+Y+y1Mi`m8nrkTDBi)f|Ygja#v$Owbx=7MA$Y5=)-WvmFhfQ(ZJaJvN}F2L9E zxPNi5Ii&F#h1hF|^QNA}oe@O2Np6l;E(AnaAI;)19tDEyTiL#|bmK@6SuVR?xn?k2 zG#!(Ly&0sN%t;2l1Ov??NX@jUy3I%0W%53hCMYqcCBxcOIke5TyjRM(D z0nfRv+pGtfy~qq>HaZKW8Z3H-KP&z#Xw)A!ET4WpI=su+)fa&HJMtJHY5YOtdCSr2 zrv3t}0S%|h{SCl9ky82(GPgtK9+9y}1{v9*aa6*b@NT%lOywOWAM46pb~hfbA*%XZbnF0iWLj D8+u*e delta 2012 zcmah}O>7%Q6rSDn`ZxZ!W4pE!w@DM+rioGnYJN%;wS`uwr9cp9D-pKdiQ{&E+}X9$ zL`A7YC2o|mhjQqFYt@P(HU zyabx=Ys-Qbr#US_Bg;N5d0oES4J69&)5uic_qoV4&G#ZRJ0dF(c^qp_Xa6%2>xtUn zj;MY8ddG6RqB6U*XMKyjvZ&>Ew5aM z*;e(2R;e+nQPXLtx?PpnC*j^YJ( zJ~BQtg)omUK}PMSW!jV-L>uO_We^qo*dcV0b*tVm*&N`Z&D)WZ`2Ng_<23ErsVQTn zrY>J@uU}wnwXLo++wFC2(rz`?3#v^gYu1$7a#p6=(^EB7*Dt8GOI6VeHks9KXq2%E zW)GsvQj6(q1k`GfWj~9Rg>iQ%HaT|yEfQ~(%>w2<+7h6r%_VtrOREh?Qn#$SPT2`q zKjMBI8y6J!er(M>pZr_lxdV*fPLSV@)pEKg;={zaWmZLjHSb8Qdp~HvbJ<d9T zG_0I<@25VQ=`jm*LIUvn2!4-$0`WQ#;JFFGbK~^pn2@Wa&*+BWvh-2+n|L(g@OKI# z$S5@Oq3C{>e$n-(CS=};doWWD_Rc5Zp36+0=a+dL++_&(7JToL3~{CaV~mM zMwfwkD@%@biJD%RUTHQ!Us4^u-}S<)YD1@5#jz?qPk`V#Tj4Z0TTS9!ZV)ftPt>RS z+fb!@dv77aiSnW?;5QtGqiU+7dJ-HBJA$h?7oLQpvxq7`)MtE{K^y0w%-%qZ6T^w< zg?PphOxGpI?wMh{3lwzoTH&NHIOYYGRd_34ml7uF7IC-tWEDT?UZS@;NzIxCvtcu& z(KEA6Yc1Ar)>sguc^@Hk2&>H|%$d2|s54}c=euaZUL)u=;MR-fNEBfVMclnn9E>Co zCQ+o^uZp>iG{OuB&(DC=lzG0UWjhRCB|h`)T|_ukoba4be1CVyV=$8LBN3c8EUl%} zSJ(>Jkn8pu$c`ik!Xt9{2Xc6e?B61Xw#f7rDQ=PBM`Y+15_;sGE!`I??sWOg-k)^wgScXE;56QRcobKg+;yIpzSeLMJUUm6-?O~D5r Qwe}GlzjbjT-XYTD53}T$p8x;= delta 781 zcmZ8e&ubGw6n?X_n;)BOvQ0>v*y^US)J8#Q#7j{R_M(XK;4PODvy&e-znI+|3JJ-f z2L%z!9IStUV5y#Z_29vq7mI?h8dUHPNU0YOLf@ps7MI;O-}k<6-n@PDB>E;A`Cu42 z;Pck}QQ6bBB1!UV>%#560!*`gw*PftSCKM6A#4X(u&mhnrdlviCoH^6jp-Ja%GMZ4=G0jj3!*%#osaN>=+- ztnwUeVk>oMkRA|;p|13Z>pSia;9+2bPS&1sN*|BlM3bmT73e}&>C(vr?n9R5xg1B9 zct(k{qRZB1OZ6ISx>=tWa60YcgQCND1TCJ@a>P|7b5+KauPr3bAm711=4k|uyl`3IuV$UQgjlxh$mRzy@ Client: + supabase_client = create_client(settings.supabase_url, settings.supabase_key) return supabase_client # Updated current user dependency diff --git a/ui/package.json b/ui/package.json index ded9fc5..ccc490d 100644 --- a/ui/package.json +++ b/ui/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "@react-stately/calendar": "^3.7.1", + "@supabase/supabase-js": "^2.49.3", "@tailwindcss/vite": "^4.0.14", "@tanstack/react-query": "^5.69.0", "@types/react-router-dom": "^5.3.3", diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 1d03a8c..66c9ae8 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@react-stately/calendar': specifier: ^3.7.1 version: 3.7.1(react@19.0.0) + '@supabase/supabase-js': + specifier: ^2.49.3 + version: 2.49.3 '@tailwindcss/vite': specifier: ^4.0.14 version: 4.0.14(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)) @@ -1179,6 +1182,28 @@ packages: cpu: [x64] os: [win32] + '@supabase/auth-js@2.69.1': + resolution: {integrity: sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ==} + + '@supabase/functions-js@2.4.4': + resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.19.2': + resolution: {integrity: sha512-MXRbk4wpwhWl9IN6rIY1mR8uZCCG4MZAEji942ve6nMwIqnBgBnZhZlON6zTTs6fgveMnoCILpZv1+K91jN+ow==} + + '@supabase/realtime-js@2.11.2': + resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} + + '@supabase/storage-js@2.7.1': + resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + + '@supabase/supabase-js@2.49.3': + resolution: {integrity: sha512-42imTuAm9VEQGlXT0O6zrSwNnsIblU1eieqrAWj8HSmFaYkxepk/IuUVw1M5hKelk0ZYlqDKNwRErI1rF1EL4w==} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -1303,6 +1328,9 @@ packages: '@types/node@22.13.10': resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@types/phoenix@1.6.6': + resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + '@types/react-dom@19.0.4': resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} peerDependencies: @@ -1317,6 +1345,9 @@ packages: '@types/react@19.0.10': resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + '@typescript-eslint/eslint-plugin@7.18.0': resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -2605,6 +2636,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} @@ -2719,6 +2753,12 @@ packages: yaml: optional: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -2748,6 +2788,18 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -4213,6 +4265,48 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.6': optional: true + '@supabase/auth-js@2.69.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/functions-js@2.4.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 + + '@supabase/postgrest-js@1.19.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.11.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.6 + '@types/ws': 8.18.0 + ws: 8.18.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/storage-js@2.7.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.49.3': + dependencies: + '@supabase/auth-js': 2.69.1 + '@supabase/functions-js': 2.4.4 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.19.2 + '@supabase/realtime-js': 2.11.2 + '@supabase/storage-js': 2.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -4324,6 +4418,8 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/phoenix@1.6.6': {} + '@types/react-dom@19.0.4(@types/react@19.0.10)': dependencies: '@types/react': 19.0.10 @@ -4343,6 +4439,10 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/ws@8.18.0': + dependencies: + '@types/node': 22.13.10 + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -5890,6 +5990,8 @@ snapshots: dependencies: is-number: 7.0.0 + tr46@0.0.3: {} + ts-api-utils@1.4.3(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -5987,6 +6089,13 @@ snapshots: jiti: 2.4.2 lightningcss: 1.29.2 + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -6040,6 +6149,8 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + ws@8.18.1: {} + y18n@5.0.8: {} yallist@3.1.1: {} diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 5a8dc9c..c11adc7 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -9,10 +9,18 @@ import { LandingPage } from "./pages/landing"; import { ProtectedRoute } from "./components/ProtectedRoute"; import { TabloPage } from "./pages/tablo"; +import { createClient } from "@supabase/supabase-js"; + +// Create a single supabase client for interacting with your database +const supabase = createClient( + "https://mhcafqvzbrrwvahpvvzd.supabase.co", + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1oY2FmcXZ6YnJyd3ZhaHB2dnpkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDEyNDEzMjEsImV4cCI6MjA1NjgxNzMyMX0.Otxn5BWCPD2ABlMM59hCgeur9Tf_Q7PndAbTkqXDPtM" +); + export const App = () => { return ( - +
{ } /> + + + + } + /> } /> } /> } /> diff --git a/ui/src/components/BrandButtons/LoginWIthGoogle.tsx b/ui/src/components/BrandButtons/LoginWIthGoogle.tsx index 588aefc..208aa1a 100644 --- a/ui/src/components/BrandButtons/LoginWIthGoogle.tsx +++ b/ui/src/components/BrandButtons/LoginWIthGoogle.tsx @@ -1,8 +1,8 @@ import "./login-with-google.css"; -import { useLoginWithGoogle } from "../../hooks/auth"; +import { useAuth } from "../../contexts/AuthContext"; export function LoginWithGoogle() { - const { mutate: loginWithGoogle } = useLoginWithGoogle(); + const { loginWithGoogle } = useAuth(); return (