From 28ec03c8852bd2f383bef21b736b055e34c51e84 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Sun, 19 Jan 2020 07:46:22 +0530 Subject: [PATCH 1/2] chore: added Salesforce to providers --- app/config/providers.php | 6 ++++++ src/Auth/OAuth/Salesforce.php | 0 2 files changed, 6 insertions(+) create mode 100644 src/Auth/OAuth/Salesforce.php diff --git a/app/config/providers.php b/app/config/providers.php index 5dc43e8e56..3b5661790f 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -67,6 +67,12 @@ return [ 'enabled' => true, 'mock' => false, ], + 'salesforce' => [ + 'developers' => 'https://developer.salesforce.com/docs/', + 'icon' => 'icon-salesforce', + 'enabled' => true, + 'mock' => false, + ], // 'apple' => [ // 'developers' => 'https://developer.apple.com/', // 'icon' => 'icon-apple', diff --git a/src/Auth/OAuth/Salesforce.php b/src/Auth/OAuth/Salesforce.php new file mode 100644 index 0000000000..e69de29bb2 From 26202fcac6c7bfb56ddb4771f797838b1d150e56 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Sun, 19 Jan 2020 16:00:18 +0530 Subject: [PATCH 2/2] feat: added support for Salesforce OAuth --- public/images/oauth/salesforce.png | Bin 0 -> 3899 bytes src/Auth/OAuth/Salesforce.php | 151 +++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 public/images/oauth/salesforce.png diff --git a/public/images/oauth/salesforce.png b/public/images/oauth/salesforce.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8e4c98461983ee43535f5082fc1f7c6d1e607e GIT binary patch literal 3899 zcmZ`+2R9sC6ILQbStUf2=)ITS)p=!=h+fwcB8Xu18Y1e8MM(5scJ&fjy{;BDh(uUq zb&H5j)I~n;5BO%z+~>?WckY?Fcbb06~ zb_;jyb+t8!{{E*$nDSI2BEW%;hPv77yxsgDKQr@!A+<9MRHw8)#SVC{nu;qSi7TFE z-ize~q0%h=)=JwYI=o_cQe~k5A&#;?`y(Urk(!v95y!irk6ZN~^w@bY@2vUHyPXb4 z`eBnwH}jK4!Z>GoX}wuhiWwQtzOTX8AoKl20s%`{2n-8+Bf0#4ta%}0H4|X@Y8m{imNQFN^KvFV7LA}@$79JTIdCn*CAEr$D41gC@ z&B3E$qkl!I(()FwG0m4t;*qyY+QbvNo7q zPGke|$Aq-lf36=TPg{IDd2oiu4(Pm^-^zt#c=)l1cqR*lPHon=KRzsreoNjEYvHe4 z%FNkin`Tw9+{uw)Rh)L2xK&?hzwzOVyl^5LrW+x-H!-O{!&W4bSX@v$>wxqq5(-ly z(xuHu!Y@bvdBHiV5^q9l*>D_&dll_n5(t2K%WEH32d1yi%Wuc^)7xx8EiHNJZSU5v zTAm(TIE^oiJ!D2WWMj%U0YPm%=4aOM2;sxbA2g4}Yo0&lg=rtWyr8SI_ja0Kh=m+_^K!8`X$u0k5{=t zY3`szuSrwiyiZN&A%DEGkqffKq<)ML zw#(uydwsnO#M4djNyr;HLDGGz43+mCF?&fMh@QHQ=Rp|r5DR97(q=~WN5ZH_A_(G! z5gQQ4WZ*v}rKArY)eqV0uwzDo|GNgi?>u_BJ?VH| z&Rq$0v)EZwVnQJYx$%|RbBjyNlg(m94b#)D!*o26>pk5s+J625RggQ=KZsKxW_+e{ zJN!2Jaiy8-Ne!&AbThvO)@K5)WZEGbuJ?I{h=D;RKcL@_gp5IP#%tlj(YNI#eD03t zkJ-^lD;PaW5oTTMb>MTdurW1y?aHvE#2ZcJ%j+JZ&_y95d*%DbHskAtMqC@bCYIl{ zL4IIi?PYdFNeAP0Ijz(6pWaTN3$9RkZqOchHR=*TRpQUW_d6Kza&A*J{ruYR(CMb% zuM976c<#hmeF|QsIduhha(>WraNcsfuNor+kj_Y#p!>!6`Yy>5OLpIPfn061V{cSD zip+XyK*JYd@$53nGA}v5Mq1=Y5!kL_;?;LYo$_OdiT`|z{qv6_b!ETU?)#HDkheVn zF)CpMrfs!XH~^jU7lnq~0Dn zS|lOlRt;c~2-Ijda7r26OjjRtWGQK5#8vD69ydab@g+*b?l$*8{RNm3-P=v52WG`c z^@X2SMFDf_prrh+Zlm6rw?$;y@bVaHi~f4W?0C>~4t%#kXT;3Nv9z<6X}$f8sngd6 zkh#v^Qr1FdvFB3c{FcVz4n{6fZ)K}b&p`Jc6KiAi5P13!pJAjw!>D}r9yYJ=GYUJO zg1zH*bDe6HvF~j69Z%h*A_MeOlp7jQn%OwOXDAlT?yP0^={Y4G70GRi!qKgp5J@;7 z<`gU@F^2z%^uVSQ+8SYJ)1J_y?=!@q3j9&9VwKj$=8cYnafc8ezMl6JI%~+|Ngdxx z3zfjI<(Jc4gU*>~7KQ5diUx?Skea608!}_3NXb#%jpw&p(-&y2?BS21Qb1+v{0$S# zRdE?TI%P8S3dET7Zc zSvQS*Ds%MObf%Tu_gHRoKfwq26?6%unnS5q`{a`9nnY%+)^^00X+w6_jq(THtcTvb za;+fg^sk5;c#d6b`4?HKSjcft3f>qiC^@`55qquNS@)m?`MOyu6)M5mZ}4ekGriZK zyMdR|heuIE?&FY=h@2I7+c-!b1~miExmANN(5P!{8Cl_l6mVGg`$z!16WtJzYiRgl z)s9&-z+b}mYnIV2<_sda{RNV{y8jFc8E`K@oZvOFY%5QG7MQybua)Z#64;NOTQFg9 z!}x}FcgIOqMe@1C@4r7XTC|fsdn>7K9nQr8IsCmI)#}g~ORjd>oN-u8V{40Jt6Ip` zVU^Vml3#Afs%vgF-!t?3xk+T%-ocbh9Las{K5CMCu6EO1T2{abw%jjQ$CC=6(zh*OP+zNqo5ho_ zzpL+lUkQ{I6K{lU1`^n^Z(ji=&Eb^v^o4t6;kpv5r7yY?^tv#0m&ch(DR*sfi$!sy zeKkR(VUC4cRf)CT^3|)RZt6k~nr>@qKQhjcN5AmY`n|vONXgu~+dcxe$3gbaR%0FU zH5pL>PyI^wNbN;R!9vgelo#u9?rjXx3;zf4k&cvx`m0^|3|-9<^+&m)5N#Lw)+Hj8YP~0SQm* zB3dA`o8QB|#*n?&NK6D6H!@BvSebxKp_u(AN_dRWgWI|)u##Q%bcX^O4GfzU9JjQX zE5f)34N%t5J8mn9r23uSMR9(a_M`f3A!qLx_XxwIn&Z4{x82nOekl$TH1WDbDGqCv z3m7vuUR>YQlG?{3on@kD&cH{Pi&{P@pnx%oIh)(85Ptd8nX3utEHCs|6j(@)o&9%P z)1Mp(1@V%)5|N{5LZ=L3i9upqS3p#!SYQlB5&~nwN6zyF1dj)R-$X`!vQENjAue4q z5&d1vTM>tq^FA4|nE_xlX3){ON~_k|;dAo0fu+g$fSdC?pmIzf8(KlGgAhG5z<)9y zTo(JP+(}v$H-N3;g6XiXHPD1MH5Fi*1gHc{ePOmTq5*Q~a;&3XS;9NM#HLbYmMn5k zOJ{bV?oKGCDTyp~^5Tcu%LX@X(jZ|)T0_0hY-m_JMio_-6F&Zf|Ktik4_xeiAtkxv zwrrU?p3S0Ym_Buk-}JBP63K1(G~zVUd>1g4O&tK&8xHW^kF~u@Zckki3TR|+Uf@RA zux>99qnpPj{&izM7A#9$p6^6i=cMMc}_3pRM=5pL|3Ba#whM3411 z->eg3+1*xS0;^u1cLF)G(~@d?Jnt#F>cy09?VM_PHuq;pS|wRq)4qjmvGuf|HufTc znW*n+2!{kl2vQwxN`Hf~hS~tGfK0zvUXuot6D>WC(Osc>+Cg<5TU~#F^^*JioRBja zTs<1HB@w;!n_WpchDXPAH>WhIgq4z;QBHAnlCe_j?4qM@^5N&2$b7nhSc-Q$yYI|x z(t=P=im_UzJOvHW5|5Y++{rt1a_oP*AWxN3WQjuP|A4a|L((iz4yBZW&QzcX4udHn zK%+cqA3MsfM`F65pf)wTM*3KcR$;`dMS4X85*G}*^0jP%@}Ka<2)x9vUF$gZ}FHqt32B%a^1+ehz{YCyJq^ z9u1czKn+8LDk+<{HvrUT-y#igx}OIN>x$Eq9dmyYyP|#ax`xmYl zbT53~X?%pRw8zloi%2&=AScTwNrZ6HyD~lVWMb;%5O*OcImXn}?dfKrQ|ThcGn@=% z5-4vNbT17?B{uRRo45uJGXo}#B`f}-W#MIh>{tHUnH>gVg~~#?7DEG7{4ZhxjoAHiJGAI$fXFyWe$VZk-v2Z1Cp*Z(c&qkhMCoI`xj%ohemXg$T%&# zhO!ZrjT-JD{}j**+R%psrONu`k)=vgTxWqMn zXNpX7b`E27lo=NK=JU^F1S`K80;QpG;{iW%GQ8`4t^R&dXvS3R<;1imPGi<-HMD06 zw41bCbCr1QEbGz#ccshgant_IzdwJ4Qyi05$#Q)M5Z9n0nbU_;lyw;~pNf{bV2l zC^AcS$uv9{P#{hE{AiNCxV6!Uv4!GUjUBs8Vj z%a?a0moY2NT1kk4Vqk|B%*y}6AZARZ_*m8f@c)D~=`VR-N}JmGM6%88G)$zUX`oU2 H*e>#a*BhHb literal 0 HcmV?d00001 diff --git a/src/Auth/OAuth/Salesforce.php b/src/Auth/OAuth/Salesforce.php index e69de29bb2..89957e227e 100644 --- a/src/Auth/OAuth/Salesforce.php +++ b/src/Auth/OAuth/Salesforce.php @@ -0,0 +1,151 @@ + 'code', + 'client_id' => $this->appID, + 'redirect_uri'=> $this->callback, + 'scope'=> implode(' ', $this->getScopes()), + 'state' => json_encode($this->state) + ]); + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $headers = [ + "Authorization: Basic " . base64_encode($this->appID . ":" . $this->appSecret), + "Content-Type: application/x-www-form-urlencoded", + ]; + + $accessToken = $this->request( + 'POST', + 'https://login.salesforce.com/services/oauth2/token', + $headers, + http_build_query([ + 'code' => $code, + 'redirect_uri' => $this->callback , + 'grant_type' => 'authorization_code' + ]) + ); + $accessToken = json_decode($accessToken, true); + + if (isset($accessToken['access_token'])) { + return $accessToken['access_token']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['user_id'])) { + return $user['user_id']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['email'])) { + return $user['email']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['name'])) { + return $user['name']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + if (empty($this->user)) { + $user = $this->request('GET', 'https://login.salesforce.com/services/oauth2/userinfo?access_token='.urlencode($accessToken)); + $this->user = json_decode($user, true); + } + return $this->user; + } +}