From 1da5dc0a30e0e2c2c5d719b25a1e58d86b3e20ee Mon Sep 17 00:00:00 2001 From: dvirlabs <114520947+dvirlabs@users.noreply.github.com> Date: Sun, 14 Dec 2025 13:44:00 +0200 Subject: [PATCH] Add google authentication --- .gitignore | 1 + backend/.env | 8 +- backend/.gitignore | 1 + .../__pycache__/email_utils.cpython-312.pyc | Bin 4101 -> 4101 bytes backend/__pycache__/main.cpython-312.pyc | Bin 34838 -> 37720 bytes .../__pycache__/oauth_utils.cpython-312.pyc | Bin 781 -> 1191 bytes .../__pycache__/user_db_utils.cpython-312.pyc | Bin 5098 -> 5098 bytes backend/main.py | 85 ++++++++++++++++++ backend/oauth_utils.py | 13 +++ frontend/src/App.jsx | 13 ++- frontend/src/authApi.js | 4 +- frontend/src/components/Login.jsx | 27 ++++++ 12 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 backend/.gitignore diff --git a/.gitignore b/.gitignore index 2cf626f..ff404f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ +my-recipes/ my-recipes-chart/ \ No newline at end of file diff --git a/backend/.env b/backend/.env index de1b663..9748b1b 100644 --- a/backend/.env +++ b/backend/.env @@ -16,4 +16,10 @@ SMTP_FROM=dvirlabs@gmail.com GOOGLE_CLIENT_ID=143092846986-hsi59m0on2c9rb5qrdoejfceieao2ioc.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=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 GOOGLE_REDIRECT_URI=http://localhost:8001/auth/google/callback -FRONTEND_URL=http://localhost:5174 \ No newline at end of file +FRONTEND_URL=http://localhost:5174 + +# Microsoft Entra ID (Azure AD) OAuth +AZURE_CLIENT_ID=db244cf5-eb11-4738-a2ea-5b0716c9ec0a +AZURE_CLIENT_SECRET=Zad8Q~qRBxaQq8up0lLXAq4pHzrVM2JFGFJhHaDp +AZURE_TENANT_ID=consumers +AZURE_REDIRECT_URI=http://localhost:8001/auth/azure/callback \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..ba0430d --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1 @@ +__pycache__/ \ No newline at end of file diff --git a/backend/__pycache__/email_utils.cpython-312.pyc b/backend/__pycache__/email_utils.cpython-312.pyc index 519a5fc80eac8458656f01d1f94516638bde90a3..6524825bc88ccabe7c01941e02c83613067ff80c 100644 GIT binary patch delta 19 ZcmZowXjR}k&CAQh00e){H*)>v2LLcq1w8-& delta 19 ZcmZowXjR}k&CAQh00dHo8@Yb-0{|-G1XKV3 diff --git a/backend/__pycache__/main.cpython-312.pyc b/backend/__pycache__/main.cpython-312.pyc index ac62b4a49b1d63eba4026e68613c53e10f22093c..783ca7ee07ed679901661b14afd25cdcc6f8420c 100644 GIT binary patch delta 4520 zcmZ`+2~k-M;HNtA*15B;Tn(x5Cle%MRAZtaU6LM7#U{ppFtKeYGRr+ zHL3dN#OyVxb*UIlUemhN#-vG2+mn<8j*>Eg^Ywp;XXU z$WDZr5{a}#E|7}k+9thJyi+(jYPPi)oc?L;sKRqfy!Aq9&bG&9Vhc{A#%*Xf?ZB44N9&E?9(G*`~!3g5K$* zI(Aa9urx7gbi9V$6f9&dGmD9a26@?N4C`2tXkpKY;UNuj1k75`x<&M$$4+hQOJeD1HIXo%(q4A159E9l{!;qh1503W0BSDBRjF;ZY)3axk zA}}B{y1hP`zKrNskW4_b9EdfP{uX)75O4u~qu1jJ@QocbAX2%})h<&75x-%XnNx(f zfQ?h?G7k`PO!}fB*9HQhm}Lr=yKe z_g3CbF0ri2b>u30qH_J1xtohO1HkY4XgDHVf>UFy}I2&8(Vzht-h0eNx ze2@b$48(fmPDi`b=j-%R$34ZOH$w9L-d5R@3yU9P@6|3y)uTSa+2L>T zQdf`ca5gr|KA%HH(L>Bqx5A_Y2<4IBdqYi(H6DC_q;7^G62(zShS|Bgsf&_<4MbC? zNAk9fr-NR?c^@PB5{Vl~AfkzSJ$~6EIXbADUT10b3xvrqdy!IGZ_^oKGts9^XHN%Z zQ>$LuHoZ!gT(EEbX1~{5?rNl7pSQ_xF827T)4Z(6Tv-5cv)kM3@&w`v>Z_}Y9aY6e z%c_c(*dZCqdaQT=e_S~XdeWvFAES~aM!nU--z6Vgnf(lEb330+dqHZfYGtNY&bSy zU-F*hi?NyS#b%xeIXP({w&bFrq+egsZz#Dz!@x+-gka~`cdJs#M=Z&HO6(%OSi-UV zY7_g?9?k~s6Qe`N-UdOs{)J)esy&epmkcbnI-QSz??U)S!ndwEnMARUYO5hS5!~Dw z)*C9tup`xJrr0q{Qk<#@?+xE-kc{k7b%tQ8q*sijoSC4G4;ovG{*Ir*z2ojgiL%^*BjfH$i7}}<&&gjmR1vQ znIxt38lT~$)ZVyfxaW8m=}Q~Cbysm&+-|b#X;xE{M$D|UW>I!}&$Ok`aBlg>`(nJd z)PNvTmH~8oTP5wXq<`dLt}tjLZOy$oy4K^_T5a4D8o%m zCm=j@-g=J^?@NJN5%u672eBA0}+6y$Jk(n&~6IGn^T6;0fBtJ81W z+z3cPXetslE1_DOLmJc!j0aDL5v*Q~YJg^(k&Z-N@Gj);Z~#yXDhO_TOJ0;_d#p@! z7U*{2E=mBR?xGQ~hzJ|VX9>ysTKBYGOvrvOA^W6hAfe!5Oaa?bKWXv$!8m7sg!AK= z#C?%_BA;v?h?)9+O!;B!@mWV^^=Fq2OfP>}7&1=Um%Ar-fBb+k<9%cP;YG)DkK~?= zADEHSYJkUMI)da}9HaxsZ+_WuW0SiBqeKi&%L& z4>Ne2{lc+8SP1N=%8-K+@f0XK%Gm2Ix$IG=5iaQ$oKr>hwwlM@aax2dfL>FsI{%?T zuTBBzvJ#+GzWF+{q%q~VSiJDb|c?| znzvbK^Bi$8uy^rFUh`IbFZ{lx3|t9w&Cqc7A}*KZyB3Irz|QBDZrA&|AF;mPZHu{x z3#m^5bt_#^e&-G)+6_L$-fEkivIH%vVWJNKgWpN8y3rN>akkZklSmWl{9CIH~NTOWCze3x#qpwpp1&2Y)OjiTP*#}Rv!<(&w9mGf2h0PsGS?6XV zR;wuXc2|*52kdJ~YouvnXRgoy>>zuw=kL%t+qWzf95DWfo!;^{`0wgx*d#{oqLe_o+`iQtrRM zI;#p<>~@L`O|exeb|1xN3JC2^e`5>9hM`zYibbH9REl|`o6scYg<={g#!j8gxIM$L z1z7mye3L_!;_V(1Hxy+Yik>iH;E3@XP9(Z3ams5u&gpEE21v??jwd$qWakwQzhCp5 qE>#naL~uIcA=3_1e^}Z8F^}j<2-!gPXI$Y_29fESP@y{y@c#$wPvDLK delta 2996 zcmZ`*dr*|u72o^q-fw{wA(C|kONg@uSVWPAAfU)Yc?io>OaLQ@`(0pRW%2GJk079E zkUVWpCy&}clF^!sY#Pls8mnolnYQV~X{wEM>_$_QCex&o#?)5rG)>cczK@0NjA7*G z`Of*B$36Gld%1i>diH=c|9o_GltKIqX0LTm4*p>NB9eMMCE6GpST$uty}>{X9R?)_ z%8g0ZTqUoA;BR2{6b)HnjM}Vgn8b?Xg({FgCFvGrExcm1o7b>nr65oU2h8!7B37gn zv&MFlvJP$;?Q}gW4&*~@WPD5s+pH9^b(&RHN}<#wtV&s+9IZCA>V6yc(kVT>p}7S! zS5;t)*_=cnl7U4kM5zooL)vzuQpJp{73))~g|u0dYJ?=|TKsO8m0FOf-B!oSu;S4A zm3p?mT~ao}8fv#Tu+p$>^{hl#Hi4ho>4U6HUyB(lm6V6zO=>5NaE->#Xqujp?eHg> zVA;$z%q-_&D3|SbZJ8o7E!)iI3D*`F7R+ur%B+8Hg=4ba(k6;^>Mh2m#OZ0ag*BuT z=2M%wjX6UNk9M(&nM}%F3JK;Vlrg7X=Hm9*rgntI=wfwUC*WLb+#E9rnVqasizF-V zFm|_KpV8T&%?gX#6~^=k<_8+HJ5+&ft^!XOvjFXn5IXKpnI4mO6-XX#+WhCH)v8edPqs%wsJr?He4|Ry_#-UlfXLf(a!&rT@ti8yx z=~J*TjIlGcQg|mSA!RPgL>Q-^4JiA&Qw;`g6RTU;bpv-Meo}c%d0fd2JTYa`=aCo& z$sln&sh+jGy(qyU1*3e-#hJggn+*od+uH_O+d7zo4#9<`R`tE5zm(`J!toP$F6B4m zC3S1+WkL=?ZdzjWVWD=II38Ud09RT%eO-wER)3i0Fp;D1){4D?xGrN^1rmeQErhZA?RjU=_$I>75zGi!DSr#W zD!?J@g#}RY3xu->=iuu7>Gan^%vR@TF_U}xklUsKK>q5rfp{=k8wq z8hoCUVSNYHc?ds2ID+spEYDpjD)?||_aJHs}+<>Iot)Y1PYSZ&) zcP%KpyxX_C{rn%oCm6xK9?!NmS2r)j5V(b6tZt(mUcr~OHp|>b-W21MLjNO3Ms-cy zamnP6_-*+6#&l{DclSzovSktEHKY)qx~)Mnk@tZ$IxN^d-hl84ywKRmh047`qzpzly{$w=_oWeWf1~TH+_#BhCoxT?OO~a-f#oQXI|@o!zxOTYhGrFKy@U-A7MjtGFbq< z%~p$6*i|Hd4hNcTkvE0t!x@L;&3D6p6*HV~zKbpvZmZOfn#&{@>G*~OV7N1rCJE)Z z`g-SSvOqf?g~H2W67P z>(Y0%#7fuD@&p+S81}Gd{1=mOOiA7yLR!$Za2$NQRkYdR`al=gP zcFZh#ZJ`$(ypwr3}i*J(UBGQOUc39(DPKE8>_<+`?FUnZ>-;wX&myDDa<<TNIyT_;B%J>KcO}$=mm1=JYzBNH(Z=atRVSdK(Zq_dXyiz&dksPl< zj<*-Tg@C7?<1yzr^c;tr+qIS8h;p1dt{q9*+vaz5avT(no5->G9Gl6pKYRxU!ftR} yJjWID8uBfBZ)hEtM>ba+%GyV@@T0GPM diff --git a/backend/__pycache__/oauth_utils.cpython-312.pyc b/backend/__pycache__/oauth_utils.cpython-312.pyc index 6ba3367f64bd3eee7cbb45637fd83bf39a8f1aaa..5a69a27dccc04d0e9d10fe6b87e38fc4e4623312 100644 GIT binary patch delta 441 zcmeBWTh7UMnwOW00SInd*=2IEOyrYb3Syk7u_c0uA(bIZ03?G7Qg~8$S2IDxqBv98 zviMQuLA(?`oVxiZ&QsJBSj`C0lp>hQIh!FxXfAUKX9`y);~MVOtPmMShDt_F;fW7E z)ZgNFj0z2MjSq44bMy;|_jI|%mYkoPo1b@!HL18}?BnSQkr#$&fC>b=ItRIi zR4HYYloS+O>Fej@r)TEr;wI3lf@_`Lu2bNl#Fk zt~pWjf{fv1A)^~oHajABcwcbOy&#eIfP?>np!x@9CSkS@+zgETUqQwf$pGyG0KCC+ ANdN!< delta 74 zcmZ3^*~`XvnwOW00SLs6?J`-JCh|!zZDE+Gv4y3QQIltK9peWkP0q { + const apiBase = window.__ENV__?.API_BASE || "http://localhost:8001"; + window.location.href = `${apiBase}/auth/azure/login`; + }; + return (
@@ -121,6 +126,28 @@ function Login({ onSuccess, onSwitchToRegister }) { המשך עם Google + +

עדיין אין לך חשבון?{" "}