From b25b4a33854b25c2c38a07b2df47fa511ca9caa0 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Sun, 3 Jan 2021 11:44:04 +0545 Subject: [PATCH 1/3] Correcting the spelling, --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52a102628e..66bfca13bb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -295,5 +295,5 @@ Submitting documentation updates, enhancements, designs, or bug fixes. Spelling ### Helping Someone -Searching for Appwrite on Discord, GitHub, or StackOverflow and helping someone else who needs help. You can also help by reaching others how to contribute to Appwrite's repo! +Searching for Appwrite on Discord, GitHub, or StackOverflow and helping someone else who needs help. You can also help by teaching others how to contribute to Appwrite's repo! From be1eeefc6baf1a7b7a448c3892d3afff7db2f371 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sat, 9 Jan 2021 08:23:38 +0200 Subject: [PATCH 2/3] Updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1398b9513e..05c8b26769 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ Getting started with Appwrite is as easy as creating a new project, choosing you * [**Account**](https://appwrite.io/docs/client/account) - Manage current user authentication and account. Track and manage the user sessions, devices, sign-in methods, and security logs. * [**Users**](https://appwrite.io/docs/server/users) - Manage and list all project users when in admin mode. * [**Teams**](https://appwrite.io/docs/client/teams) - Manage and group users in teams. Manage memberships, invites, and user roles within a team. -* [**Database**](https://appwrite.io/docs/client/database) - Manage database collections and documents. Read, create, update, and delete documents and filter lists of documents collections using an advanced filter with graph-like capabilities. +* [**Database**](https://appwrite.io/docs/client/database) - Manage database collections and documents. Read, create, update, and delete documents and filter lists of document collections using advanced filters. * [**Storage**](https://appwrite.io/docs/client/storage) - Manage storage files. Read, create, delete, and preview files. Manipulate the preview of your files to fit your app perfectly. All files are scanned by ClamAV and stored in a secure and encrypted way. * [**Locale**](https://appwrite.io/docs/client/locale) - Track your user's location, and manage your app locale-based data. * [**Avatars**](https://appwrite.io/docs/client/avatars) - Manage your users' avatars, countries' flags, browser icons, credit card symbols, and generate QR codes. From 6ac551281cc8277c303fe814e5d1eb1ee7f911c3 Mon Sep 17 00:00:00 2001 From: Armino Popp Date: Wed, 27 Jan 2021 13:29:25 +0200 Subject: [PATCH 3/3] Add Tradeshift OAuth2 provider for live and sandbox Fixed formatting --- app/config/providers.php | 36 +++-- public/images/oauth2/tradeshift.png | Bin 0 -> 8001 bytes public/images/oauth2/tradeshiftbox.png | Bin 0 -> 8001 bytes src/Appwrite/Auth/OAuth2/Tradeshift.php | 155 +++++++++++++++++++++ src/Appwrite/Auth/OAuth2/TradeshiftBox.php | 18 +++ 5 files changed, 200 insertions(+), 9 deletions(-) create mode 100644 public/images/oauth2/tradeshift.png create mode 100644 public/images/oauth2/tradeshiftbox.png create mode 100644 src/Appwrite/Auth/OAuth2/Tradeshift.php create mode 100644 src/Appwrite/Auth/OAuth2/TradeshiftBox.php diff --git a/app/config/providers.php b/app/config/providers.php index a377cae6f0..36082433c3 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -163,6 +163,24 @@ return [ // Ordered by ABC. 'beta' => false, 'mock' => false, ], + 'tradeshift' => [ + 'name' => 'Tradeshift', + 'developers' => 'https://developers.tradeshift.com/docs/api', + 'icon' => 'icon-tradeshift', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false, + ], + 'tradeshiftBox' => [ + 'name' => 'Tradeshift Sandbox', + 'developers' => 'https://developers.tradeshift.com/docs/api', + 'icon' => 'icon-tradeshiftbox', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false, + ], 'twitch' => [ 'name' => 'Twitch', 'developers' => 'https://dev.twitch.tv/docs/authentication', @@ -215,6 +233,15 @@ return [ // Ordered by ABC. // 'beta' => false, // 'mock' => false, // ], + 'wordpress' => [ + 'name' => 'WordPress', + 'developers' => 'https://developer.wordpress.com/docs/oauth2/', + 'icon' => 'icon-wordpress', + 'enabled' => true, + 'form' => false, + 'beta' => false, + 'mock' => false + ], // Keep Last 'mock' => [ 'name' => 'Mock', @@ -225,13 +252,4 @@ return [ // Ordered by ABC. 'beta' => false, 'mock' => true, ], - 'wordpress' => [ - 'name' => 'WordPress', - 'developers' => 'https://developer.wordpress.com/docs/oauth2/', - 'icon' => 'icon-wordpress', - 'enabled' => true, - 'form' => false, - 'beta' => false, - 'mock' => false - ] ]; diff --git a/public/images/oauth2/tradeshift.png b/public/images/oauth2/tradeshift.png new file mode 100644 index 0000000000000000000000000000000000000000..9a5aaea12fe9b75ccc5519e6ad96de323d90828c GIT binary patch literal 8001 zcmeHMc|6oz+aHxBO3Gejj27FN#X6IHr({jm7_%@jiX7*-f2m`bA%h+cRw!=H)=t7kBrb7^{uOkPX_}g*)#? zeC`kLmg%Xw7+p!ydtP%PZbU$?S7g#?rOdrM_)YcOo6H{-Pe+1+yz5Eti1y!G%rAaE zra3=2+de7!?V~!)Z{wGub6VdiGxlGP%}+R3MOMt+%gN5XDn*_uRZOjqql~+#wY+uw zmT=p7W4(DoPk+}p%i!vf-u+s^pL_F*Bu>EV1Z=DOB~P(&_}(4*vGXaL)a&ko{_G>d9q>`F zCTGx_`PyvS(qw;S#X!iGS6nA)eNJ|+72iqe=R$^U)z#_`iap4h%zD`R83PhV+=q)w z=nPp&)ZMP4alH;)va8NUeCD%$2Og?3NqmmX5D}!B7TojSw@9a4qF&!u2|C3mE$YD~ zP;F`wvxCCUt-RkdCMpLfW0gtl%t*gw4>d0lqc_GVzjdND=RJuzD*!EvvpRVDhGBbR z=`H1MD^F6ij^puH$NL7=+Vn1J_`L6-!z#b3q_rCBMO;vC%(>YNAKAlRnyc7~ob+mf zxt_q$6Vb^bX+pdfzAh(pqB~GpNgopq zKY?$&cS$|UT@R$oSvw`Gnd$mWlyG!wTb*>6{n;?ZN=c5B#BbnUE$sZszAL4uhl|dA zkKLc4!lwtdTSOW8mlmUX_vbYGwv*IB_5yFLk+?lerI>gj)1vaZo0W_2!&gMVKiHxy zi6Fv0indi_?tU=kkI1te>K1zPY>TBdr`5UbU3oGjnmVsW##{+jRPNU1%era050ttE z-9tYs8(vVo({H$Q$J>+Fp`*i%4xWZ#SE1%=s%3r5ZUe6|&A`LXy~ldW9&*fi-Dq_s zBt$-lci>Ys>3N-detWO=%%|Nqwh=0C_`V9x@9*%J_m~fiR%y3=UB*3@f2H*0I7L|4 z?vZQ7ZtJ7H2*CrldTq-Nbd25aDOe(K%MLz99 zeDBlSdrO&~uIyu78%zhvKayv@KDc{UW7IQtd4PR7ep^e-*#g^L?%NQ9l)MB?u6>bd zu4loJXFe)&5Y;>Qv5l}vW=F$9$J+)$Vmg0s$wX)WT|*iDr*PpY8>MH`Y&p%3Dhf06 z3!lXn&Gd;_Ds%594G3$4o5o-JT$CSGe24DX7cJaW*YN3x-RO^LLY{&5$3$7h?nY_x zj0*R!_sE@x&pY?r(njbFOk6sp6~U#4lJ>&fhAOG= z`3lb%=EL{Ov)g9wah{smnt9sIUNP4FWK0?#tn-4vfw?>-aD^{KW-;K)8RP3^W@+jbap9*#3zBusGAx=CI2t0MX7`g2$LI?iPd7|xmS#A8eNOB6_JU`OSMSg+ z8BXyhyEy%?p@rgko>&vggym;;`4ds6OMT71v8Vpz$o3KKFL-_A zg37jhYp3E(dt_ogrK1uSGQ*OKXd)irm*9qkj#}ee#{3fvUm}Yi_Bo#TaW!>XP%BRr z6PBUp6b;J}xFwNfT%hUgeKQww`kMTN#bLpYvQxc-qdhW0!w24p4-+ofEWRGAuTzin z6(_}eJvu09F$Fph)G(T3N#W!g8=t>R3laEKe`Al!%ZXz_$35$Buc(c>R0wpQ818Bf z`kr~P-!nUSy3IW@#azq#Jsx(YaPj`p5WQ!EeqZMGeFoLGc#-4aDu>0NKPWubTKkL?{eQq0nqq}m*#alvL2tS%UJHL zM6U1axHk0i)=(E|#re0x!<)Iwy(D~8dd@^~H*gJxb_;8~$}HXr?tEW8PBtPiF1i}( z*3<;tre!SE98Ne89JCt|aoLKidAGratBEPntp&2*Rl66DoKD)ArT;E~GCNJN@96VC zdZX{e(=_4dMyDbdN#~#WV?#d+cBeAAjB!)F8(yd>ZW(n>)^UOgLp(`=7?dL-PKEL?g`ef?p-OJS!sQtI&isq!oGh{(dSHVld0vo({Acb6*H|9)}Qum4B9X&-?8}eUKhoaBDysEN{nm2utW-Dt%AlIC_}9{C5vXxKn5xTc&`vzR6g(16;Td`+GqH%}+<65oJ z1p`{csBHLUEZdQsOJZ6J5=*Ih_K8=ivAUbn7VGY78HNohytvc*b^abn)jYIXk(ybu z+{FR^Y!XnJXK*nzj5PG7Jg*_JdW@IPzkRPBEdvA%xdD23y-js2w8k-w*?i4$QY?F$ zb_5~5oQ;<^>>dQ4ANa5$n@(Q&T0B0#@k|V@AXP0w1O(caMg$J-c4mjrSPDr2gQK|N z75qq4;9w5|scZRBF<4JL1MG%(Cz3TFGZj@3FcGH#IjU?1H>2v|J&48uG`w}dVH<3K zCl-Z+XlZh*`=J2>5}ttp`;olJbhMuaWR({U{AP8-AmCL9!&3udXJ!G`qtNhRB?Tn~ zIMl$8=!=ACa)Z@rI0D*A-|!~|(9(c-Fc?%c48~+K6_|<&6q-8>fkL5Ra3lVhd!Q;r4gwNB83cQabnykJ`4>A1Q-YZBnL*Z27W;2PY0~_Dm|Tn zgP8ygC15@P0EUFa)u3=B6p4bZw+BYe%zjyu=|5Ej^o03gs4#>A97ZDj!Gg{(@crH2 zpIXpufcq273Qwo_(6D#|Up$#1wcaV!%ZI++rw<*^>ROH43rBzfL9KdTZ)0R)X7S60 zC8Il$L|wIDq1PjE*k3rR56x>8gTun`UU(7^2pwQX`~lA(5`JHxKg@?U@^66v?tbzA z0sWg^tFf%=iq@xKeOOLS^fe%?c+oftmWV^I{&YhrBH=isG8Chts0>v?s$!uiyb>OY zRaGG%ktn>X8V0kD%7jd3V8~cJiwYoDAObvYiYlrYf)WO*tOQquDk%XJY6Mjz6amL$ z@Ng7X36DaoqcEotfl9!5t&fUDg#)Nm;HqvIMHLk&4uw(#sBmy7MhT08Dk`fIaCm?p z>87$u#aainj)jQ^1gQZ3y~n}}!yr&-Bn^le1`9T~{(Z!TNWxn)Ff7#&DhPzCvKmSi zrHoQhRa{4Ci>J|nEN77-;0g%jsyPmeHUua!K(-M{75r2>OjcL6j8yCy#!mh&CwYuj!y#0WSOQc~B+6XYE5~X6W^zsI&Gdvg;h=e#n;ai z{4aU{sQ+>DxAgr-u7BkETMGOw@ITr0k6eFCfxiX*C%gXN4VU$yZMgxU3S3NW~#A09R%XxXT8}#$yb3ZJ&2QGVrIZO#t-M*LT1}Ku4^8c4lh2a*u~ike>c_9-Szmo+z07lmPqo?Q%MI^1L?H zG`2i``qfw98W!1E=- zI9Z6Gt^Y5t(G}k*StrHnQ2t7}`q>e<(k4O@%m+2llBukaAjc8dKH;=Gtd*^FjxuTG z?fkvgf1#L?$5ZKy0&)bGgUq>Hwb<2hyCHz&V8kWFSf z%VgEI|8S_8k{rInBbKc3K?*1H@gYcRFDN4HgLZW;f5E53{dc!@RJqEHU=8`cX5l#E z8lR@PZxnO>f^5pPyzt<5R&<-O-upVPS)yoiZ2r|vE89184|N23sHAAWx_KC@G_gJ2 zL1yx_Wy{mV(wAR67^O3Y4Wn{3YD(duIh*bZ{`j~;=G<}W1vj*{U?uX&pwH#qEm{2d zf~n;%5)O_bk%AQvB6R9Alh{3ApOR}>ITM5zX9}K|?!Hjm3U17cN zbrl*zQs#$_zusq6v@e+Mc)qg#`I~P{(cNKY8ygB$XO14*cD^z!%s=TmVKn!lSuHl! z)Lj_le;j|LlsDUx8sMKY_KL%o$Ii81MDp4XIP>(v{kPszeX)#UwP||<DmHO(tPX?ZvC*R4VK_^ZT&E5K1*PB0#O^bv$L9O-G7QAk%&C!EW>kL#cN}y zvXYM*#jj*4Du+^el_uB*!iQJfun8MKH`q?h6&GoTfjYl=k7PHg6-G-{=b;mo-%W-G z$e4ajHLnRuvfAv>+$zTLviTKapbaTfAYs=$igF6^ddi4FZF`trCBZ8es^>mj)AY@z zDG)({kIfoK*eAWv$PydGt?b}z33x4UAR@`%dj~f5sP>)oRPU83-;jmx;%({lh1Ww_ zYS(JoUsJq*KZJ*7atJHqXH!P_kWN?B=p0Kze(GFu$-L9c&R-m$c13KD@wU%8bpIvW e_4RRC-?&Nl2I@t9a7dsIK_&)=_3!Gsp8Ow|h5{!5 literal 0 HcmV?d00001 diff --git a/public/images/oauth2/tradeshiftbox.png b/public/images/oauth2/tradeshiftbox.png new file mode 100644 index 0000000000000000000000000000000000000000..9a5aaea12fe9b75ccc5519e6ad96de323d90828c GIT binary patch literal 8001 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 literal 0 HcmV?d00001 diff --git a/src/Appwrite/Auth/OAuth2/Tradeshift.php b/src/Appwrite/Auth/OAuth2/Tradeshift.php new file mode 100644 index 0000000000..677dd5e044 --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/Tradeshift.php @@ -0,0 +1,155 @@ + self::TRADESHIFT_SANDBOX_API_DOMAIN, + 'live' => self::TRADESHIFT_API_DOMAIN, + ]; + + private $endpoint = [ + 'sandbox' => 'https://' . self::TRADESHIFT_SANDBOX_API_DOMAIN . '/tradeshift/', + 'live' => 'https://' . self::TRADESHIFT_API_DOMAIN . '/tradeshift/', + ]; + + private $resourceEndpoint = [ + 'sandbox' => 'https://' . self::TRADESHIFT_SANDBOX_API_DOMAIN . '/tradeshift/rest/external/', + 'live' => 'https://' . self::TRADESHIFT_API_DOMAIN . '/tradeshift/rest/external/', + ]; + + protected $environment = 'live'; + + /** + * @var array + */ + protected $user = []; + + + protected $scopes = [ + 'openid', + 'offline', + ]; + + /** + * @return string + */ + public function getName(): string + { + return 'tradeshift'; + } + + /** + * @return string + */ + public function getLoginURL(): string + { + $httpQuery = \http_build_query([ + 'response_type' => 'code', + 'client_id' => $this->appID, + 'scope' => \implode(' ', $this->getScopes()), + 'redirect_uri' => \str_replace("localhost", "127.0.0.1", $this->callback), + 'state' => \json_encode($this->state), + ]); + + $url = $this->endpoint[$this->environment] . 'auth/login?' . $httpQuery; + + return $url; + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + $response = $this->request( + 'POST', + $this->endpoint[$this->environment] . 'auth/token', + ['Authorization: Basic ' . \base64_encode($this->appID . ':' . $this->appSecret)], + \http_build_query([ + 'grant_type' => 'authorization_code', + 'code' => $code, + ]) + ); + + $accessToken = \json_decode($response, true); + + return $accessToken['access_token'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['Id'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['Username'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + $firstName = $user['FirstName'] ?? ''; + $lastName = $user['LastName'] ?? ''; + + return $firstName . ' ' . $lastName; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + $header = [ + 'Content-Type: application/json', + 'Accept: application/json', + 'Host: ' . urlencode($this->apiDomain[$this->environment]), + 'Authorization: Bearer ' . $accessToken, + ]; + + if (empty($this->user)) { + $response = $this->request( + 'GET', + $this->resourceEndpoint[$this->environment] . 'account/info/user', + $header + ); + $this->user = \json_decode($response, true); + } + + return $this->user; + } +} diff --git a/src/Appwrite/Auth/OAuth2/TradeshiftBox.php b/src/Appwrite/Auth/OAuth2/TradeshiftBox.php new file mode 100644 index 0000000000..6ba3c29f0a --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/TradeshiftBox.php @@ -0,0 +1,18 @@ +