From 70a3c165a9f3882a82cf8946a783ace091635797 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 2 Jul 2015 16:33:38 +0200 Subject: [PATCH] Allow custom label to be set for authentication providers. --- CHANGELOG | 1 + .../bitbucket_64.png | Bin app/assets/images/auth_buttons/github_64.png | Bin 0 -> 2625 bytes app/assets/images/auth_buttons/gitlab_64.png | Bin 0 -> 2849 bytes .../google_64.png | Bin .../twitter_64.png | Bin app/assets/images/authbuttons/github_64.png | Bin 4196 -> 0 bytes app/assets/images/authbuttons/gitlab_64.png | Bin 6559 -> 0 bytes app/controllers/application_controller.rb | 6 +-- .../omniauth_callbacks_controller.rb | 5 +- app/controllers/sessions_controller.rb | 2 +- app/helpers/auth_helper.rb | 50 ++++++++++++++++++ app/helpers/oauth_helper.rb | 34 ------------ app/helpers/profile_helper.rb | 13 ----- app/views/admin/identities/_form.html.haml | 3 +- .../admin/identities/_identity.html.haml | 2 +- app/views/devise/sessions/_new_ldap.html.haml | 2 +- .../devise/shared/_omniauth_box.html.haml | 8 ++- app/views/devise/shared/_signin_box.html.haml | 2 +- app/views/profiles/accounts/show.html.haml | 14 ++--- config/gitlab.yml.example | 25 ++++++--- doc/integration/omniauth.md | 2 +- features/steps/admin/users.rb | 9 +++- lib/gitlab/o_auth/provider.rb | 30 +++++++---- spec/helpers/auth_helper_spec.rb | 20 +++++++ spec/helpers/oauth_helper_spec.rb | 20 ------- 26 files changed, 140 insertions(+), 108 deletions(-) rename app/assets/images/{authbuttons => auth_buttons}/bitbucket_64.png (100%) create mode 100644 app/assets/images/auth_buttons/github_64.png create mode 100644 app/assets/images/auth_buttons/gitlab_64.png rename app/assets/images/{authbuttons => auth_buttons}/google_64.png (100%) rename app/assets/images/{authbuttons => auth_buttons}/twitter_64.png (100%) delete mode 100644 app/assets/images/authbuttons/github_64.png delete mode 100644 app/assets/images/authbuttons/gitlab_64.png create mode 100644 app/helpers/auth_helper.rb delete mode 100644 app/helpers/oauth_helper.rb delete mode 100644 app/helpers/profile_helper.rb create mode 100644 spec/helpers/auth_helper_spec.rb delete mode 100644 spec/helpers/oauth_helper_spec.rb diff --git a/CHANGELOG b/CHANGELOG index c6c5bc0aac4..b31ef352549 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -72,6 +72,7 @@ v 7.12.2 - Faster automerge check and merge itself when source and target branches are in same repository - Audit log for user authentication - Fix transferring of project to another group using the API. + - Allow custom label to be set for authentication providers. v 7.12.1 - Fix error when deleting a user who has projects (Stan Hu) diff --git a/app/assets/images/authbuttons/bitbucket_64.png b/app/assets/images/auth_buttons/bitbucket_64.png similarity index 100% rename from app/assets/images/authbuttons/bitbucket_64.png rename to app/assets/images/auth_buttons/bitbucket_64.png diff --git a/app/assets/images/auth_buttons/github_64.png b/app/assets/images/auth_buttons/github_64.png new file mode 100644 index 0000000000000000000000000000000000000000..182a1a3f734fc1b7d712c68b04c29bad9460d6cd GIT binary patch literal 2625 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/authbuttons/google_64.png b/app/assets/images/auth_buttons/google_64.png similarity index 100% rename from app/assets/images/authbuttons/google_64.png rename to app/assets/images/auth_buttons/google_64.png diff --git a/app/assets/images/authbuttons/twitter_64.png b/app/assets/images/auth_buttons/twitter_64.png similarity index 100% rename from app/assets/images/authbuttons/twitter_64.png rename to app/assets/images/auth_buttons/twitter_64.png diff --git a/app/assets/images/authbuttons/github_64.png b/app/assets/images/authbuttons/github_64.png deleted file mode 100644 index dc7c03d10052a596f062207ae0fd8e9cf384b2aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4196 zcmV-q5S#CbP)O1OJb46<2W;S8)}}1(p?d<-?FRX92j3i_HDVkDkd_tkRNS*|Bb@NczG`%K_t_Lwmf zE*Df1LDR@6EicN&hO%qngx~D_03%})f*27p_y;=?66AGV{6^i72ge&BDpZh=KU5MkMF{KSK1_1DPO0@d-Ox>89E^zzkwh7PT29_C09;QN za_Se9^VELay$^qXeg4w&cYNgPUJsFXlTpe7s0s@JvVzPstXo z#H0|qBPm%<7hWRE@-?T{=XHaH(j)od-tPOJ`@uu61DLRTfqEVRw6yHS8_3mRy1wuN z%4?eWKhB@(8$j>y2%Jz}xEQWzc?}6ZFE%c}7PnL^$Bs=Exc^Hx;MVKPv3_Y0<|ie< zL+=#da>LE$66TWTA~WA9yfNA&xl&ZF9FbSZ68-bG1Mre*Ak0<(H5AtU)ZPUFmmn<2 zs7##2af#;8c=9Zqa1D8fKQW%4i}QGJ^QxsNSd@m01%9*HaK1Dz3x9q?1u9Dm5%2Tz zJKe&}?+cUHB4y$lkycG((u&IDnF(bU18_6nSqfmftWZ=_n1E1LiGE0vhQZM>^q(7b z7J-J#bRxNR?J}zJ)L!6qwL$QhgVd1c@NUl(3*9o$4 zEC4Ias&ZasA;^T<(RUhXI@OJZ{v_B@LZnJCdn_Q4wys%*caGF!Dj1CP17Z{*cF@hC zLe(WNDr698RpC-lW*NGvm;prEOl2M-uSD*v!XjP}z$E~C%9`Rl7F`%*-f|6@mlvFu z+~*(w%$LInQfclZ$XZT!W47p{CNmuhAr`Koz9N0TACd}0&O%W9K@q7cM3F8$R{>;< z6+7roj`v~n%2E_(XJBAt31|$>;xN z%1pmmnWG07mXygZB;w2RvS|Ef^3nh2XQq-D1Y-6DC%XDbgfQ$l+|-V-$tgHt$>Pk| zm0_^iLu+e!WsXh2>vqxbl!Yy;m*TD)EAi#^D=Gdj2DMR#aX*!ZsOA`6usCgjBavwm z<9z`c>bBE@ZOud(bwG-qi$xJ{LVpu!mJE@b?XLPS6aYh`OIKXh~)(w!#0+;b%J^!_$v{7iUj( z@`Jh_#;LYe9Q)`4RPFh1?0@}L{NZ=M!T#4?LDif8g`*$53kzl&2rbRe#)TrAI>NJq z!<_FYFE}?g4u3+trAz{QK?*v0`lat0LWsb`6xz@BabH3}Lqh|c&{TU2KYHi^zX5xn-QtqUdIU#xwq_+4B+z^GsU8;bQoqKK#BqBIb~&KSB?OK zBV$a64V-cfJAs>lA!O(p72S{9QZUqGeSBwBWK_Nnx@N#T& zI!447Hd_IY@vUciojcmxEJ>c5fedEeeD{6q+`03L5rF6FFs!vj5n;@DA98p@C-wMF zNTV<}ZCdC6903Zm(kc2&HP`8gd=d(>(qIF-ykSxiwaQ^`M|XeB z;nsk)ZPgz=jFyJaaJk{ag@M=Z3Kpfq5zHYWo~ z@jlQt9fktq7#bO)bOM3#2}}h;ylhAD2Bj)??EJ-r3$X8#;|QuAY^hiwx4&Ybrm>AX zI_Iq`*|WD%n7gttmzUTn*g-7`)=jBNp8ha3;T+i|C&b~cCmzPevLeUWBNon$O3y6>!h)Mc|k6Bf{PZ;hYh6q7`wj1=BC{E5Eq;tY3@K^auVHxBYa1a7kO3F92aPJ z{oR9-yvqw@FBNnB(+xmy@=`YexuiBZ9mMh0PBe6$K?S+*s-isGj;xDUf~JFE`(lI` z;sj0f5McuxU&_5fLP z;=-|(6XLwMvAl$r#c8<1e2VaBeCL^=y{#W^>foIuxlLvz&jNV8h>K6a#P}FYtSHDq z6lwVwXg`UM9{DR6VI6CK_+wNQz zOG^uhMg;-or z3=;#Rvc}PK0{ORY$CCRWK+)azqWCL!10#J_v4=+y4u%q`a+bKm!rSGAIFa$2LY|0*GEr}BqsZjonOeix@JFc_qQLxQ;&X| zSAJf7=VR==?+zsTygcM7bq7$q{TB8BG*-cmnqB*mx26<%t4ro4fV~e8Co~iaW){Pa zPd-0ELuHpe2EeB+oh(32O%1Q`R904UbXMCx0r_qrmu}99bRFqgIry`$eG9*P@uxUD zFpO{g^xyHXkKHd0W{mdHi}yHgfrY4-0qM`y4;EvCJw#R--WbLM#5!S=l{n86~dGCiDlRW?My+}z)h&k?e z9BqU@Jq72e!%i#62948m5y12Sm`#9>$JxLuKH+fKE*&x#%)^#7OJPUf@Tlc@3yUT5 z77;2oZG}H26|epBS^VdL8tkvB!`E-ygu8C4;1ejCO^AZZWf(r&kL+cI@Fm4xTqrEb z+nRx{^HkVr35-s9@LB)?H0>oz#kJ%q4&cZ#tm}Xz&*>zM5KXm5k(Ql<)Qs$CtWdaY z1s;9+MOyo>!jb9&_{Uv)@zj63&C63 z!foqUVMcK6kD#IBbW~W%n4=7Lc-4E~gzgGs^_EST@5@9%$#TA@X)dhVcoSA`xRJ|G z1On*lY(sC?X}q-SWrTvkOCJf!a8-&>-+r2+zCt8hH#}xd{`L1i5$-RTTjm9tKLz*v z_?$OSXCi*Eu7zFRdN2|W9snc^_CO!fIKTa?U&piG|7 zoIrycE7sfqRn;sfM2}Rx%lXS9fTn4Y+E*+hhyYT@@2d|ZCoKh~`PrbnOP_*E5~P52jTJgaICrt1*IzxpOlQDzFv5fy*RjE zt{tXl=c4CyCkWJ6Y({@~7f!bDgo+m)E?9t(!TzQM|2!B95hoFpNFRWR2!hPhr-$i_K64I&19~kaJM_nU)Qg9^ATYy#9Z^j>f z`w|f8AKYGVG)9xB#@S*EKs1S#p#gCJ^G|;8$H!lIwM$c6i;PH=rV@EwQOppQjhQHt zjEyiu5zknKkin8oHaRS2EY8D@2Oq)iUp0FX;jDq0}Am9aZGC% zVN(D#N}de#HpL(S)4N{$r}yvv&SOvKmXtl9sA{63D=>sy43}gZ87xUe zK~#9!`z1o*F)8;>59Ym@IanwpZU|u~^Nxodldl!$MM0Qj%7@yK>s-8(+Z8n>>zP`5ZyG>v33G(+y z0|2+*K`9pizyToqw=;qEE{0KkPp9s~vjdB(*h%w{kdbg8thAuKH1hs9#K zy1BW##|#-7GA4OUxZP&*sHm*&0f6p@$PIh|@WL?gm@{kQQ}J=JbazZ*kLPI zubtrP>OL5!({TV``S|+zL`R1U)!kizF@wX!jZG~CLcn#*^`Mc#_3;#?tX{qHwPh>P z|2%T!sG%G#S4^YPXf~VGTwPUJZZerfIGt&c$-4>_3Wbs0E|sI!mKKHCY-){&jEp^* zd7?coK1mrK9wEdq4Cin-f{~-28s_605E>Vk7`b!jj(t@%w=M#J@owH1i3DtfupnP= zw}8~ysbjr;ePX#>fjBZM+BYmL%*1B1edr7p!^On~M+jjUh9L~YFgBYloJ2(CZ{J{vr)SHR!u+Pd zz#u;si^X$Hh6e@(dAzpdjagxX1_f=~x+SQrtn`>!ub21eEffII#BO|7PjCO2;lmS0 zPkegf1aBXom?1Gk1s)Pl7laTE!+u-e`@M%~I4<<^_7-}1d&B7DF}@gvQA%akgp|qC z7It>Fm*ri`yIfRU^0PuAtx;=?8UUd9E_9|}KtSB&Ns|^XSoD`kad8QuG#sZnorDkq zo6Tk_xmMiBV6ymJ4p(foS-Uh^^)JcY%hSX4!!@h_CYN=}OK)7SdF|Dg4>mS7+(Zab z6h$G2PzWJJkfgo5>_+YL^V7a#F&U8nAfB8ue&XttD>k1yce=8*rP*M&+fhHE(8J5G zp0V3)WJ`0C?rhen8>`Zne?MjN(-Q!|SK`h|`((qqpSo2_b^qra%2TZ^P1P&jeq;Z& z;-col!u)IVo_%J#BNyF{07aL|)Y&PkkjZ4q=)r>rM?^*{PM^xG`|F#_{OELC)F-(B zPNSjVkWhr<41a>KKmG3VH~l6}nK~zF*oY8US2s3|b_ZS}=QDl&K5R0(BXl~078D%9 z4+soONE$XGrmXbFm_UF3{G&&I6bprJVv(zx&9UMbhGFP-fMFO(68iJ!&ozoA5@Bdq znDElYi`Q#w>JKk#dw;T6%=Vg^>ZX@on!mfQuC}ya6qxJkYOkcunz}zW zCVbQBAAV}1ukjZvz-+U!LHtNuOE0&$sYPAiHl}8SpsivleiWgs) zzpu3HMypcU)%nr7H7jud$sH){{70csLd2jDaddRd;Ly-8Ka1IHDJ#9vlr(I(H;&^R z0I-#pmsTuV_+pJ%?7{f@n{P*rpD;0r&ld_EtBxLVr5{BQjfP=d9-ki@mmrRdkEfr> zI@4KFQX(BOVx)k>;fOE{1CpYQ+qP`J?(OX@nK5H_L``*NWyYR8nT;)NH2^^V$^igi zr$~Y^cu35kz`&r;ztE;VfW9gFCQ6oo5KHl(YOla7kFbu;O zjzsn(jdyMj=bQ|G{{YwI(`|T35g;WizTS8s;thvkfVS7^*3TzY&LoH z@WE4Cw(ZUafS%t(0020g;_ejHnbV;HE)WRa6A}`|RX59;q-|}Q@Q4WBfqi>!j2xBho-}O4 zkn-}<(oLJbJ}m8!RRF+%{RT}S;3fTZ@W*`?v)POgWz}fZ%}bZOTK3mBUOQ_r7}`+3 zr0_=(r%rlZuWZvdpC5Z?*^&b}=g($YtyYb?r@L|a+e_C0K)?f`x6mM;w32H@=Zr>! z>Ye3pm(NX`o!#53?Q|xXKd?{;A=J~;)A{m(`MXaXKT>Qo8hXC}_ogiXFyy|arjJPG z&reIE2uNwTRnN*iofYoy9~g0$^7e<7mX@ZvwI8f16S=utu3o)l+&GM()rDm}t;~1urFgd;0`9480qy z)k>x9trZpJI=QUV%3`}^pX24}SEKxG8puV0TeWrTra*H6yRUu2uIZCMFD_`M#I|U;$knH zKcAgPQB>E%IHAv1)TO02u8kY_R2GZHY;w#+_M6Yl<#KPGIdd`>A!HqBJiT5o|K{tB zp96sZ{fy^LnmBfTd1*-jNs`t96s}*obV(+SM$_~$n!+&5OsCT|7>3!L%5gZHvVVQD z;fmF2u15%w_p2n%=}3}n`C;>SXZ`*CY5_p!7>{JJSSqnt-09-t((A}K2mpvllTr#1 zLL~zYYqQy`moMj^j*1L>%8@tj4lUzjqZ9Y<-Mv?@*J%dI^15Da%dD9*@-Yl^Du$R$ zrY0pNrTCRsUa9o+^J{iMP2@;a%6aqtbXuqDz1}Ch2dpSIo26~dn$;KRbo>^M<7F6z zbpQauaom)enp$}E>ea%x-g@gKolciIoNo^a2|2IR^=9A0v7}Vm-n3%bo9O`H{wwIq zxSa+WJRWCoO3I{XlE;i4!Q=7ycVTR9lWshooyX&u9g`yfKoW^WbM)v@+4}YCJwii6 z^^Q>0MMXswB_}7>9yxM6XvvbrYKz6(*gso4b2f%yK#^qUzdrq>VdKWH0!EKcCNeTI zO2fj!ng9T3G#V`;BEnoo$jRMFjrS0lh6MJz}yYuOC%Dnsne#9pEYx8 zQr{?``FjHJ*dVZ)P2+A>RlCw?G}%3y1scvDJN79Wi^VcI%c99-LQ18Q;`8}Tp-{+h zlvl&NdGj<`Sy^67mo8NvK77>o+iy215kl&|nZ8e1HJ&#A--Q&iM!*Cqexw*L+Qd3ih2n2%gg$ozjaGdV4Wy@B6RaKSL;b2D;APfMb z6bgCU7hi0&TP)TPCX+#NI2=0wcr9MMSR@vUJA#9QJEu>dPIh*7>M}DkJqUsj004M< zNp8Kr`h5-n1l=dUQ5K6?cCGjt7>%ZA7L(>85IO*&fWwIX=x-l<)zj16h!8S6pf7cg zy-Jmr-MHrC<6ZAaMr3GcXkBe>?KOo$QJ0dEa{kLNzbqgKfGSgPN>86YU1T&G>y|BBR?1*7 zbO3<(d|und+zU4lLi&3Y7-ucF8T9&&?OXqSJUqmECIGO(^F4szAU}`QE8qF1wY5d# zNJ5pm-kuDCBxKY8gr;LM-L>MYC4&YHss#WYhGCW|Q>K*H)zy{h_4*QoP=i*hRc_n1 z?Hq%_sB{=+7&U5Cu3RpwMhKD4;Y=n|`*ZW>opvNm1OOD9&F)#cbm@)a;^GRaRN7Tr zTYD=#J-vd<<#q#r&CN|zd+yxX285919@WLUjwX{ypJ}z4&gpc$J)6Gy;zUq@PXYj7 z;NjsuVdLi;iV#9Zgb*SLqDR`+n9(6^Jxr0LaezL+`Ie=j;a0;lb5pPL`TQ;b=t)dW zRDAT&N3HADt!tP#abhEr$yD~O-CkavWjAkDUPTDm9Al9^-QBlhhsK=ghbJfiFi0d4 zO>AteDl{~-hfb$!={PQ%Hg(Fa;-af%4`w_f^*U`uU2XYhlR;O35JDXtQp?)+-}~Cz zTjGP`7)9#!MuVHHNZ{`u;LBvO_-q$$sI3bNA6(iOO1rze3un!m z#Z5?vSK&BrSE&^A^XGH4`2~fVE`?mradFYm84S{DwekRf#^G>PFTC&q>E-3+lKVFyQlfa)Cfl&EdFo5d^8z_4ew80zPB>`0=*%^mmnO)~*$WhK2

X%~0la9wB4oXwju zWm>O7AtSrGx?Jpb0$5Bs!C)}RhQ=msdiu(q=H`|-Hj8EEayWgJMl2SaauZ8PfCdN- z3hY|Dc8wt+F`kVmKsGx;r_q2Rc9+n-y}g+%HaiLc*mvns`qA+i=z4o=3i7ir3>lg@ z#7!(2j3^4#)KoWY-?sVip~FXWfwI)}eUP0LA3f`*gZnZK2E7I$gjA}owv#80>}_jn zDZUREa6gEv`R=<-1pv@6bLNao8jZTG&oh+OYVBUNGW`Mo+*-c;?HYox_xz{*uwJKC zWSu&eQC(G0fDocclBCK@Z&baqXu&D~2psVAHZdVO?eyu)EUVS3LkJ;RXGg<_2MfR2$CczlA@|^R^EK&g;CC-RfRM{oowAO0Q*v^0h`ZRshsWm&SuB>l zurRMmBJrg2`2z97_WKASV6#}7g!rMYQ>RUj=5l%7aQixrBU&*`EEeOju|rgYV}=Ob z-Nh2@5qf9<0IS8)ed%IO9*fCljTo6chQVO4+S^;}zWnm@1KYOmJ_rEP2N@@L!^i7B zF_}z?+vjq2OG!!b#a%mo*wNjs>U@;*K8hkO1VN|}MOht>Qg@2IXMU+0wIJf7K`$1 z*2$yCj~%+8)Abr3!3osEk^v7hEY~a)alWF zegWYCKx=7flz;Z=KM$6c*PL*GtcRAckJtZgN4H98cDh@oQZ|3E`n~VYW}P}nlBBjT z+`3;P>{2S4Uw?gZ<*=lr?$M)1Ym$?b)yc`p>X9QyX-1D4)v|5tmLi+YrhU*=cLa;Q zrKPEC#XEofy13})EGG-4QYlUA|MB5=00?^|_VMMHr`_hp1H8xV+_5#wXfQa#p6uw5 zRxf&K-j|mP^DiNU?0tKL`|MHOkt2tSA|k>o9YiYOcq!(lr4=+cHPsBn>-e!F=k0d8#i>AB zYwNAI-dvLT^OeFngpmCqct1^bbye%MY15hjphqlr@A>e<52|~6b)64r{GDku8jXC- z2k)IbnR)z*qlrT{o6U0c=%KR-af4^wgYomR@zU;xaLQD+ik?ztkbn?*Q`9%-P7Iq7>>{#&LRza_w2g-#b=*f z?d|RDb)FsEtSrx;oHBM90Qfwq!&hHEm+@?I(a)I_McHp7E|YcV_N|vb|JR27dc96| zpOB^yqDYFO2#TTzM~^|>D_BU9H0GQ?m%rxymB-|Ane(i{UQ~4DB$tgp`>4j_kLUos z%}&V=?8`7DB*ck=fK-Mt3}Itsb0Zqb7IU!BZ6ewrjndsS8Ct(ED^KlgAK4jHJq`ELpa0DkkHO?~Im z#he<1C_*liUrC)kX~X4$ON9@5p~7jsR;!gQ{>zL1K7Q;JLeZZO^gW34^?|qvE}H-rQYNQ`K@mCpe8a8V&l5UwnG*?3t4n zEEbb;Z^n+?sHl)M01!AQd3NUDKlUXh8o=n)E8p2Im9}Z6()QZVKilwQds|!m{c63% zV(HnlXJ=N<`Ll(sEzOFxAFSMmW03r~^u!;>pq>H%gB7HguM|}@HP&i}3>g|fC_F-R z{rc64fPg@Ti;IhUzw0HOCR~O{vUM1{yjKkr$ezM{3yMEZZ>stg+>Fo|+F#j)c zfbo}`INJJKO(o@}MRFf6ZwZ&faaVT9Y6Aj-M07esvdH(%M0@Ja@7ijqIcWY zANFToDA?urh00?w{;@gWH$PNz_?bP^#4{$C2?zw}e~{{cDhNt3<1 Rz)t`G002ovPDHLkV1k8$(}Ms2 diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 362b03e0d5e..3ce8dbc9407 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -299,14 +299,14 @@ class ApplicationController < ActionController::Base end def github_import_enabled? - OauthHelper.enabled_oauth_providers.include?(:github) + Gitlab::OAuth::Provider.enabled?(:github) end def gitlab_import_enabled? - OauthHelper.enabled_oauth_providers.include?(:gitlab) + Gitlab::OAuth::Provider.enabled?(:gitlab) end def bitbucket_import_enabled? - OauthHelper.enabled_oauth_providers.include?(:bitbucket) && Gitlab::BitbucketImport.public_key.present? + Gitlab::OAuth::Provider.enabled?(:bitbucket) && Gitlab::BitbucketImport.public_key.present? end end diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index fd51b380da2..523264b8ea9 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -72,10 +72,11 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController end end rescue Gitlab::OAuth::SignupDisabledError => e - message = "Signing in using your #{oauth['provider']} account without a pre-existing GitLab account is not allowed." + label = Gitlab::OAuth::Provider.label_for(oauth['provider']) + message = "Signing in using your #{label} account without a pre-existing GitLab account is not allowed." if current_application_settings.signup_enabled? - message << " Create a GitLab account first, and then connect it to your #{oauth['provider']} account." + message << " Create a GitLab account first, and then connect it to your #{label} account." end flash[:notice] = message diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 89629bc0581..796cbe4c58c 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -90,7 +90,7 @@ class SessionsController < Devise::SessionsController # Prevent alert from popping up on the first page shown after authentication. flash[:alert] = nil - redirect_to omniauth_authorize_path(:user, provider.to_sym) + redirect_to user_omniauth_authorize_path(provider.to_sym) end def valid_otp_attempt?(user) diff --git a/app/helpers/auth_helper.rb b/app/helpers/auth_helper.rb new file mode 100644 index 00000000000..0e7a37b4cc6 --- /dev/null +++ b/app/helpers/auth_helper.rb @@ -0,0 +1,50 @@ +module AuthHelper + PROVIDERS_WITH_ICONS = %w(twitter github gitlab bitbucket google_oauth2).freeze + FORM_BASED_PROVIDERS = [/\Aldap/, 'kerberos'].freeze + + def ldap_enabled? + Gitlab.config.ldap.enabled + end + + def provider_has_icon?(name) + PROVIDERS_WITH_ICONS.include?(name.to_s) + end + + def auth_providers + Gitlab::OAuth::Provider.providers + end + + def label_for_provider(name) + Gitlab::OAuth::Provider.label_for(name) + end + + def form_based_provider?(name) + FORM_BASED_PROVIDERS.any? { |pattern| pattern === name.to_s } + end + + def form_based_providers + auth_providers.select { |provider| form_based_provider?(provider) } + end + + def button_based_providers + auth_providers.reject { |provider| form_based_provider?(provider) } + end + + def provider_image_tag(provider, size = 64) + label = label_for_provider(provider) + + if provider_has_icon?(provider) + file_name = "#{provider.to_s.split('_').first}_#{size}.png" + + image_tag(image_path("auth_buttons/#{file_name}"), alt: label, title: "Sign in with #{label}") + else + label + end + end + + def auth_active?(provider) + current_user.identities.exists?(provider: provider.to_s) + end + + extend self +end diff --git a/app/helpers/oauth_helper.rb b/app/helpers/oauth_helper.rb deleted file mode 100644 index 2fdca13ed40..00000000000 --- a/app/helpers/oauth_helper.rb +++ /dev/null @@ -1,34 +0,0 @@ -module OauthHelper - def ldap_enabled? - Gitlab.config.ldap.enabled - end - - def default_providers - [:twitter, :github, :gitlab, :bitbucket, :google_oauth2, :ldap] - end - - def enabled_oauth_providers - Devise.omniauth_providers - end - - def enabled_social_providers - enabled_oauth_providers.select do |name| - [:saml, :twitter, :gitlab, :github, :bitbucket, :google_oauth2].include?(name.to_sym) - end - end - - def additional_providers - enabled_oauth_providers.reject{|provider| provider.to_s.starts_with?('ldap')} - end - - def oauth_image_tag(provider, size = 64) - file_name = "#{provider.to_s.split('_').first}_#{size}.png" - image_tag(image_path("authbuttons/#{file_name}"), alt: "Sign in with #{provider.to_s.titleize}") - end - - def oauth_active?(provider) - current_user.identities.exists?(provider: provider.to_s) - end - - extend self -end diff --git a/app/helpers/profile_helper.rb b/app/helpers/profile_helper.rb deleted file mode 100644 index 780c7cd5133..00000000000 --- a/app/helpers/profile_helper.rb +++ /dev/null @@ -1,13 +0,0 @@ -module ProfileHelper - def show_profile_username_tab? - current_user.can_change_username? - end - - def show_profile_social_tab? - enabled_social_providers.any? - end - - def show_profile_remove_tab? - signup_enabled? - end -end diff --git a/app/views/admin/identities/_form.html.haml b/app/views/admin/identities/_form.html.haml index 0525552ebf8..3a788558226 100644 --- a/app/views/admin/identities/_form.html.haml +++ b/app/views/admin/identities/_form.html.haml @@ -8,7 +8,8 @@ .form-group = f.label :provider, class: 'control-label' .col-sm-10 - = f.select :provider, Gitlab::OAuth::Provider.names, { allow_blank: false }, class: 'form-control' + - values = Gitlab::OAuth::Provider.providers.map { |name| ["#{Gitlab::OAuth::Provider.label_for(name)} (#{name})", name] } + = f.select :provider, values, { allow_blank: false }, class: 'form-control' .form-group = f.label :extern_uid, "Identifier", class: 'control-label' .col-sm-10 diff --git a/app/views/admin/identities/_identity.html.haml b/app/views/admin/identities/_identity.html.haml index 671c4fbc677..7362d904b94 100644 --- a/app/views/admin/identities/_identity.html.haml +++ b/app/views/admin/identities/_identity.html.haml @@ -1,6 +1,6 @@ %tr %td - = identity.provider + = "#{Gitlab::OAuth::Provider.label_for(identity.provider)} (#{identity.provider})" %td = identity.extern_uid %td diff --git a/app/views/devise/sessions/_new_ldap.html.haml b/app/views/devise/sessions/_new_ldap.html.haml index 6ec741e4882..689cd6ed665 100644 --- a/app/views/devise/sessions/_new_ldap.html.haml +++ b/app/views/devise/sessions/_new_ldap.html.haml @@ -6,4 +6,4 @@ %label{for: "remember_me"} = check_box_tag :remember_me, '1', false, id: 'remember_me' %span Remember me - = button_tag "#{server['label']} Sign in", class: "btn-save btn" + = button_tag "Sign in", class: "btn-save btn" diff --git a/app/views/devise/shared/_omniauth_box.html.haml b/app/views/devise/shared/_omniauth_box.html.haml index f8ba9d80ae8..ecf680e7b23 100644 --- a/app/views/devise/shared/_omniauth_box.html.haml +++ b/app/views/devise/shared/_omniauth_box.html.haml @@ -1,10 +1,8 @@ %p %span.light Sign in with   - - providers = additional_providers + - providers = button_based_providers - providers.each do |provider| %span.light - - if default_providers.include?(provider) - = link_to oauth_image_tag(provider), omniauth_authorize_path(resource_name, provider), method: :post, class: 'oauth-image-link' - - else - = link_to provider.to_s.titleize, omniauth_authorize_path(resource_name, provider), method: :post, class: "btn", "data-no-turbolink" => "true" + - has_icon = provider_has_icon?(provider) + = link_to provider_image_tag(provider), user_omniauth_authorize_path(provider), method: :post, class: (has_icon ? 'oauth-image-link' : 'btn'), "data-no-turbolink" => "true" diff --git a/app/views/devise/shared/_signin_box.html.haml b/app/views/devise/shared/_signin_box.html.haml index c76574db457..bb5e479697d 100644 --- a/app/views/devise/shared/_signin_box.html.haml +++ b/app/views/devise/shared/_signin_box.html.haml @@ -6,7 +6,7 @@ .login-heading %h3 Sign in .login-body - - if ldap_enabled? + - if form_based_providers.any? %ul.nav.nav-tabs - @ldap_servers.each_with_index do |server, i| %li{class: (:active if i.zero?)} diff --git a/app/views/profiles/accounts/show.html.haml b/app/views/profiles/accounts/show.html.haml index 378dfa2dce0..767fe2e0e9a 100644 --- a/app/views/profiles/accounts/show.html.haml +++ b/app/views/profiles/accounts/show.html.haml @@ -59,22 +59,22 @@ %div = link_to 'Enable Two-factor Authentication', new_profile_two_factor_auth_path, class: 'btn btn-success' - - if show_profile_social_tab? + - if button_based_providers.any? .panel.panel-default .panel-heading Connected Accounts .panel-body .oauth-buttons.append-bottom-10 %p Click on icon to activate signin with one of the following services - - enabled_social_providers.each do |provider| + - button_based_providers.each do |provider| .btn-group - = link_to oauth_image_tag(provider), omniauth_authorize_path(User, provider), - method: :post, class: "btn btn-lg #{'active' if oauth_active?(provider)}" - - if oauth_active?(provider) + = link_to provider_image_tag(provider), user_omniauth_authorize_path(provider), method: :post, class: "btn btn-lg #{'active' if auth_active?(provider)}", "data-no-turbolink" => "true" + + - if auth_active?(provider) = link_to unlink_profile_account_path(provider: provider), method: :delete, class: 'btn btn-lg' do = icon('close') - - if show_profile_username_tab? + - if current_user.can_change_username? .panel.panel-warning.update-username .panel-heading Change Username @@ -94,7 +94,7 @@ %div = f.submit 'Save username', class: "btn btn-warning" - - if show_profile_remove_tab? + - if signup_enabled? .panel.panel-danger.remove-account .panel-heading Remove account diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index c32ac2042d0..41a01e7703c 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -209,20 +209,29 @@ production: &base # arguments, followed by optional 'args' which can be either a hash or an array. # Documentation for this is available at http://doc.gitlab.com/ce/integration/omniauth.html providers: - # - { name: 'google_oauth2', app_id: 'YOUR_APP_ID', + # - { name: 'google_oauth2', + # label: 'Google', + # app_id: 'YOUR_APP_ID', # app_secret: 'YOUR_APP_SECRET', # args: { access_type: 'offline', approval_prompt: '' } } - # - { name: 'twitter', app_id: 'YOUR_APP_ID', - # app_secret: 'YOUR_APP_SECRET'} - # - { name: 'github', app_id: 'YOUR_APP_ID', + # - { name: 'twitter', + # app_id: 'YOUR_APP_ID', + # app_secret: 'YOUR_APP_SECRET' } + # - { name: 'github', + # label: 'GitHub', + # app_id: 'YOUR_APP_ID', # app_secret: 'YOUR_APP_SECRET', # args: { scope: 'user:email' } } - # - { name: 'gitlab', app_id: 'YOUR_APP_ID', + # - { name: 'gitlab', + # label: 'GitLab.com', + # app_id: 'YOUR_APP_ID', # app_secret: 'YOUR_APP_SECRET', # args: { scope: 'api' } } - # - { name: 'bitbucket', app_id: 'YOUR_APP_ID', - # app_secret: 'YOUR_APP_SECRET'} - # - { name: 'saml', + # - { name: 'bitbucket', + # app_id: 'YOUR_APP_ID', + # app_secret: 'YOUR_APP_SECRET' } + # - { name: 'saml', + # label: 'Our SAML Provider', # args: { # assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8', diff --git a/doc/integration/omniauth.md b/doc/integration/omniauth.md index 8e2a602ec35..2010cb9b8a1 100644 --- a/doc/integration/omniauth.md +++ b/doc/integration/omniauth.md @@ -84,7 +84,7 @@ Existing users can enable OmniAuth for specific providers after the account is c 1. Sign in normally - whether standard sign in, LDAP, or another OmniAuth provider. 1. Go to profile settings (the silhouette icon in the top right corner). 1. Select the "Account" tab. -1. Under "Social Accounts" select the desired OmniAuth provider, such as Twitter. +1. Under "Connected Accounts" select the desired OmniAuth provider, such as Twitter. 1. The user will be redirected to the provider. Once the user authorized GitLab they will be redirected back to GitLab. The chosen OmniAuth provider is now active and can be used to sign in to GitLab from then on. diff --git a/features/steps/admin/users.rb b/features/steps/admin/users.rb index 6c4b91586d6..49e64eeff71 100644 --- a/features/steps/admin/users.rb +++ b/features/steps/admin/users.rb @@ -3,6 +3,14 @@ class Spinach::Features::AdminUsers < Spinach::FeatureSteps include SharedPaths include SharedAdmin + before do + allow(Devise).to receive(:omniauth_providers).and_return([:twitter, :twitter_updated]) + end + + after do + allow(Devise).to receive(:omniauth_providers).and_call_original + end + step 'I should see all users' do User.all.each do |user| expect(page).to have_content user.name @@ -121,7 +129,6 @@ class Spinach::Features::AdminUsers < Spinach::FeatureSteps end step 'I visit "Pete" identities page in admin' do - allow(Gitlab::OAuth::Provider).to receive(:names).and_return(%w(twitter twitter_updated)) visit admin_user_identities_path(@user) end diff --git a/lib/gitlab/o_auth/provider.rb b/lib/gitlab/o_auth/provider.rb index f986499a27c..90c3fe8da33 100644 --- a/lib/gitlab/o_auth/provider.rb +++ b/lib/gitlab/o_auth/provider.rb @@ -1,18 +1,30 @@ module Gitlab module OAuth class Provider - def self.names - providers = [] + def self.providers + Devise.omniauth_providers + end - Gitlab.config.ldap.servers.values.each do |server| - providers << server['provider_name'] + def self.enabled?(name) + providers.include?(name.to_sym) + end + + def self.ldap_provider?(name) + name.to_s.start_with?('ldap') + end + + def self.config_for(name) + name = name.to_s + if ldap_provider?(name) + Gitlab::LDAP::Config.new(name).options + else + Gitlab.config.omniauth.providers.find { |provider| provider.name == name } end + end - Gitlab.config.omniauth.providers.each do |provider| - providers << provider['name'] - end - - providers + def self.label_for(name) + config = config_for(name) + (config && config['label']) || name.to_s.titleize end end end diff --git a/spec/helpers/auth_helper_spec.rb b/spec/helpers/auth_helper_spec.rb new file mode 100644 index 00000000000..e47a54fdac5 --- /dev/null +++ b/spec/helpers/auth_helper_spec.rb @@ -0,0 +1,20 @@ +require "spec_helper" + +describe AuthHelper do + describe "button_based_providers" do + it 'returns all enabled providers' do + allow(helper).to receive(:auth_providers) { [:twitter, :github] } + expect(helper.button_based_providers).to include(*[:twitter, :github]) + end + + it 'does not return ldap provider' do + allow(helper).to receive(:auth_providers) { [:twitter, :ldapmain] } + expect(helper.button_based_providers).to include(:twitter) + end + + it 'returns empty array' do + allow(helper).to receive(:auth_providers) { [] } + expect(helper.button_based_providers).to eq([]) + end + end +end diff --git a/spec/helpers/oauth_helper_spec.rb b/spec/helpers/oauth_helper_spec.rb deleted file mode 100644 index 3ef35f35102..00000000000 --- a/spec/helpers/oauth_helper_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require "spec_helper" - -describe OauthHelper do - describe "additional_providers" do - it 'returns all enabled providers' do - allow(helper).to receive(:enabled_oauth_providers) { [:twitter, :github] } - expect(helper.additional_providers).to include(*[:twitter, :github]) - end - - it 'does not return ldap provider' do - allow(helper).to receive(:enabled_oauth_providers) { [:twitter, :ldapmain] } - expect(helper.additional_providers).to include(:twitter) - end - - it 'returns empty array' do - allow(helper).to receive(:enabled_oauth_providers) { [] } - expect(helper.additional_providers).to eq([]) - end - end -end