From 7d89b02f6e3d6fa49c8fe14c2b18e40fcc9a8b13 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Fri, 17 Jan 2020 19:58:00 +0200 Subject: [PATCH 1/2] Initial commit --- app/config/providers.php | 6 ++ public/images/oauth/yahoo.png | Bin 0 -> 2409 bytes src/Auth/OAuth/Yahoo.php | 151 ++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 public/images/oauth/yahoo.png create mode 100644 src/Auth/OAuth/Yahoo.php diff --git a/app/config/providers.php b/app/config/providers.php index 866d563934..58c29e05c6 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -103,6 +103,12 @@ return [ 'enabled' => true, 'mock' => false, ], + 'yahoo' => [ + 'developers' => 'https://developer.yahoo.com/oauth2/guide/flows_authcode/', + 'icon' => 'icon-yahoo', + 'enabled' => true, + 'mock' => false, + ], // Keep Last 'mock' => [ 'developers' => 'https://appwrite.io', diff --git a/public/images/oauth/yahoo.png b/public/images/oauth/yahoo.png new file mode 100644 index 0000000000000000000000000000000000000000..67735afdfa0309360f26276fe1443068a4b8e18f GIT binary patch literal 2409 zcmV-v36}PWP)EX>4Tx04R}tkvmAkP!xv$rbR+LrZbK+5x4oLjSb;aX1&IOkRo*6OIsd?fEu~=whrHxt9)QBgEqpGG;zL4=) z<-EmND_2?bocxC2oW8Qmby`D6U=d4@AVNVEC6r+!Mt_|Y3n|)<`}hZ4zeFyDTqQ7a zET94nvg-$bgWt2Y@)P4;QaBEDzBtauFc8`W8a2oHK6aeO2@re+uJo3_QU_)}Nw2lE z=n>Gn4P0EeG-VIC+yMrj4B3=jDM(Am=YjV#dZsMUe+zW4d2?&-eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00%)yL_t(|+U=cdP*i0Y$N$Sk1Q&J}5D>g1prNLDTaa6@ zx(kS!co|BYah!B$O3O=AshK&GmnM(Y%D0twFg7f<)e6 z`=B$nT=YDLbJ$(>`OolW=RD`#eSYVC-{*PW_dO`gX0sVAn~@W{fPt_W2m@g;5C+0x zAPj`XKo|&%fv^||17R@`2Et+>41~o%7zm4juo#Fv$c0_-Y-Mb?hU~?6$ab3=2EpCK zm3xTP%34H+5w*&L41<9PQ0C4uC=_(NsPSr^L*$Tga~;{nf3h=%jPPY3QtNDSHL4Ci zB-rkwYi*Zi}*uFsK=b96FL- zPqqo2+YO;%8U`Y@PUKahp{SW`H*Ti7!)-H=Hgt3weKJ>$a>AJS00ttpu9eo}V){LL z@0jl;N&5_>g^IK5MA>QM)eJ-q9bQJC%(crs5Y$ha9wKYC_hexu>H5LLHKGb~08m}o z2vcc;;Okx86c{$Dr^RQv2XCUehTe9}B(-EdlNHF%A6KC!t4Z+nhHn}$b6&8hwswDC zj{K#B@asi_(HOK7&?Eynym z&eY)M&Ik0&e2z*|pUDbj+{=Lg;n20Y5hyfPklV@GUk(sTbdQsGc8ox6qdUBXM`ZH@VP2P#48%8wP9ps_z7Az^BSrgfu5XSu?cOpCH;d4r*i zF+Ve%o_q9}>573v><|b5=x5Nv!fZleFMAWrs#AbO z#05YZF1)G6)6FF(iwX8nsR3L+1^hVHh;pMa1+$NkY zsc!Z8vCNxjCUg+}yw)Y0%pd3psQM*mjEeT_IzRv*IgOSm79MKt`J+G4@`llImQVHN z^R+PjNUvKZys47iKb;OFN*{n8BZSAQMJpQ7aOcSi-qp*uaV_J%VEd6v-O;I?y-Vr;w^_V|vVK8PbgiXpS zD~8&5;^h9nd?Rb4@W{y9;EdtnJz-C>3Xq__UKqXHUGVi4dz*0K>@6J6sleUy!Xu-E zG!^VkRy(j0J4u6*Rl>Jw79FWW`4!<4vDpmhCbeDOIFVO@qCeDAB_ka`^L{3w} zFr}C1Wn?L&u;zPvm!zCW#hxa4fPbpQ>+f4G2bY=Zv31oAlz!KKP~fBlW^e0>*u-8| z@rhM;og}5nSAuAHV5ZDek2R^Lr@{b$<_2KP_$p-Wx#4&~;*$g65-9zBd#Ac0Y^Y_v zvvu_iG!_dV3^G!xVY*u9SU>Vo3M$z~C`)a*o0Re!qsXh`W zot8bWy0Q_Xj?q3=UCjf>12R0q7yc7Fo)Qgvw>$a;R0L z+V*_po9Ha+erAOkefp~$6v*TtbRI&=$YWv(x=xQ^yhX8^k-n zkk0+RVQt&peHsThb{GVZ3mN^i(JZs@e8tT5KLRXd5ftaq|#_7*!rendpoint . 'request_auth?'. + http_build_query([ + 'response_type' => 'code', + 'client_id' => $this->appID, + 'scope' => implode(' ', $this->scope), + 'redirect_uri' => $this->callback, + 'state' => json_encode($this->state) + ]); + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code):string + { + $header = [ + "Authorization: Basic " . base64_encode($this->appID . ":" . $this->appSecret), + "Content-Type: application/x-www-form-urlencoded", + ]; + + $result = json_decode($this->request( + 'POST', + $this->endpoint . 'get_token', + $header, + http_build_query([ + "code" => $code, + "grant_type" => "authorization_code", + "redirect_uri" => $this->callback + ]) + ), true); + + if (isset($result['access_token'])) { + return $result['access_token']; + } + + return ''; + } + + /** + * @param $accessToken + * + * @return string + */ + public function getUserID(string $accessToken):string + { + $user = $this->getUser($accessToken); + + if (isset($user['sub'])) { + return $user['sub']; + } + + return ''; + } + + /** + * @param $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken):string + { + $user = $this->getUser($accessToken); + + if (isset($user['email'])) { + return $user['email']; + } + + return ''; + } + + /** + * @param $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) + { + if (empty($this->user)) { + $this->user = json_decode($this->request('GET', + $this->resourceEndpoint, ['Authorization: Bearer '.urlencode($accessToken)]), true)['data']['0']; + } + + return $this->user; + } +} From 72c2724cee59ea1ef3bf3651bb92fa2094f62247 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Fri, 17 Jan 2020 20:48:46 +0200 Subject: [PATCH 2/2] Fixed getUser --- src/Auth/OAuth/Yahoo.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Auth/OAuth/Yahoo.php b/src/Auth/OAuth/Yahoo.php index 64c45343d7..cdf865bbec 100644 --- a/src/Auth/OAuth/Yahoo.php +++ b/src/Auth/OAuth/Yahoo.php @@ -41,6 +41,17 @@ class Yahoo extends OAuth return 'yahoo'; } + + /** + * @param $state + * + * @return json + */ + public function parseState(string $state) + { + return json_decode(html_entity_decode($state), true); + } + /** * @return string */ @@ -143,7 +154,7 @@ class Yahoo extends OAuth { if (empty($this->user)) { $this->user = json_decode($this->request('GET', - $this->resourceEndpoint, ['Authorization: Bearer '.urlencode($accessToken)]), true)['data']['0']; + $this->resourceEndpoint, ['Authorization: Bearer '.urlencode($accessToken)]), true); } return $this->user;