From 1e3403e3c584ef2c11918ed3fe44c6c52bdeb8b3 Mon Sep 17 00:00:00 2001 From: ljw <84855512@qq.com> Date: Fri, 20 Sep 2024 12:13:15 +0800 Subject: [PATCH] add google oauth --- README.md | 6 +-- README_EN.md | 4 +- conf/config.yaml | 2 +- docs/pc_login.png | Bin 22678 -> 24308 bytes docs/web_admin_oauth.png | Bin 44384 -> 10385 bytes http/controller/api/ouath.go | 79 ++++++++++++++++++++++++++++++----- service/oauth.go | 53 +++++++++++++++++++++-- service/user.go | 32 +++++++++++--- 8 files changed, 150 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index beb47f5..9d4869a 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ #### 登录 -- 添加了`github`登录,需要在后台配置好就可以用了,具体可看后台OAuth配置 -- 添加了web后台授权登录 +- 添加了`github`和`google`授权登录,需要在后台配置好就可以用了,具体可看后台OAuth配置 +- 添加了web后台授权登录,点击后直接登录后台就自动登录客户端了 ![pc_login](docs/pc_login.png) @@ -66,7 +66,7 @@ ![web_admin_gr](docs/web_admin_gr.png) 5. 可以直接打开webclient,方便使用 ![web_webclient](docs/admin_webclient.png) -6. Oauth,暂时只支持了`Github`, 需要创建一个`OAuth App`,然后配置到后台 +6. Oauth,暂时只支持了`Github`和`Google`, 需要创建一个`OAuth App`,然后配置到后台 ![web_admin_oauth](docs/web_admin_oauth.png) - `github oauth app`在`Settings`->`Developer settings`->`OAuth Apps`->`New OAuth App` 中创建,地址 [https://github.com/settings/developers](https://github.com/settings/developers) diff --git a/README_EN.md b/README_EN.md index 9894d21..c2b0db5 100644 --- a/README_EN.md +++ b/README_EN.md @@ -36,7 +36,7 @@ desktop software that provides self-hosted solutions. #### Login -- Added `GitHub` login, which can be used after configuration in the admin panel. See the OAuth configuration section +- Added `GitHub` and `Google` login, which can be used after configuration in the admin panel. See the OAuth configuration section for details. - Added authorization login for the web admin panel. @@ -67,7 +67,7 @@ installation are `admin` `admin`, please change the password immediately.*** ![web_admin_gr](docs/web_admin_gr.png) 5. You can open the web client directly for convenience: ![web_webclient](docs/admin_webclient.png) -6. OAuth support: Currently, only `GitHub` is supported. You need to create an `OAuth App` and configure it in the admin +6. OAuth support: Currently, `GitHub` and `Google` is supported. You need to create an `OAuth App` and configure it in the admin panel. ![web_admin_oauth](docs/web_admin_oauth.png) - Create a `GitHub OAuth App` diff --git a/conf/config.yaml b/conf/config.yaml index 021a331..547b83a 100644 --- a/conf/config.yaml +++ b/conf/config.yaml @@ -19,7 +19,7 @@ rustdesk: key: "123456789" logger: path: "./runtime/log.txt" - level: "error" #trace,debug,info,warn,error,fatal + level: "warn" #trace,debug,info,warn,error,fatal report-caller: true redis: addr: "127.0.0.1:6379" diff --git a/docs/pc_login.png b/docs/pc_login.png index acc8c1c1802d3236f03f342070c57470cf4ca11e..35088a783231eb82078fac33315f977c97f06a0e 100644 GIT binary patch literal 24308 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 BA)){P literal 22678 zcmeFZcU)81*Ebr6QO1JIj36pP#-D{=)KOGQ92+WXRGQLa8DtOv1q1^mN5)Y`5Ks|N zN}|%FMx;qgP$sBEh=PFBXdr}8O#-BFa?ZPhWoCZ!-1k2B-uJopKA+F~Z?exWYp?oU zYwfEC57?^BTQ(1a!Km%oz2h(jqcV-beAV^MSKt@JC#vHZ%n|oJJAQJw;4#uO|GG{) z>8;>~{?Jc1ewe#pC+5<#cRLTSnq4FP9{aDI$@h2M_;uC%@FN*JZhXJu>fI&gU;F;_ z)#^*Xt#tW)^a%THVUPZe?RveN4(#kW^Zm0IorN(qg*^qGyHgy3NB95BYf;tVoL3#W z8BV3q*6USU&P-ISe;kKMe&mzg3HQb(M#EHhY^Z`r1KpH61zo{sdNxA51b@09%hi;@ z-ESE()=}ck8X4KOEe%3K=NO^|7|fF9fkxMmar&9@-tt~#OyUvNGwEM_!hcn(bMqF*b<5;EWQ#=^5#yzq($qq9Umi1Jbr5qh=veFu< z7L7=BZxi3yt;Z_3FSip?iPAfF@XJZem9`#X)2bF{I$iwOyBnHy^e-bXE%6Q>;(7&d zqtCvX4Zq#!-@C=WaDP)3H;wj~Z?|5elOlVLZ?d|5AGNc4jlO)DZrffX>lCdv>3rx- zRwUXrO#19OTFD~zz>SlGP;1x1#IF3+JccF)6Tjpj%pa$p9@x%q8i9fbC|>px3=xH$ zM&d^lkB3eqNYD#WNIM}cOm=f|W;f%QWWx)&Z&DJQ^18RiUpA4Ab1%eCjZW8QM;;lg zk@Sj63ykc_->3SvJH=_grqYeev4cg=7V6^2)$(=LHiuj(p+jdU9YWopT(?+VYZp57 zn}{Wn|XsY(tb=F~pi5Qtf+f z5S>_82cI{Bf4r;WDQI(SkpxaqtAvl7yFa)&!nEqC`8>NO{Zi!WBE4KQ78mEcn{h+~ zhpF9txD9J9fBEDY)+}?fZzoz%-b4A(srS5uo=2-F?0(#Aj5zm9{PA)c>3-P*jX9Rv zc=)B&$ZOPjn-w%7$F{-i+4W?^Va&hAn2+R4MsG(90Ptxj zs5-6N#{3!U@ZDySV!+rpvM2o?UwEti^=OwQLKO@DQeoq|V%YgY?s-qa#%fWg*&8Fq z*oXymzndO3G5Ffb3SyazZ>fCzhT6CtA%3u7lE~GfM^81kMK?f3n2Sm2zjLY9*22ga zijGH8f^a2nL*O&9fxLaRg5JHwa=bxX)Dz|*EMh0IV+Yhy0>{iW(7V&(j8|;7=?=7h zls6~yeKccjAH$gmHI@0W+GuaGrL>VhP6(5RoljlEVvcS5iHWPykgMb1=jIhS*Tv{j z3*9>v3Ymt2#yHUtS3*Zd%lXqlYUnsu8_O%HlR4615`nP(!-->?ebS|DLiJAkNgMW( z*VJgnve*8`vP%_5C)YXKVR}w@&M_B?4$t2kT>FnYc?x;{?lcycKntQ0|o64GuVJ zI&3f0Q=vvVC5~+!Zu8&UL*?3Nuax7BV}urC<>GtliovTbmh{T?`0afw8LvN)@-deh zbPei(C)bb51$Vm0@>HWS!}0@76`=$=9(@_7=qHBx8(J*cUMy9$)+dyvzJDgg68jff zn;}=~V`Pz65jR+NB?WJNev>WKq^LiGJqcqlCi4uD#REb;TIEzuV4?INIsD0#1 ~ zG$e#mn&`aO;Z)>K7}a`M1)qQ|(ZP2}c$Y+utfLiDBkvUB%jCUiz@>wpf`#612H7

H;Md)Z8M zzl@AaV@&(;PzWi|=}IYAiV#jdJOlUa2HVBZ$d z36;?&rrue=+P$9fIL4KG{ z9R7F%ISMANv*4EYv!i8F3%6=TDhnrV(2i^Bo@$9+sUS4HhNdiWq$g8G4WmneMo-VR zMUOh;&X3iz8hkxsm2+U$6rB+|xA~_sj&=2lL)^|Ia95ju=OMpZV3c&W$0DV-ruoV< zm8DfkuO3VsyU^4TJnGV*5NqNvTe~#SA$_}~e7O88%(3sIp!2srTf@0b#+J`U_4aRE zf{v%)W&-Mj!R$M6s=d$-gSlARumrcFnSQ>vaz5}c&PP$djlyE?>S^Fs0M)h?uTS2l z50<4Ignv5-n8Ny=bnZQ%YeTmQ7i|-&U?zU!>ix!5#SG46;=f_4V_q%#zdFH=`AoF4 zMm?>3x=o%eE_dG`Zd#OCOp~AKE9Gr8vKx0pW)H5Inb|}G@)HL3N}rtGZ;I4=)*c<- zwB?~RPpgm3D(u|Ot`^sJ4PvcVE7syW^ z#O(~v6$f03VB)@Kq5(4}x?jqr^%u$7$4C!~Yss#&><381tWckuT)b*%fx3B* z>0-sJ`&XlIm%~>6!47@)I-@&aRlT(R;+`nzTo6Nc1+y<9$W$NyZS93MhKMo54Ia5C zc_ZO%MYgtPUl1_%L~$@UjKJ+6<%f&H5(4a*)1Dxnj$Hbhz5Z7Xl=WQ7gnDQ5s%DvA zZeDti7>lWICJW6h`l)#}=i-s0Ct;skT-9USqOhIdceZKcxc`~5?juOR@bEPuV+7po znhfbZlNC&A`y0Iv{XQ2XUie*u_8*2Z`*sVryKakuf(0AXh@ND(CjN_SLfW1v?8UhT z3{y4uzbR3 zUkBCwR5i8KR;XeQ7{k}QSb9$sV1_KxJJ224HOdRcY)J!g);UM*VneEfi5mZjE;z z^uS@h{WL=E1QR_KwzD*u>aXzN8tzNyzAoqDir|d!zx`rHa6ANK6w2EGdnf55Rz6Tg z<}#7<-+t_HN$2Ndmkf`!s(hZU$c0J$9y%s$cixzPcI~TU*RXf(KCV+_$fTx_kAZ9N zy^1p+P|6M3RUTG;Iu?t|4j8nke>coz0KZ9ZPGh@2{FRwfvS$ufX@+P>47$a%HwE_@ zYt{9vUF%5{1%bW-lV|tmh%w?CJbfqL<7iVgp3ugh>W@Gp#M85mxPLn6IU&{t4yx(H z8!JM4=>fQ1$`@pyMN(V;)f8v8nT)cbL@jC5> z{+NTU(9mRcMglQs2))+K`-vPW%2}MIXk+V>kNJKgUFjjXVkBM#SM)*pB7J^b-XPx2 zg$jHFlk?87HoV2-n8~Ms8xF!1BKs`1u^Qib(FM^+nuK)v{kbt|Dx#wI)rQ4Pb@Npp z&w50Ki3`jk%BaxPn@g$FUO!*M9$WQEkTym^r@Vt0Zn!}CAY!h8tKI!^*C*68pbb0q z*u6{jZNqzyWq3-5e>-GAKGyi>;ww!i)hC@cPz%34U`+b{2Rr=IKGh{RKhi2cg3A{D ztca+CCubq@`qtT7O_9?nLoB%o?3yi&*svYkd8aX=m>$n@BQ>7q&Dj?xFh=fV9!Dl} z!}F-s8D@E#w+S3oI0YtvlIy{qGE2FP$+9lOywpW{3zthBD%4s|#%QAR?Cy+LOtw&4 z?~+Rwpu?5*S)XQiF;dRH=cmB_=Ql3J;V8Pxw@m!3{HRd_ec5ciMZ6;|f7wI-m+TiR zaBE_#6*80*d>NPm4cx<1`s80&JDBK)y10x#@Q^azNw=kLE?Oerte`@OOjY-SxwTEW zRB&h*S93fx65fOk{-C(S*q5|OpuJ&ZVOxK6O#MydD_;2zot;L=qEZjqsgXDHZ4yX| z?Uk*kS{tf&sEdt0(lSvPjSl$~+8u>*Pb^My=rs`9r)57cq~YyyQISq!eD4av#{Lk? zA_us&{DFVBKC+9G5%vC>wQWFQ>gj^2A6Oih>}lX_}%8GKxpAN-Eu@!9L3;oF+#)xy>3q9Z$f$J2}c<3@2dr1k1PVr0Op{&&zm^; zES9J0NaVl5PvUw>Vaup(1xD>g2zltP)JrQJH+#&dP`bN=-XciV0S^9$IZX9@u#3)S z4wvAU6NQ7W-=$}4s2FeItbz)+3TcT=QBd6#3%AGQDMx?BzB`PTfzl+>S%o}$3!|aqx6xncdl9UeD;2cI0$KYg zIiymwwpKlVHCTNeS?F9h%8NNU_-<0kEd-n~o0Aq?kXt<;E z4~pD2Ot3FW8J8-wH&(B>JiZMn#7{D&cxW@Tjd1(rN=d|qT|ngP&5#b}ZJU7p-SYLN z=W~Y^MPr*A<4=pm`}fAFn;}t!D^#W8u!Y8m{25U^d#i^%_Bp$PO5N{&!VonadMxz{ zobZ}2!0kU!O7B)}TL#qIod?q4+^)%Mz<%;>orDwWCnzv!nC;~JO_n5xHqE6~-$LxS z4yyPlEk%hFJh@i7s1!f8F3qV(I%`Hn1I0phm%sI!eBTqGk`?*cr#vOxzVnkK1}q5( z5oX-RkI{qD@dH*4#09m#eN>kqWSH^U{yPjk@rcWK9KIcs^^*C~2&~;BBs?aUDSz6# zMGGiD;7R-;WisAvtAjBuqg>#`H!ZBa?P7|!`d29mt0W1-cQ!84M2UQ}n2BNXMejgi z&TGX-SN{mmyFfpF0MLzIVj@ty9)5Kbw;xE`O_mR`ttD_fwQAu-@Az0W0NdGmK$zW) zPe5TY`=c62MIzO4?tU+B-7b+9UtX(=$=XNUf?3mYK*;}t!$2u8ueIGRsePYKot`^x zxwU*>1%=|14dS2MN9Hr3Vc+uX$GG5;BP375$r4d*1U{iFZdDDj^1>3)v)O{1b?n8! z2mBO4S%w`GDi^I#H00vH%CF8aim0D2zHE!oZFW8!nu!qixxgVkHRE8O%;z>hg7%^f z!0XOVu#H`wlOF~7!#%f(=de$jr zM+-;93#bX4h#zL+Ru_FGT_3sx4!(+yL3DGZV(o>+87A>o2@hm$zAwt}QD`2d6SH#5uPu24PSA!tZl1cs5hW&msAeTqHE?=Zelj1ds z&jmDE3`|()Bgjll{Q7`UJ=G=Nzwr(>&H>Ju6i1#LE|mRN@TCMVn~OP)x~n3VjA}q9 z8~eplBS#^1Q_C&NQ6@((ijia0YT{DvSGQBkxA(DkS9dquov4HHY3L5$LeETh+tQYx zy0u3=&AUP>t_fXZhMZ15sL=A}&9yQLVsOXRnNTu!LCBNK#eyA=Px3RXByRMRe9x{B zw@P0!yKJ;-R@*I^wLqE}8xZ}h(yry4nU11i`w8*wxg`acx%fjKJtW4DhlS297o2X_ z1)dN%hqm(J{OZT6A&CZRcK}!9{usIM+ZB=-&zX{02f7BI=`K+_wk%_%$Ck0obi$T7 zSu5`iMw;$-fWKn|CYAmqqz1?heEs~$5{gloFQ>*kQ0(@NxmxpUGaZ$d8|FIdJ8?m$ z027Q=h7mRwa?JZNIG?Lr!a>XU0@w26)9`AsrD;z!@wk&w?T>c0PlK%X*)j)UM6`8Y z$?;}xWP}E!SRM>cYZ>fO=1ayCJ5_GG2p-&yjcL52;Jw$leH%z|i54nIpPpaA@C_lB zsoV|_yuBTJeV2SivNBenouM-R7__MkSUkpG4_)O(9t6RJy*pegZtL!T>eeb+pt^On zj$R73-$cEj_G_T~vdX1CUitIe2_<1{O`F{L4<7}k?z3eLm{_t@jLl7f<8NSs$Sa1b z=Ys>6`c?_1F5l`D11)syyhFlM1L}{5dh-3J;23Ds^_0F>#PPW!F#dbqGrZQ zuPtOsp7fsY$4>>-r9HmDdE`I8k&f+!2o>~zx|s5Cp&dI5K%ZA`#HB`IU9zQf*Y+?W zWT1k`@X|VRav@Gp;ZGK8-Q?ZJT?Y6$E@k6xD3QHzrOxIS;d-5&nz#}>aHPs8bYd0~ zRG6I7_5J`{yUc#JqIQr*Q4F=yg|(N|6U?x?wghDLd2NYWHV_$XK;E|RkdR7tIShuD zxlNScoYr>MC%;yYpD{1MkBV;?^f!`N7?Qt92OBbB5>n$A;~l^stfAM`?->Q%oC_{O zs!al6qV8wqwG~Un7zS6htvYm~JYiZJZ$_?zU;PVQSB^fyJ(D4g5D0rMIRs6VDqD|F z(7yJ50nPXQFTo<#s6RB-+Dz*T5Yq z=hc8znWzPMv>i{elJ&<&ijxFCDeNu=nS`(}Hk7wedBt@H;ct~3))@t@m83^8 zR;Z6cqr;r;3!$&#tShO7i#2fO*H+rbnkG#jjY7=Gf(}Wq3=!oVzs1D;AZMwpJG(|n z5(bkC37NQp_VAOt=|a!SIlH@({2zVAR0p78%kNmVK ztU9ap_M9h|&)!NdH{`aQBC<->6yRO6)N)5#c(w|=$_#0j z2@+#R;4vR&ESt28{5@`K;DMM<1I-7EUNj1bJg@|fZ)U%oj>H7{p%5IF+ zv2>!>Z6#jA)fm>`=@)kUi1f)GgcxDAnkbwyai$mfgBwn9lgUa0pi+G#IGWL*5asNp z)Y_L$Uk?#@8_O1N#pD4<=la^204j`pZgXFCT8U?aLW3hXaW}l|Ry3~0S66@orZ0Cy zZ0{)K+r?IA_==W51&I!DLOU@GNEd=BKD;3!LZ|Fh?|_u)khA3KPFp zJioD0#;O|YP4en{r%#$GMmhy%eGox{ruDH^~3|l3*S34shMMDd?D67wLg8@ z`3BcNPdY>S$6=fAWV?xKWW&vQ%Zvhr7EW0piXQ)<@@flU`LCi;;9Ky#o*5x-j4L!5ZxUj2_0c+I5I*Om9AUBHl@mT2x8voQ70zQyF+9T=cHx<|P~UYxa8&GsI0sG~h%5-y`fW z+-l$YE!h#4*{Zgh4Vw^Vzgi3SQ*VrPbp9xpgLqDD3kyG%wF@f>wyuzBW9u7@#Lt5B zxMsK%*T()FGjC6s`|nxOFh^Khi$E!+C%48|p&6SMTmALP-+=gry^s{rR1zS4F|m0p z&a~(5diFco_c&WLpg5?xK8DVwDon~(C3EBSk=)lwu1@-ZfeNU&&J;r&?ucwP#{Dq- zEnrRd5F^6K+7F&nxFT}O$TrC)$h9B`*TilEM0$fO+QcFVC6UTW`k7j2Nvbb^ZRMKo zy!jTU`+GK5T&P2aLMHs&!;WsLyilB`xvpkeAG;-L$ThjO1slbf zP_88jFUeBAErw1M;1CXP$BQkYKjdNzyk>fKkdAb)`Ub)rbBE$MoZTLdp+su2zA zrPJGmwi;04eTI!8qx%PvZaZOY-CZ}@bcAEJbj9xRC@OFQ${pd>-%@WRuInDgs_0W^ z52}3DcCG-Su?83SNvR(L`uo=zU=RFm_-PQ(l1mbRQu(Bbuk96X|5h1z(4@0=WlC54 zt~BESM@rz%oDGfM}hm(hLy2-$KmQzDMcm_r7e<+5|~R(yW)NW64_#+FREC zb(?tqS3Y`x>;)nTU-Nk`$q~gg)Ga*a<$Pfu~yzX(> zeJ&89E~7?JZNP z3&V56%Om_L+tFVR!7^vRRuJ%?9AT`D!&%#$_G6zu_?J&#+}n;H7{rqI@M@mw`Dq_8 zJ_U*w#LTUeYhuibMe$YM+JRw}*`N0fu26N0OO^Y8GQ#mQ&jt8{X#$B{CcL>znBBf? zV4U)Wh-q9rNeS9Ni`B`CLL*dlmy>reZl0(KjZ8?|)y6-%ow&4bx_Qf&bAl)ax3cTV z6;J|Zwc3e-vI z%Mn_JS6)&^x0%KBWt?TV4}20_1VFc*$w_x8$#lx(`Br=42z0C?n}vxFzqs#{+%f>( z`g|>t5RK!LDIBVto-7WmH`rQRa_F-FBN2GVNouc2Du;Dv8Qs&g+I1gj97_WK@N@d z@a#8o*q@D)kD53$7*>b(1JgO9NjL#Q_GmIRIBZErP7sHD+r1k}f(LID7Dtdx%w~x%s*N@`k?;i)DP! zo4@^?vxhy!bC&#AyQ|+(X$9vh2q6!x}m6gKq0NBw^+RG&P! z`J;`95ZsgA<11Zjpd10T6-lvILRp_a@Ed6LR|I8_Y+Mot1h94jV7r0q*NFc*@GSB0-l^V)KAe^+8=2jUrZ8&H`Np(HHH=HpOTcxL#EQn4SuXcK4=~g~8ztF~2yc-}wF{emaSWwx)m-it8V5n$b852r0g zxp$GL+2_ScAL5V=T7FlN)v$8ZTp;_st?uzk^tBwP8gmnT!b z1mxJ*rS@>nYZe#k(Uc^(QVy9SZ{#v|sE|K?*j?SBi#AdkhBai&f2{#!Ga+CvJnyus z{GsHDQ4MsqYp+Ar)P<9y>scD0kS5?4=v~9!1`?BDr~xH0sr=z_X$7u{Uu?xQC8XYN=CWV!2Qj#6vJX>Li3v3s{cN?6x z3PH6|Z@zFG)I@Rn;6)cNClF+H_926+zr=wn_9;--pqP}NpQo6xp%I58>bq0kZ-`TRkswYG?0I9;84Ma?R!9bvR4<@Ck%o zNpba(Uk<_`hzN0q!xm==_>VY5c-kyM(J0}+R$MlUfQK*4>ICUWK1fwL3?-;(`5Rd* zso&?@Kn8VG#6DG4I2)fZ9>27YU=jssMnP=uZ-`Y*HYnio3c~&llJ$Im+G+5VdzDZB zoYPK#UZkDOfaotyDVpStZ5DDH|D$x3yaU2=dpOW?aZ@@$yHZ+QV__VAK@!g>dH00c zqZFM_vIUAL9KH@XS5bb51ni+P#D+@;^np!`EYs$SzmDeBm3!MEXTp*@_EDCE|3UysVIUz9<93rNYa0e0oJ z{2grpt~?tNc3UOj@I8Bsyb{R@r&z?QhY_wS-wGU@85L7;H3~iN+@16lY037*XsvqZ zfOZhY{bg?sLHm`(UnhLH9GL6>xh9%XU4RBDWuwv#D5WXAidJ1_#r$gGNnv?+^+A{* zOX7WZ=Cgl{0L9L4fp9ZQ^{U8t{wvk0Ud4;cTxf`46nE^4FAO|yOPi_E%l3kJjtTn_ zhV)P@fUYmJ2ZqIs__g+Dx0+GFJSv_(RDD@7+-?P^Jx#WsWCScic#{INc)qr zy+fRI#kqe}jvyxc8KF~MQddsXf_tWfqM-Q?U4j+Q>nsnz!b2K4)GrWkZmAr!PNrJ{x1t4u!rFB$H;&l<-$-NVY)tqEW4~l=FwF0 zqk_KKt2Ft0RWn7qH_ZJU3k@@=2MRgzHZwB(-j>FA@1Eo_mDLkg2%>Spx8MkZv$q!R z6})oLrGW(R$6foEOCgb79PYeS?>C!QMuNMy7VZ~d9Cb^9?fNvLNJ_oH%?UbS!Y;*- zt}i_38#7__DL4Wb7~%#gYZRh)Ng{gpsy+z1ecJN?<5R2!m;&Nn&9*^4r1K0G-^Dc_ z&rLY~1%Yy9qOCMipIp1wkwTayU#XMT{3O@v*BB6;UEdguf(*$h2f{nqupAD-zykoM zpKTv{kzyB_6ZFvVBZp>O<}&2T!wYQ?shEv}xDz}8HYi>43hS1w%AnBj!(k17Sotx{S25j^EON{zDn-wJr*JzJ$g+VXur2!!Q0Hnd z=SN3OoRM`VWI8AK-|o#8Itf_zxPwQ?n*lr`Qe4eantMlJ`#M0?)#QeD-d$Q8m!AVq znu#~6TYWetTgci|K((hMPJ(kM8@GbOB3$3bpc!S53v6F8$O+rZKu&nbC{CBOreL3z zN^7#RIH^FHV2~{|VvQ3>cXYGM4J~{Q!l2gf&()}^*;3y}p7h{m_z~ z)o0AeH$P-6lqlodT0qBFUMCkrlqb0U=Oo<%?8%K#@QJ~^%OG!{{pG|l0JL!;o!pBL z067xdIGdIucl4$*vKu5z>jRinuW!|gZ$Yc?8z7EmNHzqEU(nS@%&5z{__51%rpHzC zeWS4Qd>$77IqWN%=+=5^*ft^Ugb)(gu@yB8RGT47K{riLl{4)9)>Fd9Nk1q^8(bR=o4;807rEy zTaNc>Fmc}akQIl%5%UtOwAd4qT+|K{(DKjD`cSdbwq*`41(Q}OLv(PGXM181_mJgp zCtncuHhb1Sy+p#tg{}o&85^W`QWN*x(|g z{H67^Ty&tEd=HWAAq@Cj3>9Xp#@wZCWH}*oF|X2GCdR8J9XcE-UJbZ?=HZ~UK*>VT zWlpUlQ*i;nKCJX<$3f~@9Fn97${5WM<4j_MBvg?dj5iXG!0->VNqwuSmH{R7H8tBw z`}@Aa9N7@PC~Ps8yjC7E8n)#;`t%t3M9X6c0iJ++dv{0pd*F%4&nU|Vk{h8DLi-Bd zx8!*fsne{+3c>+I@DuS;8m#hL!X@OI_A50eha`j)+E9_aWNa%(VF{Iox6ZQ>zg;A# z%05EVf{+V-Bn^hghnNm@^TaT2mOkTaCss~3!EpL?DEn!#1&4qg!Jf(>e3Zgs5Ef2& z4IwJ3HVM#NXG#@EI=6Ny@0>!D{G@H43xAdY48N0ce^RxccspGQr6^AWNz(lCe=~Wedc8o z8#n6#e)5ISGA4n3ysxy@@NHP#Hm-BJ6i*IOy1qA%%N5qDgtzCPMaaz|myYoG76Wi~ zpa$}$p3sZ83Y!(hB>=8^yPdj8D!n(vS{sE6Aud!zNILz)F&5A&XJH*{>mk@|f8UFi zFh4p$Sm)9_lWC{<32}-(Dmze;M__C?Eri6b4D)*HABWc?&iY8W;;!_#W~(Re z0whaE-#mb(m>kPK2cVTnS<2ElXJ8P3JlbfX9JwoGNn2VfRn5hBU>_JGB0Uu|<0b@) zFy?=Aa|`{n{Id4Bv7^%3v2BA?GOH;KxS1vNa3U!5vYCmH@?7C*n}=u@2Wgsb2A2*w zpNnyZIdGfVo9r=w!2Tk6BxOmA3A6KKhsIKgy-mXL>~2uz5KsF$ahDvF{`UZ8+pmnr zz_F4lK{>+_vWz10eRg}@*E`+nZVovJaX9ceXw<@z?wIesRi^3NbLQ_9j61xpIT- zU@>SI(HamY;WfdyJD1EY#)BXCV}~- zkw>-LIUfo|@Vr-8fqB9gGpEErfscn?)uYIzb#aM&=ZnbhznIP$pc7a~rGw#58rIrB zGAqK$$)-#VI*$dGfGm&@D#nYY_AtjpgDT#w81OFjAF!u)eu5jvvRFY$AI$IkI0Ch(BEyj0BtKL3;Wb@p$fI}n@FwU-pIQ_KkSW64?1|-CkSW% z3AZWt09ZJGB0GNAnK2bJ4vPTaG!Rt3xG!%Sx)n;$ebRBG=D#i43!N`uh*W4* z)0SQ&uKFp8^!>|w@n=urVe?UQ@A5sC_zK(CYF`j+!cK$EaX5MIyv^Y_)R z1QLofRav+zAvmMNQqyut(PtDX3UaI-8)F>K(!QoQdVpuMOaIGfcl(!@=X z_I_<9XZ4>4z0IYuCJ7r9V)R2l16I%0P107s@aaT%;mp_L0)V(>JLX>epb;J zC}%H7{^rdQ4fGm!9K?-(84sQMohXy-z1yHjSlUMeILPO?Llb%iiYd8&P~xMDr&!s` z(x<&Lq(=X~yX?XK4oel@?`&-cY`@N_rO1}!pbY=7q}fjt#yNZd)ue4cHfG)=L?nZL zxdui2W8bV04tCQ^0`?uv-_0HK(pVEJ-S2Uwx}3c%>)&XZv}zwgQbF^+3mMt?>BmJrc*pCpFC)ey%n5YV*fWnN<`-9$j%fG zG2K6DmTH|{)xpji3qFM4zX(}X5?8s&-VawU58}{AlFVN$hi{;DCYDRvfb3fC>-24I zD!xALzq`W!BE#p4gfI*b>_nM?S~bT5qsr8ZwU4h->L@mMklsz0{pTo`#p%%T1Lz5f zSq5%_uj%MU;usj9Oa^~U$}uVficA)^Jl$P_oc-@t_@N2bLa0#}+aEw^atV+eg19)5Fxrum%vlN)P6^5XD$PB;GiK$Y0sbe*M6{$R_q z-1;XsQYn_+*Qm&6yxoW#%JqjkX%_V&@hycG0dAp@6e+x^hf!ZRfJ)g-qH^h=ZPqjz zRmDlu$4TSUJfC|fzfcH|H+F_|MB+=~G~M;#UlN@RZnj>c5uzMUbOS9vihEzQcuQc#f%4+Fy>(neGKqa62v~#lI<}np_?!}UJ``2< zh=1&Yx0a#A2=pF(MtAafbtyJS=PbWwIJ%qHyYt5{bS7x-l6c>^fsFmB&?TmvAjhS? z=5qt(mYI{mmffgehX;t?UrI@4uXAj$j@k5ufjBjfT6ay}+0P#765a4AcV~okHMw{3 zi&SeZ7Q&jW@9=({D7p3Lk7^1S!h2u|1$M;&Q$(kFsm|m$Qz0 zbeyi6{?NVMlbcldHk6s30^JYa>~rMrE`)Pg=XKp)xS!%%W&es$JgGDOHu&UHc~a9j z{X8qI_wneX32CQqd(!x~LsYa4OR*w~RM82JlMnKw9nve1u^~C3A*SV&UgVLX@%n~; zobJj*tgi*{5r@I+6R_eMNmB~fF|?=xzgp609V+Q2Q9EH-338>tg5PLU{rIRCQioMM zi;pI8UQV?n1uZ>$HbHw7!I(qaQaixLKUE|dG3vA?eglp@UpR@{e@Icl1WVxDnO&ZPjQa zu}|WscrEH^bDRrGUQUymxb^C@)&Q?%jrbPcbMh`t*V#_)s%8(jZg^4amB*zK$O{5< zzRm7#0dW0idFe57^=fVMKlxA6KPC>x_5aQYB1n!4LECRFcvnajrSKLSs#kgYv6+3%m^hi4IAEopGlK73mKMrd)ShF9lmLt!D$25j7| z!@An4a@z>Y-*I|63O1`#bSEmVwDj%bwexHWzYovg(n4!=6?GcW`G~dqgw9<*nqrm} zhl(s6Xaz`grSm^@K>mJ0;bG{6_`R(KG#1f`L7!aq#$gMzAdB@)KIw>HLT3f#mv}tvf)Ef$z;3!MydT^{#$zZ*jCU9g6cTDi zJL8&2WwM(WKp`7!O_Vo^hF5Zly>|0>p^eTm4~EN;$tz@{f#gT--$`G0GKDU!?LL`< z?FMS8aS)0l97^xpo+?nm(}GTm1zgU_`gkmeU_hWlS%0EIY)yvTG0&FiGAO@^>5wC~#Fr@LP8*wroy0$=OhDsm-Qagjf@dgl^e0l|i%!q2$f50_xk6Edf2*I+ z;*^B}0?I``bC1#nu8QNpqjGcfN|guvbU(pv7)NG7#o`*=rqC94b~n@#wm1MKl`GOk zym;2hA%noYVC-WDom2p#+Z}~Hw>qaIdP$}#xs2`S9nB9O6!N3hn7GSdWLoJ_#0;^! zVFE+k!(fP;uo<|x?unRcQG_cxa5Mykx;PU5-tcEQK$Ed9s4Dz@f9?aI%}Z_Kgcjs) z%%_&1fjbZLwFbsO;z1Ucmaisjr_IY16>33~XC_ZZ4DA;k-oG@r&7#n>d43)gc{+!- z&nzEVW`usYxAX5x4X~eY#dzCz)*!wDY8hn^Y`UThe+Jna*g@gjLim9nHYSqy@e>Qb z9kPo>#)6%5lj+OOu?cOsS>4ju$!DN%C?+YTHNM?} z5WM~+;UBAHc=^M3Bt27c8|mX5D&X=wB21%CN4k!|A(CD>C$YpPLt*_@CsE8Jx!d^mjD_WODG85W$P~=8gWO9^5H8cA;>w4*91>Lzp;tOhh*nB zN9TQ`TPhvaA^6%;iG)I9PDZF9x&bg%s4pq@prR|&cUen7?);0pgwFPtG*D2+^cixS znOf2#4{4xdf8qEt4$-UKffv9YHE1cbG084E^_)xFGW~Nw#<2KoZUWmxGnn*(-9`gf zEVq1vB6>cI-J8(KA-tpAB=smMb~DWZR#r*;#g|>08Ee)@z8gZf95S^|2o<&mTA9VL zpE_+HXia`34g8sQo!Oe=Y6h~MI zssCkOmYpN)IMPNfP!Dr1b;tMSrVI<+8<}2b{=v2X38fh_a)ova06zc3OaG6Q_Bg#p z{XaDEl0=yg>pw8@c~8x8ChKZB)?dOcf=L{GwD=>`<1psF;|oZEIR2bLox8LLl+1iq zU5rYlnTaaPE|mT18oVy!lR+C8qy6j4eE%!Tpl^$~oK#RLg(t34IW}AHyyB>EJ4V^F zWQN3Om-}+gdC&YY-?k~H3$%5Ds+1EA(NJ)3OKe(Fg5G+J)AiU?fiy>YPx+V(0Q2~1 z<)F8V#fo2wG1_h06a+iKps*kRyTAm=9OM*_&gdd-sd?e6b&j+?nd5$_}M6F5w!|5(PSkH;(iM%CZ_8?U!LPXL_T8`p;-U#D~7R zF%c_fvLk_P_ww`8rXf7lCA+q`WGSaNB>#R_nFVVh4ujs~knxHW;sKecdycY$tL61N zo%NbCu*U5ME^ai~`o%Dqf#^r>jgifAx)mEQ_(di+ln@M&fg4W3x(gsnkyR;8x{ph% zxj8CMk}9e&tUb2RgHm6rzN`nGL^BVJfa-lI+j9J=j-^>wS>tcyi&;Tu_9+KBz~Amw zCYQ`yHbtz~a(hT#A&;3*d6SWTV#~&?mHmgujL5&wRHzR#QF%Mf5;SI&vk8yPom*9j z5jjb*zX>kfj*XgWRg1!cLhNn(e1z)K4}O}87XuZepslaSciK-PP|dR6BF{Ye?kVZz zKp9`<y8WCFdG4o4<6Gt)V>vyhf(hE=U0c}WWB8tgPf&NKIbys73D*?F9~dvXDTi$O(9f^O6d z1Mc$`#%U`s_Q#%rg_Ui8-!MV3x#|wam}=Hf=LUV2Yir_uI}CUlWP_bkqv~TpkMO@F z04Y>9@bLz5qnD~N_UW=iJ^zwu;y`KMZ?_Yb1Fs*5Mq1cEHx9NdYBiR=k~ek}^byfn zL&@;~<(Fvn@pS0kbSCbh6K}iQxo+*X61GunO|8C?TS14hW_D)stk;Y)5|w>1qS_;(3lWEa!0dAt(u@uq*l-{F?nmB=qD=vmEUW&nR)QTKgwLzkJU3EAc-!k@v|P~z z6_Cfd>e;)LeSYVejKWPj)BG|ARc{{-z-|F7yEaDo+ab*$TU^H76FMmE4TdYc7(iIheK#(YNhZ-<#%Hm3*~G zdGaCU$t$lMq-f1*yC^yva*Fqp=Iv`ATQ@7YU(cyEZ>TdcU#p}sv{$L0?ux#hr|gs5 zCS+t-<;{9^P}eGAYDOz$i6-XM5}B{R|7J!Ls2btVW9;*+c7L^YhGCZ80`0d3hjhP> zIHn}$|ErH-{Xc$9>wi!1pMH`IL4(KiGh;BAryqLntv!>xzxJZL zdu+!0ww%(nkuDUjS68`p5ZE8oy zvw>IAR%_tCQ!);?4P__&|Ni)Y6AUoP)%Rm#&#c;y&AeuJtkgxlYjhKP!;#&9Lw!uQ|S|Zvo zM2qMlX0&L7=;pk9=gZ#Lw|{$|ea`vgT)+QZX03NU>t4@&KV_|`d%Efu&N7_^fj}2D zz;_`a&~Zi(h$`yzG2lNDHOKZqAU+d~yDEl{tro`?<1AZ)*;e*6gm>z7ey`O=4xS;0 zt(?Og;|S#tfJ%Ndy43hla+<^Zw#b7!k2p>`Lz$c>z*5h@zB}XN#(sh0c>M47d=QD| z{FNKxIhOj_NtF$CFIWg&vYX?jrCk0=dqJY?OBrhtGfrK}GuN#SzMKbz@-#q=K_F2C z`$^DeF!C74kqb-(lDLcpftbz!#v)GegF@B9=s>@5s+WH)Vccqg?{w?Wn}I^rIUFz~I!Tw)5ZZ);=7v3E{ez8$ z?aGFo0UY)M`a0TcT9bQzB5;}7 zUPn?QuZW%+w6cN@)Nk6%%^OiiMt9P+V`>qJ*^p^$4?7CADk!)NCboCbfSd&}EMHH&x z^!?s~cxIY&rH1n)=z4TdWyeTKKbn1GJW%=Bt2Ju)mU_(64a6zTdbKu~ABms`V16tS zvYrf=WJ=-C3SKEd)c9dERGg)LcCX@7d)T3h9R=A5@&J1Jo0q~3own?#o0veMIm8=) zZN$x=2kf^^)!-=LupAau1Qe^al$}L8wM)0tNbr?NI9*PzaaZ!*9u+XXY?&QeFRB#O zj=`Jr3+HBmpD8C(_C91&{7!*h>Fr*GY=l;;st7cAD5Za9;Rk(tBkzdBl0SQvty>vx zSa?XKTmpS-lf8#zGKw9Kk8Vt49lzks2x{z+lmru6mTsVy(|89uNW|_`k!{H?i_x58 zpjc$^2}}<~NJKSDoQvq+!l`>k4b*7o$_8vYG~r+P*1ze3|7XMMzK+%eZtN_sG2k-Z zd#dWwsmgx3Z28Eitw(rJQSx{go#nH>jb0*i*67ga_;_(7)rzC4@pTq2pN^7#&BI?C zc0OsC4<7S;oNXT4Rb6Z^q7r>Gz2PyTjxV(MZsqk1Z_5rVV4RHqq^9M`Mw>oa92dCf z?kv?65XCOWws?UDDk+F98Ezja(KH!y|(h|uU9UjI~ zKY#S+0=}Puwm(q&H>_pU_!&Pzx9RbV5=h(p+1h*Cpm4*haVPjgTT{AV+$!^JRsN(- z5*uZ8#-oXkJ_T8-0ztM)35OGWaf`hP;XCW3tAZx#09P9 zuwC#_C$1X|@WzB0Zl{PGC>)HgtvX!PhV79bO#<{;eVy*D%?+ly?j$#ZI)TaIBKHBf zEWvl2K4DHniLZz>%WC2MqJg<1V2o00j&qr+iu2ddHwTeDxK#PWbwwWR2pGk!;+#?k$mr#xY2WRFSC^TdpTejP6$pcg#)Wtc z028Oq;elSR_Px&WK)n#2!&ZaMz{k)8x{Yd&Urj_jRNn@d&uJLtDv5egGY*LPQapb#Xc2$un zA4J0r;N^>>PX(j1`S3TAW}|cNBxUDa`X7X!e~n^Po3bexs<<<+aaw~U0MxnlIHlgp6EZUw#T3je}!*Ey{ITY`EBLzSqWcF z4b%r&M!Cz%&D10Thh5{j^bu8aHnb_v+e!nOeXa`{dT}n@7(gV<`|7JZhc3ro^UdPq zEb@>Z(Kls`spQaq8Ooa7JrT0IgfZ}Sv)P|%koj4j4}r}QUznSlW5@ty-N$RLX6eBx z8GGB`Y!BWgmQ_*9j8K34QwaL+_$+t6Y=ihN7MB~~lAL(R20)ym;R5G=rSs-%$WwiS zK$PNwH#cxCA)jrlWtns*|FmcR^|QS)*wm*Zvd%QI>k4at?U8cN1i*@KhID}hLE+R9 z-)K7a^_2I2OtSw=+y*flTfX~ley^f3rB;sxG{*D8$UP~77Gf{6yE!Mv;N)e8k#&Z z0Xxvp^@<@`4B)ycW7g$Ws(oD~VK&lR?q7<;l2<;)c2UM?PrK0(nYtK(mhghgGNF45 zd$%w=aAAhzd@M;}WLIm}Y0vpUE03^23`_bi;>kZziC;_plPDzvUmgDW)6eo;L^AEZLVUo24h>3O2`XmqLy$`0! zy%~!607gfeWDCY#G>uNZ{l7|Q|COH1HUqj=FzAu>SM7>*uU^7jyM&&-onD-Lb7E_{ ziv(;^@qDPd;2%~einS9iFEKD6n|n3qqNuW%p`!YB8dU6xd-e7OHkKC90e z&kKMqru}o3_^$*dzz2wFbAY#x%X{asil(`_xz(+c+wH6a1(G+iDA}w|n6yfF7Uk93 zsR9QOak-1`g-( z$0JE(%{Z+``&tRUyBN^OE(^6bc%>1yhxaLe_vq)GLnZ>hbt^YLNL_$8Gx6d0+R7%TUR(fT7wT6C*|W7@vfCBe7iV+fXDvD^l;gozdLF?3J1bcBmv2 z$Vz&T2y4m5sSE3SbJhfNm#{ceSpYVS$OQC7!a#{b=#Kf-6tx-IG@;`!Xm~3~qL-R@=T+XMtnX&p%Yp`H!Mc(R+zYthtFVG-Y**t+&^x?NenH zDgHs2#L8rRHHt!ZFXKUZbu~d5Zw8$Cd&Ql=0cJuHU{EIpm<0cNKyB_{U zO5Os29>};K_11`-^qf7E1lc2E+5F%J_r%Cpe#a^OLlThthX3EMcmI_@{P(NpfBag& z?cjr-BmR0BSeKcKii$6~bpdN%iq<8SaFjiUId8+3LB<=wN+DBE0WM>O^u2%nm}uDA z@NjiaN012~!SV=&vARI(@tWY7!DNr1tsWHL>Wz9ed&P0vp5f8V{4AJMYWzY6F1K$2 zK9ifQw^V=;t27y^MX|m+?w)JXXEITXvd#Kpr@%hP-rh>n_+1?taC;0OK#8HHy#HKp zYy6X`oz!BuELinK6g%W(>@#-#-bf$CSQiIxz&7P#*zzji zhgeU9_{673N6#HIAX`2LFAM9Zs)P*3IpMfryh@&7bSq!4pfhFSv!wLWxAqXy**}6z zF6B>6C5P!>gsj>;t_}`W5xCvh97nk!uA+EfDhAJ3CeD4AnI|GGhZ%jb3e_7;v-$lF z2bd~OQDt7khtj8~EDsac40>~_nY$vuOxg_6$@E1X2DrTR2~6N-{oYEBV9qvsl#1BL zgnVN`+>q=}Ax-9fF8jv!tUU=R>4_oXmLjbdKNmrGjEEmWTZ}e&t`tddizl`IcC{Lx zVO8w0T`1b3VK4PH6ySb3RV?4(xJ+giDZj`(789or)BoE=InpVk?eRUQhrg4#*UmsB)x&dMd5=4v} z38A{xI!270#@2T7X2P9148tRsZy}6yOT;&hUB4REf5lfTC<<5C``oKiD%x zAeV2VU2JOBN#?Wz3nN70EkxF$Ab5X=jNq0wOJKaAR^Z}~lI0IBTFMZjfe_2KD+pwE zsC%^6=O*vQB16d%pe6F9vQtiD+_4FrQVB6+g)eP88=Ma}tk*&D;x00V=75p5aa9%2 z!H)7N>qUa!aZQVp1@gZUeZ|IJwCTG>(#-&kn8EY~lZXlnECv+Ip%Sg=b;`^N?+DeEuLbM* zG(Hn$evo66%Pz@W=meFuz)&-zQ)y^I-OoUTO1<9&Ep4kVvlcPL0hq0yo1tPe<9@VS zTs%vC9x^~w)9Iwy0{s-mO7_a$?Lia@2GK9EAy?coU4bR8=5Caa$F>(ka&GS8?>P`ce7 za!ICGv(}!X!~|Q`qS3eZUYg!A6qMhekae3VH+bQAJJ(ZfjQ0(rUBbs5|jOBw7ofZF+%aC7&nj z(!NKo4^rsNC@AiVN_6b?6=h}E?ez+jJ3WP_+jY4~CA2k@UDf*H*2JpPjerqNV(G`Z zO?E0)pq24&v;zN8%>Flx#s9|FGHTZJ(vorGa+C#^nVS}}_oH5ZDzuH*5C?s`4^&)N zqIk2rBiSqw=hr87FV`q^s_pV8&)llMeCzp8v;j!rw=lZk?MP6i8T1UNFWaWED=4;Ra<|S9Ut)5|QBY;+nYw>g1c_;c2Sazki$UGUyI0L>~iG5^eT`aJOJ*fk4krtCST(Ckh z(s34EFJh{ud(ZDjn2j~zAgxUeHs~*Y<|24jt(QDs`jBG&W2r|)L!xBVR*dv^h@b@z zO)3OSRJm%H<&@EjL0x;jsG*$6+!+j|b-W!3mq)lNv^(FrLM15*-Dm~HwWK)Z0vKua zMU=X)ebrLTT`e`5?-03DKS!QVPD=b}eHb1t%IyBqYp~FDjqcrSkDFD-u9Gl6*wU|| zLk~H5ruoKYbZiBx&Rb43a^`^?O(e^`^d^tmZKHuSq4{O6xTJ21LX$-MEVpy~y47|< zpnmT0iR59}@w&{pV*}8lAJ5{h8e^R8k{GaWo~uBqEmhNdge$x#MuYuB_e}>N_!xJ| zhrS4*ky{EONfMldnJw>b8g(sh7R$cm0}xc5OlVdS==hGN!R#+LP&%AT;{>u`$~CXgVJ>NKa9eCsh0hy~v1O+Up|${OwQU_TJ&`T5Z`rmp8 zUx8Fp_1W816+x~Y=v3Bl#Ja!Z-u188lFKklz|q6_-<9HH2w$f8ZVguyn#E6|0?Q_{ z>es3H2!8fR%^cOVzSGsKF#l;<$bP~DQSF-cl`8CXkr~3&eX(e}u3#M&yzGYhTH$mr z)31Fly<Ie~we|1gmkERi?7+r-IbE=w5-YjTpZ{;;L>P3zocxDpkcGcwwV z6X>jO-;tC^+Byu9OxNIfPm2lRhQs%WuTx^*O-7@|Yfj1th4uGH{g^8uCTEw75V(EC zni{~usn8*+T)}{)GiS-up-@?-(+$hJ9g8n^rnptG+POqWbLuM2 zaz{!RJvByx&+;-E5)tSJ)639w?sgn0@lqwH%zYG1w~_3g{5+ZBL<@5#p5ousuP-wk zd@IrQR%7A4^vm9-!qB8NzUCZ8LzYv}k)$_%pA%|PnsSZU<4$hN-r2Qdw$p?4YXO;3 z)~G%K^xK4k&Nb6q@RL()=UeE=NJsr`XN*D{Mm6}g#VbDk=uxvj}nqAo~gaco(9T7TVnpBBa%?m(h}Y2cz$=lB{b{ z^pCt*qsS+{B*4TW(pd5-)TRJ=#`$%wR~b>hZkV*)#&0Z@A8i3EeS8mE{NqiTn#=p{ zp57_j;lcXd9ch0L&4E54XoXua@_WHpV$tIG4-4k^%P1qb+h!4l7&*J5jhPls`m&#| zEWfrCsH{*SeWIIQT5|a*f*J^2R0gbe3u~=Gun4E9CU(hylt)iaL)1s!=66ISXJhZ$ z%We-ZP1sAH!tusgsjCNe+L-p&;uS_M>fsH=)*NcAEjjy%8Cm&Q2RY>X>d{3~Y*k^Q zQaAl*yr#KV6)J+;t&)4UQU``piMyFknzWW42UTedktA!Z}#bP(bJ?QEG!rb=9R6ye>g;bYrD7R7S6$%al9)nd$j z$E-W&zjq{e$a^};PfKE%hInw~d*$|667hNxj|ffAPul%35-Lq3-Sh zDn|P`+0p6d+%tU@MGt#{`JDwgK#ri+mT&u_`J?IGe%fq% zz{wLGoX%1*EeYkYhnia2v;ra$a8^Ht96@j-&^31p{$XTbiWj^mXBUHMm`}hLY_)vD z_2&$34IRG#304}`N{%#%*Gg8pi3_Uk=vW90P?;^%95N;q81Bf`H1~2lv_rA!cS^`i z$mN{rx+Gqqz{L{9KKXSo>{j|it70dm)4Vqoi*&0^$xj6?;L{{53m(QPfOAvH#dqW$ zR*;Nm>9DD zl@|;|NN5bXBy!GV2KN+}kUt{j7J^73sSn~WT1$098nP-itQLm8N=iaoB7%VmL%n_Q z?Q3WGIQMrxk}Q^Z*AKnPg8l)LFyE{EBe#N827XVx87+Gyk>{pjFduKXhHdb2N3F|y zpm&d)myRyeCloPx`+S^49egzj8B3)cuUUTx8QyI@(NM>{W(MPP}M(acYSn%ST7T7nKf}09LR-8lKSy>aD;JhVRn+f zLvjF8Vv*%yC!!B~kr!hMgS8nGOdmbcWXw!^bA76+<^>Ye zzYY%Mrn?QKkRJo$zFw}-)qzNt0_uH{c_MwxLcp~+a$zr4mZ5Fjc~K?7Mmia~|9HNrH;Bw%Q(GDnPidv>Suecze+wbR!O49a zb;_VR+)Yd+h2x=qWQs^+=?4}JMApnHcx6Gn-4kAPAyXwt@~1^{*7!S;rE!(`FP*8=-xezxSm*oOot&4*t zF4)AF0;!GRB^{iFve_3>x0Q6Xe|rv3?0}CPTBpwOoOb1#3C7HCrDGS~d%YeAD7v1d zu8qv*Jm{N}lJ)w)S&DmdAx=ysy8iB`mlMe~m6>kk?9;wHS20J1kZC>ExQPpU+E6fVd`S%(AnDoh_ zH!kV|YfIw6IZz+afVZ)|IoJB>6pfuG<>b+dqGHMGcDCV>V!4!KjXuEDdP<5`32>Rl zx;t!O5Btwv`FFxYX^*i0;9_od##L!xryEYo2DIz4#o@6#5+8kzRut@jZx8)wA$4V~ zZjT`XA|^eG`(L0jQVn0P!DSp9eyx^x*k|Vh9TBw)w&*+t#r(w zxWQ-cI~_V3y|bVC^_z{hsTGHmJ#BtS&_Myt^ehB^%W3*`{VHeOVsk;r;gD9@amUCco-Pl!wd>ylHq}KNDs3+!N^#^lJmaeAE@_0kWl2 ze-3;Cv+m=8=d4zyj11K+X3#;$!=m@r+a2UlVti_hy5%KD6k*^YCG@Vu_PZXC9vdcA z=3zA=x;JV9${6_Pe-PjyWtG#yZy1Gd_mUVW*HKe07p+!rC|(Hiw{uXs(7pA`XPhL! zx&H0e0oxB?GfwNln8HeV2w-OQdFv!B&-Qd_#yx0W0qJij@n1zrza+=pp8L zz_qd^%0U2d|Ie%sSX;WSW!MzYOaJGZ;sRsd__&{V{Q43sq}TWqMgf{Qum6qi$T>SY z)Ysr8$sy6VC{I*$wM+xvDRm{!=3Ch`syJl+p{Qx-SP@U~6}B@24EP z)m+1`!wAs^_?Y+a^ARY7$HvEZ_4efH|KNYfOrWp!TWx7!8 z(s~_^(-p`_b`(9L@8r^$h|=Dy^NGZ+Wi8dU?D(F3M^8o9&K5+DkAVO%s}FD1Lz`N3XrQ@$ZHbB24_MR6mmcKYNL^{{{Ya-GL(TrY^7RjyJyu eaciAIg};Qbvf+JV20S$cX{hSnExvs}>^}g`dZ9`H literal 44384 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 0 { + c.String(http.StatusInternalServerError, "已经绑定其他账号") + return + } + //绑定 + u := service.AllService.UserService.InfoById(v.UserId) + if u == nil { + c.String(http.StatusInternalServerError, "用户不存在") + return + } + //绑定 + err = service.AllService.OauthService.BindGoogleUser(userData.Email, googleName, v.UserId) + if err != nil { + c.String(http.StatusInternalServerError, "绑定失败") + return + } + c.String(http.StatusOK, "绑定成功") + return + } else if ac == service.OauthActionTypeLogin { + if v.UserId != 0 { + c.String(http.StatusInternalServerError, "授权已经成功") + return + } + u := service.AllService.UserService.InfoByGoogleEmail(userData.Email) + if u == nil { + oa := service.AllService.OauthService.InfoByOp(ty) + if !*oa.AutoRegister { + //c.String(http.StatusInternalServerError, "还未绑定用户,请先绑定") + + v.ThirdName = googleName + v.ThirdOpenId = userData.Email + url := global.Config.Rustdesk.ApiServer + "/_admin/#/oauth/bind/" + cacheKey + c.Redirect(http.StatusFound, url) + return + } + + //自动注册 + u = service.AllService.UserService.RegisterByGoogle(googleName, userData.Email) + if u.Id == 0 { + c.String(http.StatusInternalServerError, "注册失败") + return + } + } + + v.UserId = u.Id + service.AllService.OauthService.SetOauthCache(cacheKey, v, 0) + c.String(http.StatusOK, "授权成功") + return + } + } + c.String(http.StatusInternalServerError, "授权配置错误,请联系管理员") + } // WebOauthLogin diff --git a/service/oauth.go b/service/oauth.go index 19f4352..47b9c34 100644 --- a/service/oauth.go +++ b/service/oauth.go @@ -68,7 +68,15 @@ type GithubUserdata struct { UpdatedAt time.Time `json:"updated_at"` Url string `json:"url"` } - +type GoogleUserdata struct { + Email string `json:"email"` + FamilyName string `json:"family_name"` + GivenName string `json:"given_name"` + Id string `json:"id"` + Name string `json:"name"` + Picture string `json:"picture"` + VerifiedEmail bool `json:"verified_email"` +} type OauthCacheItem struct { UserId uint `json:"user_id"` Id string `json:"id"` //rustdesk的设备ID @@ -187,7 +195,7 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith }(resp.Body) // 在这里处理 GitHub 用户信息 - if err := json.NewDecoder(resp.Body).Decode(&userData); err != nil { + if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil { global.Logger.Warn("failed decoding user info: %s\n", err) error = errors.New("解析user info失败") return @@ -195,6 +203,37 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith return } +func (os *OauthService) GoogleCallback(code string) (error error, userData *GoogleUserdata) { + err, oauthConfig := os.GetOauthConfig(model.OauthTypeGoogle) + token, err := oauthConfig.Exchange(context.Background(), code) + if err != nil { + global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err)) + error = errors.New("获取token失败") + return + } + // 创建 HTTP 客户端,并将 access_token 添加到 Authorization 头中 + client := oauthConfig.Client(context.Background(), token) + resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo") + if err != nil { + global.Logger.Warn("failed getting user info: %s\n", err) + error = errors.New("获取user info失败: " + err.Error()) + return + } + defer func(Body io.ReadCloser) { + err := Body.Close() + if err != nil { + global.Logger.Warn("failed closing response body: %s\n", err) + } + }(resp.Body) + + if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil { + global.Logger.Warn("failed decoding user info: %s\n", err) + error = errors.New("解析user info失败:" + err.Error()) + return + } + return +} + func (os *OauthService) UserThirdInfo(op, openid string) *model.UserThird { ut := &model.UserThird{} global.DB.Where("open_id = ? and third_type = ?", openid, op).First(ut) @@ -202,14 +241,22 @@ func (os *OauthService) UserThirdInfo(op, openid string) *model.UserThird { } func (os *OauthService) BindGithubUser(openid, username string, userId uint) error { + return os.BindOauthUser(model.OauthTypeGithub, openid, username, userId) +} + +func (os *OauthService) BindGoogleUser(email, username string, userId uint) error { + return os.BindOauthUser(model.OauthTypeGoogle, email, username, userId) +} +func (os *OauthService) BindOauthUser(thirdType, openid, username string, userId uint) error { utr := &model.UserThird{ OpenId: openid, - ThirdType: model.OauthTypeGithub, + ThirdType: thirdType, ThirdName: username, UserId: userId, } return global.DB.Create(utr).Error } + func (os *OauthService) UnBindGithubUser(userid uint) error { return global.DB.Where("user_id = ? and third_type = ?", userid, model.OauthTypeGithub).Delete(&model.UserThird{}).Error } diff --git a/service/user.go b/service/user.go index aeff619..86d1cae 100644 --- a/service/user.go +++ b/service/user.go @@ -175,7 +175,17 @@ func (us *UserService) RouteNames(u *model.User) []string { // InfoByGithubId 根据githubid取用户信息 func (us *UserService) InfoByGithubId(githubId string) *model.User { - ut := AllService.OauthService.UserThirdInfo(model.OauthTypeGithub, githubId) + return us.InfoByOauthId(model.OauthTypeGithub, githubId) +} + +// InfoByGoogleEmail 根据googleid取用户信息 +func (us *UserService) InfoByGoogleEmail(email string) *model.User { + return us.InfoByOauthId(model.OauthTypeGithub, email) +} + +// InfoByOauthId 根据oauth取用户信息 +func (us *UserService) InfoByOauthId(thirdType, uid string) *model.User { + ut := AllService.OauthService.UserThirdInfo(thirdType, uid) if ut.Id == 0 { return nil } @@ -187,12 +197,22 @@ func (us *UserService) InfoByGithubId(githubId string) *model.User { } // RegisterByGithub 注册 -func (us *UserService) RegisterByGithub(githubName string, githubId int64) *model.User { +func (us *UserService) RegisterByGithub(githubName string, githubId string) *model.User { + return us.RegisterByOauth(model.OauthTypeGithub, githubName, githubId) +} + +// RegisterByGoogle 注册 +func (us *UserService) RegisterByGoogle(name string, email string) *model.User { + return us.RegisterByOauth(model.OauthTypeGoogle, name, email) +} + +// RegisterByOauth 注册 +func (us *UserService) RegisterByOauth(thirdType, thirdName, uid string) *model.User { tx := global.DB.Begin() ut := &model.UserThird{ - OpenId: strconv.FormatInt(githubId, 10), - ThirdName: githubName, - ThirdType: model.OauthTypeGithub, + OpenId: uid, + ThirdName: thirdName, + ThirdType: thirdType, } //global.DB.Where("open_id = ?", githubId).First(ut) //这种情况不应该出现,如果出现说明有bug @@ -203,7 +223,7 @@ func (us *UserService) RegisterByGithub(githubName string, githubId int64) *mode // return u //} - username := us.GenerateUsernameByOauth(githubName) + username := us.GenerateUsernameByOauth(thirdName) u := &model.User{ Username: username, GroupId: 1,