From 6e143f7ed31f0928519e0c83bf56dca1de7a3f19 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Wed, 27 May 2020 14:54:27 +0300 Subject: [PATCH 01/20] Apple OAuth tests --- app/config/providers.php | 12 ++++++------ public/images/oauth2/apple.png | Bin 1360 -> 3582 bytes src/Appwrite/Auth/OAuth2/Apple.php | 29 +++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/config/providers.php b/app/config/providers.php index 703bbef264..490c173555 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -73,12 +73,12 @@ return [ 'enabled' => true, 'mock' => false, ], - // 'apple' => [ - // 'developers' => 'https://developer.apple.com/', - // 'icon' => 'icon-apple', - // 'enabled' => false, - // 'mock' => false, - // ], + 'apple' => [ + 'developers' => 'https://developer.apple.com/', + 'icon' => 'icon-apple', + 'enabled' => true, + 'mock' => false, + ], 'amazon' => [ 'developers' => 'https://developer.amazon.com/apps-and-games/services-and-apis', 'icon' => 'icon-amazon', diff --git a/public/images/oauth2/apple.png b/public/images/oauth2/apple.png index b0fdfd14f055970a22144a33cef8f0d79747b60d..98086e8048cce1c1a8d8317bb47394ac48bc6d40 100644 GIT binary patch literal 3582 zcmbVP3p|s1A72-aT%uC>s5B!7HM=m&+BldPrn%FFW_!k%ZEX+c5-HVjNzqHWox)r0 zVR96T2uBN*=$xaw3OR9dDI%R`<8*oJyzl4pem>8$XaE2Acm4i~tNg~p<=SR^EY6ozv_x(LY?>PSt@+aLo%hJein**q>> zYLo8A3js+81cbvEi~}O}C+l3{Li!L9C@F%%7@<+0i}M3`AWs;;52LnF2|Act5nO^}?QaB;fs&ePDAsVqV&oUjaPZ$Y-$3pci ztu-0s{Y?luXaW`L2qqn*lj$H7D;AAKBhfe{*3=DaOu(8FjLkNqjR_0H$mDrUHY@yp zNlUu`PK4yCRDvB_2=WBsvaR{na0T|wujZE=wyYq-f245RR(meWqgfy@Cc}U;ld?6$vN;*IOCXI;tnpPr{K>*nx2l$L+ zOAh#DM$(}};Ly4LB!mdb1X%PC4u~+P^Z6WL-UEldpf2}Z|x$$|)&t@B>GQS7S zOlbI`K2Bd~@o|0wTxe(upy@oNYnuauEsAAB{qa>_z+n0*At_y($s%3X?*@TgC7gI7a3~u~BKw2GI z|Ee-5&Ejo&PwUeoimQ8?nv2h8HLYrL4LZ*nPv%!;CR~r}in~&~n>N+io4>r__iS*g zk3~{nFXx$GkviLQ+qd-mL{de4cCurHJMv*$G-VHQ8-8=;o_du-@cyN=)6692*$Iqp z)fugKLusplvHgc<*&e!{Y2G?VJFyg((;}NaX)pK1FT353z4Ppkxeu>OQZxp`itoua zj&r<6b7<8n(@4oXg1B@RbLq@u?5-QWW^vb4Z`auGY+Gc)X`FVaB#tz-=v^cRt{}Ob zxc~G5dGSN1TyteAo>nzDQF^JXeMwyJ^O6g6-p1NzQO$Q$!%_Ytmhp>fpx5j&zMZ!a z22)xky%)hUvo&Bac_Rwh(oK~8s?Wi3)h>)OGmHrvY@F4rM?B?zKUr7@V{(=+46Pj&Nzlr5?lY zXWkY#Dl+are8|OSoQ=GjR9svP5=ekcety1f@_M?4e64Npa>zOT>8Y{nOZ@+}zx$*<^ zlJv>DJb|}U9q~R#v*EpmJZ}NwTVj~aMv!49SBeEN4LHfMKPJr z`f7M7cFd@#-9vLdm)z(YtXr@T$$Lw1ahk55R*mXboj<&CH9Atac{0?;NaEL;Km=nH||%p9n6Ce)9MBDCi!VjIdO@A(5=p)YRii z9Cb95wFqEgMFlN)*j>&uy`4#jeDg=_lJ6816v$wlYmg|GNF+gA?h&VDjHFGJTG8vLO^20ob=tXY$r~V62>M$j zW1TtM2Htg@HB9a&Y}=N5sOgOP{^G*I1IrnD->GWFEmveD1qB6F&shXuGafd?sIFUO zHF)Qo!!63qrq*NYY@Fj%N=iy39MjEsTR%z9tI%fdUcV&XgWAddHr3}x;A_&``eWap zI{{qI&$qs<{Uen(`LgHV_RsaSjzd2-HxrgtRwN`QQqpd8JbwK6mtTI&vsP0osi-*N zR&;;q;zj3X-Qn=b7YN+spx z$K8sugCAYJA{M(`es{fTZ07yRGpPq}4Nuna9(jz^<0~r`$2MNK4)t<4WkiaZt6#Hx zyJH)xYI0(tam1ghv0+1SVBq40_nDT~)=NNIjFm!lbv654+Ci~cTv>@3JUjR1N%PVD zGjG^neC3vzcauSbKSrlG>Ma{lNWI@jR>0wKv5$0}SSFgyPtZkyarlF0NRe-*$Nj~) z7+XRPm(A98KgRdkXb~MXJ+|q$%m#)?G}V&0_SPPzr;pE1uR0Va_gvyz4x{{bUlzy_ zHYH)wb%%WajNU<^P~d6@sD?RC8@Gij6XL!1dcV0_w61}hLRE` z!y+cu+tqbR&b8g8UX^|U0SdaM!hz0Miytzo@@r z(LVh-HOthpYn!KXGckOOoHKr@$SqKkj=W_&M{+9Y9vC;saYLkRjh?-fx5|0wrH5J^ zR8u!!1Ye`+KO3KxmzQ4|ANPR!Rzw`WSB}>_)*Yjy?dI$I=+|GjnwoAe1ZatCkhP(& zcA98*>{idyH;W&&#uA`xfZa|s@zQLM}ex+zikv7C-McWy$AmSpB2DC delta 1352 zcmV-O1-JVC8_)`n8Gi%-007$SUEcrz00d`2O+f$vv5yP zfP?@5`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00Lr5M??VshmXv^00009a7bBm z0001B0001A0I0QS^8f$<2XskIMF-;w1r#pk->6#`@lQg-$jFDzomvg?&RXCsflpp7u@8{fm&bjA%FBl94 zgTY`h7z_r3!GB;d>>!S+x9B9m{WRm{ccOOdtKz`VGxQVVDp^iQR_(5$hMNdSIYJnK zJXRIk7R1A0zNUzE{mAf<-65%IJjq~*hQ%^(+8tEoI0^F|g%S;mNsibZR;4)b(@$=T zMvhb5ZFgXm;^rx?Y|*fY^QzrpRgRZqW#=QyY3{K*tba;z65;ZeVQw)+uMJDFCLUfQ zRU%PjmRImdH?#8#qLY0ktrWP#yBsI~{}XZGyKxz%`JVSUM@qgKd68N?q$%F`Y>@+s z%reLTzc7xIT{Ph)%`z);{Uw8kR=R1Y2`_Ha%rilZNwPS3kOSmcV1^7~x@n^sA1<;a zS!9YKMt@lQFNnB^(8pth@KJ{gD3W271!8>55K9!PB}5Os?57bgw_R`7B2SVyL!96T z*6kJX@-oj8#*6c&-%>2Gz-3lwVGp|r{KIUu!7L}~Coa&firmNB%$2PYSaGWLiBX%ZA!WK6#jH4z_o z2!D#CNZ2J(FS_T>OKg1AL>!_y5SPTnp(au&*~;ou%k6fFtdkQI@k=D@)I`?wwxwmX z&|{a#B3A@O{5+z+E~$ykvnVJ69rW5G5*HQ;@d6ROD%2*v0$p?qCiff!sb@qd1F1TL z-%B?>F%j_4Mk7IQ+JD)@H4D1-G!SH*iDVD`FlAIwX*)Nr_kI&0q27gdL zq8zYG1K?@Si)c*oqR#c9zgzy38Y0?Rl~q3B1JQk_0*!n~TI+0N`O?0}ZlxULG+AYh zA~F4ql@y0KyUn1_lG)~g=@`%I=gH*qQ%~?Zk5garjm2LKGfjdtMe6ahmo7qEN^KD1 zeZHWe+q~S3c$BML;4oq8fCMuP^M515%#p?d9MloyVR|@7D-F0b>ppnF*z+UFfA}MR53Iuser; } + + protected function getToken($p8) + { + $keyfile = 'AuthKey_AABBCC1234.p8'; # <- Your AuthKey file + $keyid = '4LFF7TZ6Q5'; # <- Your Key ID + $teamid = 'YJHMCSNREU'; # <- Your Team ID (see Developer Portal) + $bundleid = 'test2.appwrite.io'; # <- Your Bundle ID + $url = 'https://api.development.push.apple.com'; # <- development url, or use http://api.push.apple.com for production environment + $token = 'e2c48ed32ef9b018........'; # <- Device Token + + function base64($data) { + return rtrim(strtr(base64_encode(json_encode($data)), '+/', '-_'), '='); + } + + $message = '{"aps":{"alert":"Hi there!","sound":"default"}}'; + + $key = openssl_pkey_get_private('file://'.$keyfile); + + $header = ['alg'=>'ES256', 'kid'=>$keyid]; + $claims = ['iss'=>$teamid, 'iat'=>time()]; + + $header_encoded = base64($header); + $claims_encoded = base64($claims); + + $signature = ''; + openssl_sign($header_encoded . '.' . $claims_encoded, $signature, $key, 'sha256'); + $jwt = $header_encoded . '.' . $claims_encoded . '.' . base64_encode($signature); + + } } From 7296db0d06eae64f2498bba63c462f6041d6523c Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Fri, 29 May 2020 15:02:53 +0300 Subject: [PATCH 02/20] Added UI adjutments for Apple unique secret key --- app/app.php | 1 + app/config/providers.php | 21 +++ app/controllers/api/account.php | 24 ++++ app/controllers/api/projects.php | 2 +- app/views/console/users/index.phtml | 36 +++-- gulpfile.js | 1 + public/dist/scripts/app-all.js | 8 +- public/dist/scripts/app.js | 8 +- public/scripts/views/forms/oauth-apple.js | 94 +++++++++++++ src/Appwrite/Auth/OAuth2/Apple.php | 158 +++++++++++++++------- 10 files changed, 286 insertions(+), 67 deletions(-) create mode 100644 public/scripts/views/forms/oauth-apple.js diff --git a/app/app.php b/app/app.php index 9fba836c24..a72116a767 100644 --- a/app/app.php +++ b/app/app.php @@ -104,6 +104,7 @@ $utopia->init(function () use ($utopia, $request, $response, &$user, $project, $ if(!$originValidator->isValid($origin) && in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE]) + && $route->getLabel('origin', false) !== '*' && empty($request->getHeader('X-Appwrite-Key', ''))) { throw new Exception($originValidator->getDescription(), 403); } diff --git a/app/config/providers.php b/app/config/providers.php index 490c173555..1a6b067ec8 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -5,30 +5,35 @@ return [ 'developers' => 'https://developer.atlassian.com/bitbucket', 'icon' => 'icon-bitbucket', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'facebook' => [ 'developers' => 'https://developers.facebook.com/', 'icon' => 'icon-facebook', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'github' => [ 'developers' => 'https://developer.github.com/', 'icon' => 'icon-github-circled', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'gitlab' => [ 'developers' => 'https://docs.gitlab.com/ee/api/', 'icon' => 'icon-gitlab', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'google' => [ 'developers' => 'https://developers.google.com/', 'icon' => 'icon-google', 'enabled' => true, + 'form' => false, 'mock' => false, ], // 'instagram' => [ @@ -41,6 +46,7 @@ return [ 'developers' => 'https://developer.microsoft.com/en-us/', 'icon' => 'icon-windows', 'enabled' => true, + 'form' => false, 'mock' => false, ], // 'twitter' => [ @@ -53,90 +59,105 @@ return [ 'developers' => 'https://developer.linkedin.com/', 'icon' => 'icon-linkedin', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'slack' => [ 'developers' => 'https://api.slack.com/', 'icon' => 'icon-slack', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'dropbox' => [ 'developers' => 'https://www.dropbox.com/developers/documentation', 'icon' => 'icon-dropbox', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'salesforce' => [ 'developers' => 'https://developer.salesforce.com/docs/', 'icon' => 'icon-salesforce', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'apple' => [ 'developers' => 'https://developer.apple.com/', 'icon' => 'icon-apple', 'enabled' => true, + 'form' => 'apple.phtml', 'mock' => false, ], 'amazon' => [ 'developers' => 'https://developer.amazon.com/apps-and-games/services-and-apis', 'icon' => 'icon-amazon', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'vk' => [ 'developers' => 'https://vk.com/dev', 'icon' => 'icon-vk', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'discord' => [ 'developers' => 'https://discordapp.com/developers/docs/topics/oauth2', 'icon' => 'icon-discord', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'twitch' => [ 'developers' => 'https://dev.twitch.tv/docs/authentication', 'icon' => 'icon-twitch', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'spotify' => [ 'developers' => 'https://developer.spotify.com/documentation/general/guides/authorization-guide/', 'icon' => 'icon-spotify', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'yahoo' => [ 'developers' => 'https://developer.yahoo.com/oauth2/guide/flows_authcode/', 'icon' => 'icon-yahoo', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'yandex' => [ 'developers' => 'https://tech.yandex.com/oauth/', 'icon' => 'icon-yandex', 'enabled' => true, + 'form' => false, 'mock' => false, ], 'twitter' => [ 'developers' => 'https://developer.twitter.com/', 'icon' => 'icon-twitter', 'enabled' => false, + 'form' => false, 'mock' => false ], 'paypal' => [ 'developers' => 'https://developer.paypal.com/docs/api/overview/', 'icon' => 'icon-paypal', 'enabled' => true, + 'form' => false, 'mock' => false ], 'bitly' => [ 'developers' => 'https://dev.bitly.com/v4_documentation.html', 'icon' => 'icon-bitly', 'enabled' => true, + 'form' => false, 'mock' => false ], // Keep Last diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index a2b7afe0fc..6e7d437fd1 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -308,6 +308,29 @@ $utopia->get('/v1/account/sessions/oauth2/callback/:provider/:projectId') } ); +$utopia->post('/v1/account/sessions/oauth2/callback/:provider/:projectId') + ->desc('OAuth2 Callback') + ->label('error', __DIR__.'/../../views/general/error.phtml') + ->label('scope', 'public') + ->label('origin', '*') + ->label('docs', false) + ->param('projectId', '', function () { return new Text(1024); }, 'Project unique ID.') + ->param('provider', '', function () { return new WhiteList(array_keys(Config::getParam('providers'))); }, 'OAuth2 provider.') + ->param('code', '', function () { return new Text(1024); }, 'OAuth2 code.') + ->param('state', '', function () { return new Text(2048); }, 'Login state params.', true) + ->action( + function ($projectId, $provider, $code, $state) use ($response) { + $domain = Config::getParam('domain'); + $protocol = Config::getParam('protocol'); + + $response + ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->addHeader('Pragma', 'no-cache') + ->redirect($protocol.'://'.$domain.'/v1/account/sessions/oauth2/'.$provider.'/redirect?' + .http_build_query(['project' => $projectId, 'code' => $code, 'state' => $state])); + } + ); + $utopia->get('/v1/account/sessions/oauth2/:provider/redirect') ->desc('OAuth2 Redirect') ->label('error', __DIR__.'/../../views/general/error.phtml') @@ -361,6 +384,7 @@ $utopia->get('/v1/account/sessions/oauth2/:provider/redirect') if (!empty($state['failure']) && !$validateURL->isValid($state['failure'])) { throw new Exception('Invalid redirect URL for failure login', 400); } + $state['failure'] = null; $accessToken = $oauth2->getAccessToken($code); diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 54ccd2dcec..7cd14e583c 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -361,7 +361,7 @@ $utopia->patch('/v1/projects/:projectId/oauth2') ->param('projectId', '', function () { return new UID(); }, 'Project unique ID.') ->param('provider', '', function () { return new WhiteList(array_keys(Config::getParam('providers'))); }, 'Provider Name', false) ->param('appId', '', function () { return new Text(256); }, 'Provider app ID.', true) - ->param('secret', '', function () { return new text(256); }, 'Provider secret key.', true) + ->param('secret', '', function () { return new text(512); }, 'Provider secret key.', true) ->action( function ($projectId, $provider, $appId, $secret) use ($request, $response, $consoleDB) { $project = $consoleDB->getDocument($projectId); diff --git a/app/views/console/users/index.phtml b/app/views/console/users/index.phtml index 62cf13a4b2..18b8b0537d 100644 --- a/app/views/console/users/index.phtml +++ b/app/views/console/users/index.phtml @@ -337,12 +337,13 @@ $providers = $this->getParam('providers', []); $data): if (isset($data['enabled']) && !$data['enabled']) { continue; } if (isset($data['mock']) && $data['mock']) { continue; } + $form = (isset($data['form'])) ? $data['form'] : false; ?>
  • + {{console-project.usersOauth2escape(ucfirst($provider)); ?>Appid}} && + {{console-project.usersOauth2escape(ucfirst($provider)); ?>Secret}}"> - + !{{console-project.usersOauth2escape(ucfirst($provider)); ?>Appid}} || + !{{console-project.usersOauth2escape(ucfirst($provider)); ?>Secret}}"> + - <?php echo ucfirst($provider); ?> Logo + <?php echo $this->escape(ucfirst($provider)); ?> Logo diff --git a/gulpfile.js b/gulpfile.js index a0be3a4058..b45d16bf7e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -47,6 +47,7 @@ const configApp = { 'public/scripts/views/forms/move-down.js', 'public/scripts/views/forms/move-up.js', 'public/scripts/views/forms/nav.js', + 'public/scripts/views/forms/oauth-apple.js', 'public/scripts/views/forms/password-meter.js', 'public/scripts/views/forms/pell.js', 'public/scripts/views/forms/remove.js', diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js index f7b6ba5a93..3dac3fcbd5 100644 --- a/public/dist/scripts/app-all.js +++ b/public/dist/scripts/app-all.js @@ -2568,7 +2568,7 @@ return"< 1s";}).add("markdown",function($value,markdown){return markdown.render( let thresh=1000;if(Math.abs($value)=thresh&&u'+ units[u]+"");}).add("statsTotal",function($value){if(!$value){return 0;} -$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;}).add("isEmpty",function($value){return(!!$value);}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)}).add("activeDomainsCount",function($value){let result=[];if(Array.isArray($value)){result=$value.filter(function(node){return(node.verification&&node.certificateId);});} +$value=abbreviate($value,0,false,false);return $value==="0"?"N/A":$value;}).add("isEmpty",function($value){return(!!$value);}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)}).add("activeDomainsCount",function($value){let result=[];if(Array.isArray($value)){result=$value.filter(function(node){return(node.verification&&node.certificateId);});} return result.length;}).add("documentAction",function(container){let collection=container.get('project-collection');let document=container.get('project-document');if(collection&&document&&!document.$id){return'database.createDocument';} return'database.updateDocument';}).add("documentSuccess",function(container){let document=container.get('project-document');if(document&&!document.$id){return',redirect';} return'';}).add("firstElement",function($value){if($value&&$value[0]){return $value[0];} @@ -2640,7 +2640,11 @@ list["filters-"+filter.key]=params[key][i];}}}} return list;};let apply=function(params){let cached=container.get(name);cached=cached?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+"-changed",{bubbles:false,cancelable:true}));};switch(element.tagName){case"INPUT":break;case"TEXTAREA":break;case"BUTTON":element.addEventListener("click",function(){apply(JSON.parse(expression.parse(element.dataset["params"]||"{}")));});break;case"FORM":element.addEventListener("input",function(){apply(form.toJson(element));});element.addEventListener("change",function(){apply(form.toJson(element));});element.addEventListener("reset",function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(",");for(let y=0;y=distance)&&(distance>=0)){if(minLink){minLink.classList.remove('selected');} -console.log('old',minLink);minDistance=distance;minElement=title;minLink=links[i];minLink.classList.add('selected');console.log('new',minLink);}}};window.addEventListener('scroll',check);check();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-password-meter",controller:function(element,window){var calc=function(password){var score=0;if(!password)return score;var letters=new window.Object();for(var i=0;i60)return(meter.className="password-meter strong");if(score>30)return(meter.className="password-meter medium");if(score>=0)return(meter.className="password-meter weak");};var meter=window.document.createElement("div");meter.className="password-meter";element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener("change",callback);element.addEventListener("keypress",callback);element.addEventListener("keyup",callback);element.addEventListener("keydown",callback);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-pell",controller:function(element,window,document,markdown,rtl){var div=document.createElement("div");element.className="pell hide";div.className="input pell";element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule("underline",{filter:["u"],replacement:function(content){return"__"+content+"__";}});var editor=window.pell.init({element:div,onChange:function onChange(html){alignText();element.value=turndownService.turndown(html);},defaultParagraphSeparator:"p",actions:[{name:"bold",icon:''},{name:"underline",icon:''},{name:"italic",icon:''},{name:"olist",icon:''},{name:"ulist",icon:''},{name:"link",icon:''}]});var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;console.log(clipboardData.getData("Text"));window.pell.exec("insertText",clipboardData.getData("Text"));return true;};var alignText=function(){let paragraphs=editor.content.querySelectorAll('p,li');let last='';for(let paragraph of paragraphs){var content=paragraph.textContent;if(content.trim()===''){content=last.textContent;} if(rtl.isRTL(content)){paragraph.style.direction='rtl';paragraph.style.textAlign='right';} diff --git a/public/dist/scripts/app.js b/public/dist/scripts/app.js index 6643c8f322..15077e480e 100644 --- a/public/dist/scripts/app.js +++ b/public/dist/scripts/app.js @@ -284,7 +284,7 @@ return"< 1s";}).add("markdown",function($value,markdown){return markdown.render( let thresh=1000;if(Math.abs($value)=thresh&&u'+ units[u]+"");}).add("statsTotal",function($value){if(!$value){return 0;} -$value=abbreviate($value,1,false,false);return $value==="0"?"N/A":$value;}).add("isEmpty",function($value){return(!!$value);}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)}).add("activeDomainsCount",function($value){let result=[];if(Array.isArray($value)){result=$value.filter(function(node){return(node.verification&&node.certificateId);});} +$value=abbreviate($value,0,false,false);return $value==="0"?"N/A":$value;}).add("isEmpty",function($value){return(!!$value);}).add("isEmptyObject",function($value){return((Object.keys($value).length===0&&$value.constructor===Object)||$value.length===0)}).add("activeDomainsCount",function($value){let result=[];if(Array.isArray($value)){result=$value.filter(function(node){return(node.verification&&node.certificateId);});} return result.length;}).add("documentAction",function(container){let collection=container.get('project-collection');let document=container.get('project-document');if(collection&&document&&!document.$id){return'database.createDocument';} return'database.updateDocument';}).add("documentSuccess",function(container){let document=container.get('project-document');if(document&&!document.$id){return',redirect';} return'';}).add("firstElement",function($value){if($value&&$value[0]){return $value[0];} @@ -356,7 +356,11 @@ list["filters-"+filter.key]=params[key][i];}}}} return list;};let apply=function(params){let cached=container.get(name);cached=cached?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+"-changed",{bubbles:false,cancelable:true}));};switch(element.tagName){case"INPUT":break;case"TEXTAREA":break;case"BUTTON":element.addEventListener("click",function(){apply(JSON.parse(expression.parse(element.dataset["params"]||"{}")));});break;case"FORM":element.addEventListener("input",function(){apply(form.toJson(element));});element.addEventListener("change",function(){apply(form.toJson(element));});element.addEventListener("reset",function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(",");for(let y=0;y=distance)&&(distance>=0)){if(minLink){minLink.classList.remove('selected');} -console.log('old',minLink);minDistance=distance;minElement=title;minLink=links[i];minLink.classList.add('selected');console.log('new',minLink);}}};window.addEventListener('scroll',check);check();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-password-meter",controller:function(element,window){var calc=function(password){var score=0;if(!password)return score;var letters=new window.Object();for(var i=0;i60)return(meter.className="password-meter strong");if(score>30)return(meter.className="password-meter medium");if(score>=0)return(meter.className="password-meter weak");};var meter=window.document.createElement("div");meter.className="password-meter";element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener("change",callback);element.addEventListener("keypress",callback);element.addEventListener("keyup",callback);element.addEventListener("keydown",callback);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-pell",controller:function(element,window,document,markdown,rtl){var div=document.createElement("div");element.className="pell hide";div.className="input pell";element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule("underline",{filter:["u"],replacement:function(content){return"__"+content+"__";}});var editor=window.pell.init({element:div,onChange:function onChange(html){alignText();element.value=turndownService.turndown(html);},defaultParagraphSeparator:"p",actions:[{name:"bold",icon:''},{name:"underline",icon:''},{name:"italic",icon:''},{name:"olist",icon:''},{name:"ulist",icon:''},{name:"link",icon:''}]});var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;console.log(clipboardData.getData("Text"));window.pell.exec("insertText",clipboardData.getData("Text"));return true;};var alignText=function(){let paragraphs=editor.content.querySelectorAll('p,li');let last='';for(let paragraph of paragraphs){var content=paragraph.textContent;if(content.trim()===''){content=last.textContent;} if(rtl.isRTL(content)){paragraph.style.direction='rtl';paragraph.style.textAlign='right';} diff --git a/public/scripts/views/forms/oauth-apple.js b/public/scripts/views/forms/oauth-apple.js new file mode 100644 index 0000000000..358e9aae86 --- /dev/null +++ b/public/scripts/views/forms/oauth-apple.js @@ -0,0 +1,94 @@ +(function(window) { + "use strict"; + + window.ls.container.get("view").add({ + selector: "data-forms-oauth-apple", + controller: function(element) { + let container = document.createElement("div"); + let row = document.createElement("div"); + let col1 = document.createElement("div"); + let col2 = document.createElement("div"); + let keyID = document.createElement("input"); + let keyLabel = document.createElement("label"); + let teamID = document.createElement("input"); + let teamLabel = document.createElement("label"); + let p8 = document.createElement("textarea"); + let p8Label = document.createElement("label"); + + keyLabel.textContent = 'Key ID'; + teamLabel.textContent = 'Team ID'; + p8Label.textContent = 'P8 File'; + + row.classList.add('row'); + row.classList.add('thin'); + container.appendChild(row); + container.appendChild(p8Label); + container.appendChild(p8); + + row.appendChild(col1); + row.appendChild(col2); + + col1.classList.add('col'); + col1.classList.add('span-6'); + col1.appendChild(keyLabel); + col1.appendChild(keyID); + + col2.classList.add('col'); + col2.classList.add('span-6'); + col2.appendChild(teamLabel); + col2.appendChild(teamID); + + keyID.type = 'text'; + keyID.placeholder = 'SHAB13ROFN'; + teamID.type = 'text'; + teamID.placeholder = 'ELA2CD3AED'; + p8.accept = '.p8'; + p8.classList.add('margin-bottom-no'); + + element.parentNode.insertBefore(container, element.nextSibling); + + element.addEventListener('change', sync); + keyID.addEventListener('change', update); + teamID.addEventListener('change', update); + p8.addEventListener('change', update); + + function update() { + let json = {}; + + json.keyID = keyID.value; + json.teamID = teamID.value; + json.p8 = p8.value; + + element.value = JSON.stringify(json); + } + + function sync() { + console.log('sync'); + if(!element.value) { + return; + } + + let json = {}; + + try { + json = JSON.parse(element.value); + } catch (error) { + console.error('Failed to parse secret key'); + } + + teamID.value = json.teamID || ''; + keyID.value = json.keyID || ''; + p8.value = json.p8 || ''; + } + + // function syncB() { + // picker.value = element.value; + // } + + // element.parentNode.insertBefore(preview, element); + + // update(); + sync(); + } + }); +})(window); diff --git a/src/Appwrite/Auth/OAuth2/Apple.php b/src/Appwrite/Auth/OAuth2/Apple.php index 22ed29561a..411f8baf59 100644 --- a/src/Appwrite/Auth/OAuth2/Apple.php +++ b/src/Appwrite/Auth/OAuth2/Apple.php @@ -3,6 +3,7 @@ namespace Appwrite\Auth\OAuth2; use Appwrite\Auth\OAuth2; +use Exception; // Reference Material // https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple @@ -22,6 +23,11 @@ class Apple extends OAuth2 "email" ]; + /** + * @var array + */ + protected $claims = []; + /** * @return string */ @@ -58,15 +64,18 @@ class Apple extends OAuth2 'https://appleid.apple.com/auth/token', $headers, http_build_query([ + 'grant_type' => 'authorization_code', 'code' => $code, 'client_id' => $this->appID, - 'client_secret' => $this->appSecret, + 'client_secret' => $this->getAppSecret(), 'redirect_uri' => $this->callback, - 'grant_type' => 'authorization_code' ]) ); - $accessToken = json_decode($accessToken, true); + $accessToken = json_decode($accessToken, true); + + $this->claims = (isset($accessToken['id_token'])) ? explode('.', $accessToken['id_token']) : [0 => '', 1 => '']; + $this->claims = (isset($this->claims[1])) ? json_decode(base64_decode($this->claims[1]), true) : []; if (isset($accessToken['access_token'])) { return $accessToken['access_token']; @@ -82,10 +91,8 @@ class Apple extends OAuth2 */ public function getUserID(string $accessToken): string { - $user = $this->getUser($accessToken); - - if (isset($user['account_id'])) { - return $user['account_id']; + if (isset($this->claims['sub']) && !empty($this->claims['sub'])) { + return $this->claims['sub']; } return ''; @@ -98,10 +105,11 @@ class Apple extends OAuth2 */ public function getUserEmail(string $accessToken): string { - $user = $this->getUser($accessToken); - - if (isset($user['email'])) { - return $user['email']; + if (isset($this->claims['email']) && + !empty($this->claims['email']) && + isset($this->claims['email_verified']) && + $this->claims['email_verified'] === 'true') { + return $this->claims['email']; } return ''; @@ -114,57 +122,111 @@ class Apple extends OAuth2 */ public function getUserName(string $accessToken): string { - $user = $this->getUser($accessToken); - - if (isset($user['name'])) { - return $user['name']['display_name']; + if (isset($this->claims['email']) && + !empty($this->claims['email']) && + isset($this->claims['email_verified']) && + $this->claims['email_verified'] === 'true') { + return $this->claims['email']; } return ''; } - /** - * @param string $accessToken - * - * @return array - */ - protected function getUser(string $accessToken): array + protected function getAppSecret():string { - if (empty($this->user)) { - $headers[] = 'Authorization: Bearer '. urlencode($accessToken); - $user = $this->request('POST', '', $headers); - $this->user = json_decode($user, true); + try { + $secret = json_decode($this->appSecret, true); + } catch (\Throwable $th) { + throw new Exception('Invalid secret'); } - return $this->user; - } + $keyfile = (isset($secret['p8'])) ? $secret['p8'] : ''; // Your p8 Key file + $keyID = (isset($secret['keyID'])) ? $secret['keyID'] : ''; // Your Key ID + $teamID = (isset($secret['teamID'])) ? $secret['teamID'] : ''; // Your Team ID (see Developer Portal) + $bundleID = $this->appID; // Your Bundle ID - protected function getToken($p8) - { - $keyfile = 'AuthKey_AABBCC1234.p8'; # <- Your AuthKey file - $keyid = '4LFF7TZ6Q5'; # <- Your Key ID - $teamid = 'YJHMCSNREU'; # <- Your Team ID (see Developer Portal) - $bundleid = 'test2.appwrite.io'; # <- Your Bundle ID - $url = 'https://api.development.push.apple.com'; # <- development url, or use http://api.push.apple.com for production environment - $token = 'e2c48ed32ef9b018........'; # <- Device Token + $headers = [ + 'alg' => 'ES256', + 'kid' => $keyID, + ]; - function base64($data) { - return rtrim(strtr(base64_encode(json_encode($data)), '+/', '-_'), '='); - } + $claims = [ + 'iss' => $teamID, + 'iat' => time(), + 'exp' => time() + 86400*180, + 'aud' => 'https://appleid.apple.com', + 'sub' => $bundleID, + ]; - $message = '{"aps":{"alert":"Hi there!","sound":"default"}}'; + $pkey = openssl_pkey_get_private($keyfile); - $key = openssl_pkey_get_private('file://'.$keyfile); - - $header = ['alg'=>'ES256', 'kid'=>$keyid]; - $claims = ['iss'=>$teamid, 'iat'=>time()]; - - $header_encoded = base64($header); - $claims_encoded = base64($claims); + $payload = $this->encode(json_encode($headers)).'.'.$this->encode(json_encode($claims)); $signature = ''; - openssl_sign($header_encoded . '.' . $claims_encoded, $signature, $key, 'sha256'); - $jwt = $header_encoded . '.' . $claims_encoded . '.' . base64_encode($signature); + $success = openssl_sign($payload, $signature, $pkey, OPENSSL_ALGO_SHA256); + + if (!$success) return ''; + + return $payload.'.'.$this->encode($this->fromDER($signature, 64)); + } + + /** + * @param string $data + */ + protected function encode($data) + { + return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($data)); + } + + /** + * @param string $data + */ + protected function retrievePositiveInteger(string $data): string + { + while ('00' === mb_substr($data, 0, 2, '8bit') && mb_substr($data, 2, 2, '8bit') > '7f') { + $data = mb_substr($data, 2, null, '8bit'); + } + + return $data; + } + + /** + * @param string $der + * @param int $partLength + */ + protected function fromDER(string $der, int $partLength):string + { + $hex = \unpack('H*', $der)[1]; + + if ('30' !== \mb_substr($hex, 0, 2, '8bit')) { // SEQUENCE + throw new \RuntimeException(); + } + + if ('81' === \mb_substr($hex, 2, 2, '8bit')) { // LENGTH > 128 + $hex = \mb_substr($hex, 6, null, '8bit'); + } + else { + $hex = \mb_substr($hex, 4, null, '8bit'); + } + if ('02' !== \mb_substr($hex, 0, 2, '8bit')) { // INTEGER + throw new \RuntimeException(); + } + + $Rl = \hexdec(\mb_substr($hex, 2, 2, '8bit')); + $R = $this->retrievePositiveInteger(\mb_substr($hex, 4, $Rl * 2, '8bit')); + $R = \str_pad($R, $partLength, '0', STR_PAD_LEFT); + + $hex = \mb_substr($hex, 4 + $Rl * 2, null, '8bit'); + + if ('02' !== \mb_substr($hex, 0, 2, '8bit')) { // INTEGER + throw new \RuntimeException(); + } + + $Sl = \hexdec(\mb_substr($hex, 2, 2, '8bit')); + $S = $this->retrievePositiveInteger(\mb_substr($hex, 4, $Sl * 2, '8bit')); + $S = \str_pad($S, $partLength, '0', STR_PAD_LEFT); + + return \pack('H*', $R.$S); } } From 14e6c61ed99f1b91c7331ead9a270137cbce66f9 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Fri, 29 May 2020 15:46:26 +0300 Subject: [PATCH 03/20] Updated docs --- CHANGES.md | 1 + app/config/providers.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 39a1046378..32c0765f69 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,7 @@ ## Features +- New OAuth adapter for sign-in with Apple - New route in Locale API to fetch list of languages ## Bug Fixes diff --git a/app/config/providers.php b/app/config/providers.php index 1a6b067ec8..0d788de3fe 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -87,7 +87,7 @@ return [ 'developers' => 'https://developer.apple.com/', 'icon' => 'icon-apple', 'enabled' => true, - 'form' => 'apple.phtml', + 'form' => 'apple.phtml', // Perperation for adding ability to customized OAuth UI forms, currently handled hardcoded. 'mock' => false, ], 'amazon' => [ From 116521f4a7ef6e76a688f9ff7b005d83c89b1fbf Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Fri, 29 May 2020 19:43:59 +0300 Subject: [PATCH 04/20] Added beta tag --- app/config/providers.php | 25 +++++++++++++++++++++++++ app/views/console/users/index.phtml | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/config/providers.php b/app/config/providers.php index 0d788de3fe..7eb5113d96 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -6,6 +6,7 @@ return [ 'icon' => 'icon-bitbucket', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'facebook' => [ @@ -13,6 +14,7 @@ return [ 'icon' => 'icon-facebook', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'github' => [ @@ -20,6 +22,7 @@ return [ 'icon' => 'icon-github-circled', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'gitlab' => [ @@ -27,6 +30,7 @@ return [ 'icon' => 'icon-gitlab', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'google' => [ @@ -34,12 +38,14 @@ return [ 'icon' => 'icon-google', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], // 'instagram' => [ // 'developers' => 'https://www.instagram.com/developer/', // 'icon' => 'icon-instagram', // 'enabled' => false, + // 'beta' => false, // 'mock' => false, // ], 'microsoft' => [ @@ -47,12 +53,14 @@ return [ 'icon' => 'icon-windows', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], // 'twitter' => [ // 'developers' => 'https://developer.twitter.com/', // 'icon' => 'icon-twitter', // 'enabled' => false, + // 'beta' => false, // 'mock' => false, // ], 'linkedin' => [ @@ -60,6 +68,7 @@ return [ 'icon' => 'icon-linkedin', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'slack' => [ @@ -67,6 +76,7 @@ return [ 'icon' => 'icon-slack', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'dropbox' => [ @@ -74,6 +84,7 @@ return [ 'icon' => 'icon-dropbox', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'salesforce' => [ @@ -81,6 +92,7 @@ return [ 'icon' => 'icon-salesforce', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'apple' => [ @@ -88,6 +100,7 @@ return [ 'icon' => 'icon-apple', 'enabled' => true, 'form' => 'apple.phtml', // Perperation for adding ability to customized OAuth UI forms, currently handled hardcoded. + 'beta' => true, 'mock' => false, ], 'amazon' => [ @@ -95,6 +108,7 @@ return [ 'icon' => 'icon-amazon', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'vk' => [ @@ -102,6 +116,7 @@ return [ 'icon' => 'icon-vk', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'discord' => [ @@ -109,6 +124,7 @@ return [ 'icon' => 'icon-discord', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'twitch' => [ @@ -116,6 +132,7 @@ return [ 'icon' => 'icon-twitch', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'spotify' => [ @@ -123,6 +140,7 @@ return [ 'icon' => 'icon-spotify', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'yahoo' => [ @@ -130,6 +148,7 @@ return [ 'icon' => 'icon-yahoo', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'yandex' => [ @@ -137,6 +156,7 @@ return [ 'icon' => 'icon-yandex', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false, ], 'twitter' => [ @@ -144,6 +164,7 @@ return [ 'icon' => 'icon-twitter', 'enabled' => false, 'form' => false, + 'beta' => false, 'mock' => false ], 'paypal' => [ @@ -151,6 +172,7 @@ return [ 'icon' => 'icon-paypal', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false ], 'bitly' => [ @@ -158,6 +180,7 @@ return [ 'icon' => 'icon-bitly', 'enabled' => true, 'form' => false, + 'beta' => false, 'mock' => false ], // Keep Last @@ -165,6 +188,8 @@ return [ 'developers' => 'https://appwrite.io', 'icon' => 'icon-appwrite', 'enabled' => true, + 'form' => false, + 'beta' => false, 'mock' => true, ] ]; diff --git a/app/views/console/users/index.phtml b/app/views/console/users/index.phtml index 18b8b0537d..b7fbdf053a 100644 --- a/app/views/console/users/index.phtml +++ b/app/views/console/users/index.phtml @@ -338,6 +338,7 @@ $providers = $this->getParam('providers', []); if (isset($data['enabled']) && !$data['enabled']) { continue; } if (isset($data['mock']) && $data['mock']) { continue; } $form = (isset($data['form'])) ? $data['form'] : false; + $beta = (isset($data['beta'])) ? $data['beta'] : false; ?>
  • diff --git a/app/views/console/database/document.phtml b/app/views/console/database/document.phtml index cd3d4cbb03..ed12ff38be 100644 --- a/app/views/console/database/document.phtml +++ b/app/views/console/database/document.phtml @@ -254,9 +254,11 @@ $collections = []; - +
    Add * for wildcard access
    + +
    Add * for wildcard access
    diff --git a/app/views/console/storage/index.phtml b/app/views/console/storage/index.phtml index c950415a38..8cb0d4ea59 100644 --- a/app/views/console/storage/index.phtml +++ b/app/views/console/storage/index.phtml @@ -17,7 +17,7 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0);
  • Files

    - - - + + +
    Add * for wildcard access
    - - + + +
    Add * for wildcard access
    Date: Sat, 30 May 2020 14:52:36 +0300 Subject: [PATCH 06/20] Updated Ruby SDK --- app/config/platforms.php | 2 +- app/sdks/server-ruby/appwrite.gemspec | 2 +- .../docs/examples/avatars/get-browser.md | 4 ++-- .../docs/examples/avatars/get-credit-card.md | 4 ++-- .../docs/examples/avatars/get-favicon.md | 4 ++-- .../docs/examples/avatars/get-flag.md | 4 ++-- .../docs/examples/avatars/get-image.md | 4 ++-- .../docs/examples/avatars/get-q-r.md | 4 ++-- .../examples/database/create-collection.md | 4 ++-- .../docs/examples/database/create-document.md | 4 ++-- .../examples/database/delete-collection.md | 4 ++-- .../docs/examples/database/delete-document.md | 4 ++-- .../examples/database/get-collection-logs.md | 4 ++-- .../docs/examples/database/get-collection.md | 4 ++-- .../docs/examples/database/get-document.md | 4 ++-- .../examples/database/list-collections.md | 4 ++-- .../docs/examples/database/list-documents.md | 4 ++-- .../examples/database/update-collection.md | 4 ++-- .../docs/examples/database/update-document.md | 4 ++-- .../docs/examples/health/get-anti-virus.md | 4 ++-- .../docs/examples/health/get-cache.md | 4 ++-- .../docs/examples/health/get-d-b.md | 4 ++-- .../examples/health/get-queue-certificates.md | 4 ++-- .../examples/health/get-queue-functions.md | 4 ++-- .../docs/examples/health/get-queue-logs.md | 4 ++-- .../docs/examples/health/get-queue-tasks.md | 4 ++-- .../docs/examples/health/get-queue-usage.md | 4 ++-- .../examples/health/get-queue-webhooks.md | 4 ++-- .../docs/examples/health/get-storage-local.md | 4 ++-- .../docs/examples/health/get-time.md | 4 ++-- .../server-ruby/docs/examples/health/get.md | 4 ++-- .../docs/examples/locale/get-continents.md | 4 ++-- .../docs/examples/locale/get-countries-e-u.md | 4 ++-- .../examples/locale/get-countries-phones.md | 4 ++-- .../docs/examples/locale/get-countries.md | 4 ++-- .../docs/examples/locale/get-currencies.md | 4 ++-- .../server-ruby/docs/examples/locale/get.md | 4 ++-- .../docs/examples/storage/create-file.md | 4 ++-- .../docs/examples/storage/delete-file.md | 4 ++-- .../examples/storage/get-file-download.md | 4 ++-- .../docs/examples/storage/get-file-preview.md | 4 ++-- .../docs/examples/storage/get-file-view.md | 4 ++-- .../docs/examples/storage/get-file.md | 4 ++-- .../docs/examples/storage/list-files.md | 4 ++-- .../docs/examples/storage/update-file.md | 4 ++-- .../docs/examples/teams/create-membership.md | 4 ++-- .../server-ruby/docs/examples/teams/create.md | 4 ++-- .../docs/examples/teams/delete-membership.md | 4 ++-- .../server-ruby/docs/examples/teams/delete.md | 4 ++-- .../docs/examples/teams/get-memberships.md | 4 ++-- .../server-ruby/docs/examples/teams/get.md | 4 ++-- .../server-ruby/docs/examples/teams/list.md | 4 ++-- .../server-ruby/docs/examples/teams/update.md | 4 ++-- .../server-ruby/docs/examples/users/create.md | 4 ++-- .../docs/examples/users/delete-session.md | 4 ++-- .../docs/examples/users/delete-sessions.md | 4 ++-- .../docs/examples/users/get-logs.md | 4 ++-- .../docs/examples/users/get-prefs.md | 4 ++-- .../docs/examples/users/get-sessions.md | 4 ++-- .../server-ruby/docs/examples/users/get.md | 4 ++-- .../server-ruby/docs/examples/users/list.md | 4 ++-- .../docs/examples/users/update-prefs.md | 4 ++-- .../docs/examples/users/update-status.md | 4 ++-- app/sdks/server-ruby/lib/appwrite/client.rb | 2 +- .../lib/appwrite/services/database.rb | 24 +++++++++---------- .../lib/appwrite/services/storage.rb | 12 +++++----- .../lib/appwrite/services/teams.rb | 14 +++++------ .../lib/appwrite/services/users.rb | 18 +++++++------- composer.lock | 4 ++-- 69 files changed, 161 insertions(+), 161 deletions(-) diff --git a/app/config/platforms.php b/app/config/platforms.php index ed1bf24a0c..f05dcde39b 100644 --- a/app/config/platforms.php +++ b/app/config/platforms.php @@ -184,7 +184,7 @@ return [ [ 'key' => 'ruby', 'name' => 'Ruby', - 'version' => '1.0.10', + 'version' => '1.0.11', 'url' => 'https://github.com/appwrite/sdk-for-ruby', 'enabled' => true, 'beta' => true, diff --git a/app/sdks/server-ruby/appwrite.gemspec b/app/sdks/server-ruby/appwrite.gemspec index 66c69d18df..f550cecf9f 100644 --- a/app/sdks/server-ruby/appwrite.gemspec +++ b/app/sdks/server-ruby/appwrite.gemspec @@ -1,7 +1,7 @@ Gem::Specification.new do |s| s.name = 'appwrite' - s.version = '1.0.10' + s.version = '1.0.11' s.summary = "Appwrite is an open-source backend as a service server that abstract and simplify complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the Ruby SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)" diff --git a/app/sdks/server-ruby/docs/examples/avatars/get-browser.md b/app/sdks/server-ruby/docs/examples/avatars/get-browser.md index 95f8acd0d8..fc0cfc913f 100644 --- a/app/sdks/server-ruby/docs/examples/avatars/get-browser.md +++ b/app/sdks/server-ruby/docs/examples/avatars/get-browser.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; avatars = Appwrite::Avatars.new(client); diff --git a/app/sdks/server-ruby/docs/examples/avatars/get-credit-card.md b/app/sdks/server-ruby/docs/examples/avatars/get-credit-card.md index 30c7853dfa..b3763f0846 100644 --- a/app/sdks/server-ruby/docs/examples/avatars/get-credit-card.md +++ b/app/sdks/server-ruby/docs/examples/avatars/get-credit-card.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; avatars = Appwrite::Avatars.new(client); diff --git a/app/sdks/server-ruby/docs/examples/avatars/get-favicon.md b/app/sdks/server-ruby/docs/examples/avatars/get-favicon.md index 4a564d63f3..2ee4e75789 100644 --- a/app/sdks/server-ruby/docs/examples/avatars/get-favicon.md +++ b/app/sdks/server-ruby/docs/examples/avatars/get-favicon.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; avatars = Appwrite::Avatars.new(client); diff --git a/app/sdks/server-ruby/docs/examples/avatars/get-flag.md b/app/sdks/server-ruby/docs/examples/avatars/get-flag.md index 5bd18a837a..2e2f01f0f9 100644 --- a/app/sdks/server-ruby/docs/examples/avatars/get-flag.md +++ b/app/sdks/server-ruby/docs/examples/avatars/get-flag.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; avatars = Appwrite::Avatars.new(client); diff --git a/app/sdks/server-ruby/docs/examples/avatars/get-image.md b/app/sdks/server-ruby/docs/examples/avatars/get-image.md index 8a6043afb6..682d6bf9df 100644 --- a/app/sdks/server-ruby/docs/examples/avatars/get-image.md +++ b/app/sdks/server-ruby/docs/examples/avatars/get-image.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; avatars = Appwrite::Avatars.new(client); diff --git a/app/sdks/server-ruby/docs/examples/avatars/get-q-r.md b/app/sdks/server-ruby/docs/examples/avatars/get-q-r.md index d291c7411e..f145425ca2 100644 --- a/app/sdks/server-ruby/docs/examples/avatars/get-q-r.md +++ b/app/sdks/server-ruby/docs/examples/avatars/get-q-r.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; avatars = Appwrite::Avatars.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/create-collection.md b/app/sdks/server-ruby/docs/examples/database/create-collection.md index 281efc99b1..0317ed9f05 100644 --- a/app/sdks/server-ruby/docs/examples/database/create-collection.md +++ b/app/sdks/server-ruby/docs/examples/database/create-collection.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/create-document.md b/app/sdks/server-ruby/docs/examples/database/create-document.md index c90850e278..0101c746b4 100644 --- a/app/sdks/server-ruby/docs/examples/database/create-document.md +++ b/app/sdks/server-ruby/docs/examples/database/create-document.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/delete-collection.md b/app/sdks/server-ruby/docs/examples/database/delete-collection.md index 8d37aa9901..b91c369da7 100644 --- a/app/sdks/server-ruby/docs/examples/database/delete-collection.md +++ b/app/sdks/server-ruby/docs/examples/database/delete-collection.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/delete-document.md b/app/sdks/server-ruby/docs/examples/database/delete-document.md index 7baec53db9..6548ec2946 100644 --- a/app/sdks/server-ruby/docs/examples/database/delete-document.md +++ b/app/sdks/server-ruby/docs/examples/database/delete-document.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/get-collection-logs.md b/app/sdks/server-ruby/docs/examples/database/get-collection-logs.md index 7a970fad0c..65938d1af9 100644 --- a/app/sdks/server-ruby/docs/examples/database/get-collection-logs.md +++ b/app/sdks/server-ruby/docs/examples/database/get-collection-logs.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/get-collection.md b/app/sdks/server-ruby/docs/examples/database/get-collection.md index 73c2e63852..1e54e94c10 100644 --- a/app/sdks/server-ruby/docs/examples/database/get-collection.md +++ b/app/sdks/server-ruby/docs/examples/database/get-collection.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/get-document.md b/app/sdks/server-ruby/docs/examples/database/get-document.md index 9d204b35c5..3040b82c03 100644 --- a/app/sdks/server-ruby/docs/examples/database/get-document.md +++ b/app/sdks/server-ruby/docs/examples/database/get-document.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/list-collections.md b/app/sdks/server-ruby/docs/examples/database/list-collections.md index 12e4f47b8d..ec15fe3b08 100644 --- a/app/sdks/server-ruby/docs/examples/database/list-collections.md +++ b/app/sdks/server-ruby/docs/examples/database/list-collections.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/list-documents.md b/app/sdks/server-ruby/docs/examples/database/list-documents.md index 8c417470c8..fa33f10ccf 100644 --- a/app/sdks/server-ruby/docs/examples/database/list-documents.md +++ b/app/sdks/server-ruby/docs/examples/database/list-documents.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/update-collection.md b/app/sdks/server-ruby/docs/examples/database/update-collection.md index 74326a5e66..3ecfbdb4ab 100644 --- a/app/sdks/server-ruby/docs/examples/database/update-collection.md +++ b/app/sdks/server-ruby/docs/examples/database/update-collection.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/database/update-document.md b/app/sdks/server-ruby/docs/examples/database/update-document.md index 01c70a48ad..492d4f3edc 100644 --- a/app/sdks/server-ruby/docs/examples/database/update-document.md +++ b/app/sdks/server-ruby/docs/examples/database/update-document.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; database = Appwrite::Database.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-anti-virus.md b/app/sdks/server-ruby/docs/examples/health/get-anti-virus.md index 0d3e91df0c..0c83a06cf8 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-anti-virus.md +++ b/app/sdks/server-ruby/docs/examples/health/get-anti-virus.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-cache.md b/app/sdks/server-ruby/docs/examples/health/get-cache.md index c09575805d..6f51fb6e00 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-cache.md +++ b/app/sdks/server-ruby/docs/examples/health/get-cache.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-d-b.md b/app/sdks/server-ruby/docs/examples/health/get-d-b.md index f57769c3ad..4bb00577a7 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-d-b.md +++ b/app/sdks/server-ruby/docs/examples/health/get-d-b.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-queue-certificates.md b/app/sdks/server-ruby/docs/examples/health/get-queue-certificates.md index d5917ba9c5..f758b7c3a4 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-queue-certificates.md +++ b/app/sdks/server-ruby/docs/examples/health/get-queue-certificates.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-queue-functions.md b/app/sdks/server-ruby/docs/examples/health/get-queue-functions.md index a24825a28d..653607f79d 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-queue-functions.md +++ b/app/sdks/server-ruby/docs/examples/health/get-queue-functions.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-queue-logs.md b/app/sdks/server-ruby/docs/examples/health/get-queue-logs.md index 165553e0be..c6751f7f91 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-queue-logs.md +++ b/app/sdks/server-ruby/docs/examples/health/get-queue-logs.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-queue-tasks.md b/app/sdks/server-ruby/docs/examples/health/get-queue-tasks.md index a2c869a15a..c6da38832e 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-queue-tasks.md +++ b/app/sdks/server-ruby/docs/examples/health/get-queue-tasks.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-queue-usage.md b/app/sdks/server-ruby/docs/examples/health/get-queue-usage.md index 50ebbc0524..ed81452d86 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-queue-usage.md +++ b/app/sdks/server-ruby/docs/examples/health/get-queue-usage.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-queue-webhooks.md b/app/sdks/server-ruby/docs/examples/health/get-queue-webhooks.md index 19d0427ddb..9e55ab1d87 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-queue-webhooks.md +++ b/app/sdks/server-ruby/docs/examples/health/get-queue-webhooks.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-storage-local.md b/app/sdks/server-ruby/docs/examples/health/get-storage-local.md index 899d610d02..09c47ae437 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-storage-local.md +++ b/app/sdks/server-ruby/docs/examples/health/get-storage-local.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get-time.md b/app/sdks/server-ruby/docs/examples/health/get-time.md index 244c5d5f03..3d72794e93 100644 --- a/app/sdks/server-ruby/docs/examples/health/get-time.md +++ b/app/sdks/server-ruby/docs/examples/health/get-time.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/health/get.md b/app/sdks/server-ruby/docs/examples/health/get.md index 3014c571e4..9496c31b36 100644 --- a/app/sdks/server-ruby/docs/examples/health/get.md +++ b/app/sdks/server-ruby/docs/examples/health/get.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; health = Appwrite::Health.new(client); diff --git a/app/sdks/server-ruby/docs/examples/locale/get-continents.md b/app/sdks/server-ruby/docs/examples/locale/get-continents.md index 2548d110a8..92f38922e1 100644 --- a/app/sdks/server-ruby/docs/examples/locale/get-continents.md +++ b/app/sdks/server-ruby/docs/examples/locale/get-continents.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; locale = Appwrite::Locale.new(client); diff --git a/app/sdks/server-ruby/docs/examples/locale/get-countries-e-u.md b/app/sdks/server-ruby/docs/examples/locale/get-countries-e-u.md index c809b8ead3..b83125d4a6 100644 --- a/app/sdks/server-ruby/docs/examples/locale/get-countries-e-u.md +++ b/app/sdks/server-ruby/docs/examples/locale/get-countries-e-u.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; locale = Appwrite::Locale.new(client); diff --git a/app/sdks/server-ruby/docs/examples/locale/get-countries-phones.md b/app/sdks/server-ruby/docs/examples/locale/get-countries-phones.md index 2830af2de8..728a1b3cdc 100644 --- a/app/sdks/server-ruby/docs/examples/locale/get-countries-phones.md +++ b/app/sdks/server-ruby/docs/examples/locale/get-countries-phones.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; locale = Appwrite::Locale.new(client); diff --git a/app/sdks/server-ruby/docs/examples/locale/get-countries.md b/app/sdks/server-ruby/docs/examples/locale/get-countries.md index 82deb00f78..54975db928 100644 --- a/app/sdks/server-ruby/docs/examples/locale/get-countries.md +++ b/app/sdks/server-ruby/docs/examples/locale/get-countries.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; locale = Appwrite::Locale.new(client); diff --git a/app/sdks/server-ruby/docs/examples/locale/get-currencies.md b/app/sdks/server-ruby/docs/examples/locale/get-currencies.md index de5270ac25..4e39b435e1 100644 --- a/app/sdks/server-ruby/docs/examples/locale/get-currencies.md +++ b/app/sdks/server-ruby/docs/examples/locale/get-currencies.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; locale = Appwrite::Locale.new(client); diff --git a/app/sdks/server-ruby/docs/examples/locale/get.md b/app/sdks/server-ruby/docs/examples/locale/get.md index b41e8eede0..b390d505c4 100644 --- a/app/sdks/server-ruby/docs/examples/locale/get.md +++ b/app/sdks/server-ruby/docs/examples/locale/get.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; locale = Appwrite::Locale.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/create-file.md b/app/sdks/server-ruby/docs/examples/storage/create-file.md index 5192d9a512..b044e35b86 100644 --- a/app/sdks/server-ruby/docs/examples/storage/create-file.md +++ b/app/sdks/server-ruby/docs/examples/storage/create-file.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/delete-file.md b/app/sdks/server-ruby/docs/examples/storage/delete-file.md index b334ffa485..1aa67b3537 100644 --- a/app/sdks/server-ruby/docs/examples/storage/delete-file.md +++ b/app/sdks/server-ruby/docs/examples/storage/delete-file.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/get-file-download.md b/app/sdks/server-ruby/docs/examples/storage/get-file-download.md index ec5a16ca51..777c565d06 100644 --- a/app/sdks/server-ruby/docs/examples/storage/get-file-download.md +++ b/app/sdks/server-ruby/docs/examples/storage/get-file-download.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/get-file-preview.md b/app/sdks/server-ruby/docs/examples/storage/get-file-preview.md index c361984126..48be3a044e 100644 --- a/app/sdks/server-ruby/docs/examples/storage/get-file-preview.md +++ b/app/sdks/server-ruby/docs/examples/storage/get-file-preview.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/get-file-view.md b/app/sdks/server-ruby/docs/examples/storage/get-file-view.md index ba2e850f0f..a3dc012098 100644 --- a/app/sdks/server-ruby/docs/examples/storage/get-file-view.md +++ b/app/sdks/server-ruby/docs/examples/storage/get-file-view.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/get-file.md b/app/sdks/server-ruby/docs/examples/storage/get-file.md index 394bb8c3ae..203a4dff7c 100644 --- a/app/sdks/server-ruby/docs/examples/storage/get-file.md +++ b/app/sdks/server-ruby/docs/examples/storage/get-file.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/list-files.md b/app/sdks/server-ruby/docs/examples/storage/list-files.md index 86111f2186..a148da78f9 100644 --- a/app/sdks/server-ruby/docs/examples/storage/list-files.md +++ b/app/sdks/server-ruby/docs/examples/storage/list-files.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/storage/update-file.md b/app/sdks/server-ruby/docs/examples/storage/update-file.md index 05a1fe5e6c..36d5049816 100644 --- a/app/sdks/server-ruby/docs/examples/storage/update-file.md +++ b/app/sdks/server-ruby/docs/examples/storage/update-file.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; storage = Appwrite::Storage.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/create-membership.md b/app/sdks/server-ruby/docs/examples/teams/create-membership.md index c6f1a2d254..fc0a249361 100644 --- a/app/sdks/server-ruby/docs/examples/teams/create-membership.md +++ b/app/sdks/server-ruby/docs/examples/teams/create-membership.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/create.md b/app/sdks/server-ruby/docs/examples/teams/create.md index 1f83e92ed9..d7f9c2f8c0 100644 --- a/app/sdks/server-ruby/docs/examples/teams/create.md +++ b/app/sdks/server-ruby/docs/examples/teams/create.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/delete-membership.md b/app/sdks/server-ruby/docs/examples/teams/delete-membership.md index 1f8df2b91b..545cacc51f 100644 --- a/app/sdks/server-ruby/docs/examples/teams/delete-membership.md +++ b/app/sdks/server-ruby/docs/examples/teams/delete-membership.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/delete.md b/app/sdks/server-ruby/docs/examples/teams/delete.md index 593893dfe6..d28907f741 100644 --- a/app/sdks/server-ruby/docs/examples/teams/delete.md +++ b/app/sdks/server-ruby/docs/examples/teams/delete.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/get-memberships.md b/app/sdks/server-ruby/docs/examples/teams/get-memberships.md index 3a217a0001..013d952afc 100644 --- a/app/sdks/server-ruby/docs/examples/teams/get-memberships.md +++ b/app/sdks/server-ruby/docs/examples/teams/get-memberships.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/get.md b/app/sdks/server-ruby/docs/examples/teams/get.md index 408e5844bf..1dd4918a12 100644 --- a/app/sdks/server-ruby/docs/examples/teams/get.md +++ b/app/sdks/server-ruby/docs/examples/teams/get.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/list.md b/app/sdks/server-ruby/docs/examples/teams/list.md index 4f275e9ffc..c0cd72a362 100644 --- a/app/sdks/server-ruby/docs/examples/teams/list.md +++ b/app/sdks/server-ruby/docs/examples/teams/list.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/teams/update.md b/app/sdks/server-ruby/docs/examples/teams/update.md index f696cff943..b7e87a8e09 100644 --- a/app/sdks/server-ruby/docs/examples/teams/update.md +++ b/app/sdks/server-ruby/docs/examples/teams/update.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; teams = Appwrite::Teams.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/create.md b/app/sdks/server-ruby/docs/examples/users/create.md index 7477cd8883..0a152ac366 100644 --- a/app/sdks/server-ruby/docs/examples/users/create.md +++ b/app/sdks/server-ruby/docs/examples/users/create.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/delete-session.md b/app/sdks/server-ruby/docs/examples/users/delete-session.md index bb5fe3020b..149c7d9293 100644 --- a/app/sdks/server-ruby/docs/examples/users/delete-session.md +++ b/app/sdks/server-ruby/docs/examples/users/delete-session.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/delete-sessions.md b/app/sdks/server-ruby/docs/examples/users/delete-sessions.md index c2e641eed1..3f02e08dd1 100644 --- a/app/sdks/server-ruby/docs/examples/users/delete-sessions.md +++ b/app/sdks/server-ruby/docs/examples/users/delete-sessions.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/get-logs.md b/app/sdks/server-ruby/docs/examples/users/get-logs.md index 87c8316b44..695a77ad27 100644 --- a/app/sdks/server-ruby/docs/examples/users/get-logs.md +++ b/app/sdks/server-ruby/docs/examples/users/get-logs.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/get-prefs.md b/app/sdks/server-ruby/docs/examples/users/get-prefs.md index 2e0e076ee2..4a0761e283 100644 --- a/app/sdks/server-ruby/docs/examples/users/get-prefs.md +++ b/app/sdks/server-ruby/docs/examples/users/get-prefs.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/get-sessions.md b/app/sdks/server-ruby/docs/examples/users/get-sessions.md index 3bf468a976..52f37a4609 100644 --- a/app/sdks/server-ruby/docs/examples/users/get-sessions.md +++ b/app/sdks/server-ruby/docs/examples/users/get-sessions.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/get.md b/app/sdks/server-ruby/docs/examples/users/get.md index e5dca85e99..562ac958c3 100644 --- a/app/sdks/server-ruby/docs/examples/users/get.md +++ b/app/sdks/server-ruby/docs/examples/users/get.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/list.md b/app/sdks/server-ruby/docs/examples/users/list.md index 5243c36e77..096ce859e3 100644 --- a/app/sdks/server-ruby/docs/examples/users/list.md +++ b/app/sdks/server-ruby/docs/examples/users/list.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/update-prefs.md b/app/sdks/server-ruby/docs/examples/users/update-prefs.md index 4993d2eb6f..2bb2d42e16 100644 --- a/app/sdks/server-ruby/docs/examples/users/update-prefs.md +++ b/app/sdks/server-ruby/docs/examples/users/update-prefs.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/docs/examples/users/update-status.md b/app/sdks/server-ruby/docs/examples/users/update-status.md index 533ad38848..088ee380d8 100644 --- a/app/sdks/server-ruby/docs/examples/users/update-status.md +++ b/app/sdks/server-ruby/docs/examples/users/update-status.md @@ -4,8 +4,8 @@ client = Appwrite::Client.new() client .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint - .setproject('5df5acd0d48c2') # Your project ID - .setkey('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key + .set_project('5df5acd0d48c2') # Your project ID + .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key ; users = Appwrite::Users.new(client); diff --git a/app/sdks/server-ruby/lib/appwrite/client.rb b/app/sdks/server-ruby/lib/appwrite/client.rb index 0620069f74..2cd09d52fe 100644 --- a/app/sdks/server-ruby/lib/appwrite/client.rb +++ b/app/sdks/server-ruby/lib/appwrite/client.rb @@ -20,7 +20,7 @@ module Appwrite @headers = { 'content-type' => '', 'user-agent' => RUBY_PLATFORM + ':ruby-' + RUBY_VERSION, - 'x-sdk-version' => 'appwrite:ruby:1.0.10' + 'x-sdk-version' => 'appwrite:ruby:1.0.11' } @endpoint = 'https://appwrite.io/v1'; end diff --git a/app/sdks/server-ruby/lib/appwrite/services/database.rb b/app/sdks/server-ruby/lib/appwrite/services/database.rb index 8bb9c3bbb4..d8efcc34e1 100644 --- a/app/sdks/server-ruby/lib/appwrite/services/database.rb +++ b/app/sdks/server-ruby/lib/appwrite/services/database.rb @@ -33,7 +33,7 @@ module Appwrite def get_collection(collection_id:) path = '/database/collections/{collectionId}' - .gsub('{collection_id}', collection_id) + .gsub('{collectionId}', collection_id) params = { } @@ -45,7 +45,7 @@ module Appwrite def update_collection(collection_id:, name:, read:, write:, rules: []) path = '/database/collections/{collectionId}' - .gsub('{collection_id}', collection_id) + .gsub('{collectionId}', collection_id) params = { 'name': name, @@ -61,7 +61,7 @@ module Appwrite def delete_collection(collection_id:) path = '/database/collections/{collectionId}' - .gsub('{collection_id}', collection_id) + .gsub('{collectionId}', collection_id) params = { } @@ -73,7 +73,7 @@ module Appwrite def list_documents(collection_id:, filters: [], offset: 0, limit: 50, order_field: '$id', order_type: 'ASC', order_cast: 'string', search: '', first: 0, last: 0) path = '/database/collections/{collectionId}/documents' - .gsub('{collection_id}', collection_id) + .gsub('{collectionId}', collection_id) params = { 'filters': filters, @@ -94,7 +94,7 @@ module Appwrite def create_document(collection_id:, data:, read:, write:, parent_document: '', parent_property: '', parent_property_type: 'assign') path = '/database/collections/{collectionId}/documents' - .gsub('{collection_id}', collection_id) + .gsub('{collectionId}', collection_id) params = { 'data': data, @@ -112,8 +112,8 @@ module Appwrite def get_document(collection_id:, document_id:) path = '/database/collections/{collectionId}/documents/{documentId}' - .gsub('{collection_id}', collection_id) - .gsub('{document_id}', document_id) + .gsub('{collectionId}', collection_id) + .gsub('{documentId}', document_id) params = { } @@ -125,8 +125,8 @@ module Appwrite def update_document(collection_id:, document_id:, data:, read:, write:) path = '/database/collections/{collectionId}/documents/{documentId}' - .gsub('{collection_id}', collection_id) - .gsub('{document_id}', document_id) + .gsub('{collectionId}', collection_id) + .gsub('{documentId}', document_id) params = { 'data': data, @@ -141,8 +141,8 @@ module Appwrite def delete_document(collection_id:, document_id:) path = '/database/collections/{collectionId}/documents/{documentId}' - .gsub('{collection_id}', collection_id) - .gsub('{document_id}', document_id) + .gsub('{collectionId}', collection_id) + .gsub('{documentId}', document_id) params = { } @@ -154,7 +154,7 @@ module Appwrite def get_collection_logs(collection_id:) path = '/database/collections/{collectionId}/logs' - .gsub('{collection_id}', collection_id) + .gsub('{collectionId}', collection_id) params = { } diff --git a/app/sdks/server-ruby/lib/appwrite/services/storage.rb b/app/sdks/server-ruby/lib/appwrite/services/storage.rb index 2fe1a5762f..0e99a2b0d5 100644 --- a/app/sdks/server-ruby/lib/appwrite/services/storage.rb +++ b/app/sdks/server-ruby/lib/appwrite/services/storage.rb @@ -32,7 +32,7 @@ module Appwrite def get_file(file_id:) path = '/storage/files/{fileId}' - .gsub('{file_id}', file_id) + .gsub('{fileId}', file_id) params = { } @@ -44,7 +44,7 @@ module Appwrite def update_file(file_id:, read:, write:) path = '/storage/files/{fileId}' - .gsub('{file_id}', file_id) + .gsub('{fileId}', file_id) params = { 'read': read, @@ -58,7 +58,7 @@ module Appwrite def delete_file(file_id:) path = '/storage/files/{fileId}' - .gsub('{file_id}', file_id) + .gsub('{fileId}', file_id) params = { } @@ -70,7 +70,7 @@ module Appwrite def get_file_download(file_id:) path = '/storage/files/{fileId}/download' - .gsub('{file_id}', file_id) + .gsub('{fileId}', file_id) params = { } @@ -82,7 +82,7 @@ module Appwrite def get_file_preview(file_id:, width: 0, height: 0, quality: 100, background: '', output: '') path = '/storage/files/{fileId}/preview' - .gsub('{file_id}', file_id) + .gsub('{fileId}', file_id) params = { 'width': width, @@ -99,7 +99,7 @@ module Appwrite def get_file_view(file_id:, as: '') path = '/storage/files/{fileId}/view' - .gsub('{file_id}', file_id) + .gsub('{fileId}', file_id) params = { 'as': as diff --git a/app/sdks/server-ruby/lib/appwrite/services/teams.rb b/app/sdks/server-ruby/lib/appwrite/services/teams.rb index de6079b6f8..0e677476d2 100644 --- a/app/sdks/server-ruby/lib/appwrite/services/teams.rb +++ b/app/sdks/server-ruby/lib/appwrite/services/teams.rb @@ -31,7 +31,7 @@ module Appwrite def get(team_id:) path = '/teams/{teamId}' - .gsub('{team_id}', team_id) + .gsub('{teamId}', team_id) params = { } @@ -43,7 +43,7 @@ module Appwrite def update(team_id:, name:) path = '/teams/{teamId}' - .gsub('{team_id}', team_id) + .gsub('{teamId}', team_id) params = { 'name': name @@ -56,7 +56,7 @@ module Appwrite def delete(team_id:) path = '/teams/{teamId}' - .gsub('{team_id}', team_id) + .gsub('{teamId}', team_id) params = { } @@ -68,7 +68,7 @@ module Appwrite def get_memberships(team_id:) path = '/teams/{teamId}/memberships' - .gsub('{team_id}', team_id) + .gsub('{teamId}', team_id) params = { } @@ -80,7 +80,7 @@ module Appwrite def create_membership(team_id:, email:, roles:, url:, name: '') path = '/teams/{teamId}/memberships' - .gsub('{team_id}', team_id) + .gsub('{teamId}', team_id) params = { 'email': email, @@ -96,8 +96,8 @@ module Appwrite def delete_membership(team_id:, invite_id:) path = '/teams/{teamId}/memberships/{inviteId}' - .gsub('{team_id}', team_id) - .gsub('{invite_id}', invite_id) + .gsub('{teamId}', team_id) + .gsub('{inviteId}', invite_id) params = { } diff --git a/app/sdks/server-ruby/lib/appwrite/services/users.rb b/app/sdks/server-ruby/lib/appwrite/services/users.rb index ae790c9403..f75434bd1a 100644 --- a/app/sdks/server-ruby/lib/appwrite/services/users.rb +++ b/app/sdks/server-ruby/lib/appwrite/services/users.rb @@ -32,7 +32,7 @@ module Appwrite def get(user_id:) path = '/users/{userId}' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { } @@ -44,7 +44,7 @@ module Appwrite def get_logs(user_id:) path = '/users/{userId}/logs' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { } @@ -56,7 +56,7 @@ module Appwrite def get_prefs(user_id:) path = '/users/{userId}/prefs' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { } @@ -68,7 +68,7 @@ module Appwrite def update_prefs(user_id:, prefs:) path = '/users/{userId}/prefs' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { 'prefs': prefs @@ -81,7 +81,7 @@ module Appwrite def get_sessions(user_id:) path = '/users/{userId}/sessions' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { } @@ -93,7 +93,7 @@ module Appwrite def delete_sessions(user_id:) path = '/users/{userId}/sessions' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { } @@ -105,8 +105,8 @@ module Appwrite def delete_session(user_id:, session_id:) path = '/users/{userId}/sessions/{sessionId}' - .gsub('{user_id}', user_id) - .gsub('{session_id}', session_id) + .gsub('{userId}', user_id) + .gsub('{sessionId}', session_id) params = { } @@ -118,7 +118,7 @@ module Appwrite def update_status(user_id:, status:) path = '/users/{userId}/status' - .gsub('{user_id}', user_id) + .gsub('{userId}', user_id) params = { 'status': status diff --git a/composer.lock b/composer.lock index 940945a9af..eeb5424337 100644 --- a/composer.lock +++ b/composer.lock @@ -1741,7 +1741,7 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator", - "reference": "ca18c48a3252e1e2e7c7d823871cc4f3453b6ee0" + "reference": "a1672098ecc6a08cc400314e373b0d1cd5885f79" }, "require": { "ext-curl": "*", @@ -1771,7 +1771,7 @@ } ], "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", - "time": "2020-05-29T18:54:37+00:00" + "time": "2020-05-30T11:38:32+00:00" }, { "name": "doctrine/instantiator", From 595047ee3b6d96c07b96c228c2f9042b2c365925 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sat, 30 May 2020 16:26:39 +0300 Subject: [PATCH 07/20] Updated docs --- docs/references/database/create-document.md | 2 +- docs/services/database.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/references/database/create-document.md b/docs/references/database/create-document.md index d2ab330bc5..37cb7fb93a 100644 --- a/docs/references/database/create-document.md +++ b/docs/references/database/create-document.md @@ -1 +1 @@ -Create a new Document. \ No newline at end of file +Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](/docs/server/database?sdk=nodejs#createCollection) API or directly from your database console. \ No newline at end of file diff --git a/docs/services/database.md b/docs/services/database.md index 63f9a9d13f..433db9363c 100644 --- a/docs/services/database.md +++ b/docs/services/database.md @@ -1,7 +1,7 @@ -The Database service allows you to create structured collections of documents, query and filter lists of documents, and manage an advanced set of read and write access. +The Database service allows you to create structured collections of documents, query and filter lists of documents, and manage an advanced set of read and write access permissions. -All the data in the database service is stored in structured JSON documents. The Appwrite database service also allows you to nest child documents in documents and use advanced filters to both search and query the database just like you would with a classic graph database. +All the data in the database service is stored in structured JSON documents. The Appwrite database service also allows you to nest child documents in parent documents and use advanced filters to both search and query the database just like you would with a classic graph database. Each database document structure in your project is defined using the Appwrite [collection rules](/docs/rules). The collections rules help you ensure all your user-submitted data is validated and stored according to the collection structure. -Using Appwrite permissions architecture, you can assign read or write access to each document in your project for either a specific user, team, user role, or even grant it with public access. You can learn more about [how Appwrite handles permissions and access control](/docs/permissions). \ No newline at end of file +Using Appwrite permissions architecture, you can assign read or write access to each document in your project for either a specific user, team, user role, or even grant it with public access (*). You can learn more about [how Appwrite handles permissions and access control](/docs/permissions). \ No newline at end of file From 06142c99947c41e28fe7be9e216d567876e81b4e Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sat, 30 May 2020 20:19:52 +0300 Subject: [PATCH 08/20] Updated changelog --- CHANGES.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index b04bc6b673..f919060317 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,9 +1,12 @@ +# Version 0.7.0 (NOT-RELEASED) + +- New route in Locale API to fetch list of languages + # Version 0.6.2 (PRE-RELEASE) ## Features - New OAuth adapter for sign-in with Apple -- New route in Locale API to fetch list of languages ## Bug Fixes From 7e3ad084112e1cf73f5051410baa2e8c75ed68cb Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sat, 30 May 2020 20:32:16 +0300 Subject: [PATCH 09/20] Updated stable version --- app/init.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/init.php b/app/init.php index 98df754775..62508f44df 100644 --- a/app/init.php +++ b/app/init.php @@ -33,7 +33,7 @@ const APP_USERAGENT = APP_NAME.'-Server v%s. Please report abuse at %s'; const APP_MODE_ADMIN = 'admin'; const APP_PAGING_LIMIT = 15; const APP_CACHE_BUSTER = 125; -const APP_VERSION_STABLE = '0.6.1'; +const APP_VERSION_STABLE = '0.6.2'; const APP_STORAGE_UPLOADS = '/storage/uploads'; const APP_STORAGE_CACHE = '/storage/cache'; const APP_STORAGE_CERTIFICATES = '/storage/certificates'; From 61c54f2a12afd78a9da60498dbaf5c64b7399e28 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sun, 31 May 2020 01:11:02 +0300 Subject: [PATCH 10/20] Fixed tooltip --- app/views/console/home/index.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/console/home/index.phtml b/app/views/console/home/index.phtml index 3d9eb0e25e..b9b59cec93 100644 --- a/app/views/console/home/index.phtml +++ b/app/views/console/home/index.phtml @@ -41,7 +41,7 @@ $graph = $this->getParam('graph', false);
    N/A
    -
    Requests
    +
    Requests
    Last 30 days
    From e71a0f4be537310c5496f73bcfbf6bed9cec1405 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sun, 31 May 2020 01:24:05 +0300 Subject: [PATCH 11/20] Updated docs --- app/controllers/api/account.php | 14 +++++++------- app/controllers/api/projects.php | 2 +- app/controllers/api/users.php | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 6e7d437fd1..282a5d9a22 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -57,7 +57,7 @@ $utopia->post('/v1/account') ->label('sdk.description', '/docs/references/account/create.md') ->label('abuse-limit', 10) ->param('email', '', function () { return new Email(); }, 'User email.') - ->param('password', '', function () { return new Password(); }, 'User password.') + ->param('password', '', function () { return new Password(); }, 'User password. Must be between 6 to 32 chars.') ->param('name', '', function () { return new Text(100); }, 'User name.', true) ->action( function ($email, $password, $name) use ($register, $request, $response, $audit, $projectDB, $project, $webhook, $oauth2Keys) { @@ -158,7 +158,7 @@ $utopia->post('/v1/account/sessions') ->label('abuse-limit', 10) ->label('abuse-key', 'url:{url},email:{param-email}') ->param('email', '', function () { return new Email(); }, 'User email.') - ->param('password', '', function () { return new Password(); }, 'User password.') + ->param('password', '', function () { return new Password(); }, 'User password. Must be between 6 to 32 chars.') ->action( function ($email, $password) use ($response, $request, $projectDB, $audit, $webhook) { $protocol = Config::getParam('protocol'); @@ -745,8 +745,8 @@ $utopia->patch('/v1/account/password') ->label('sdk.namespace', 'account') ->label('sdk.method', 'updatePassword') ->label('sdk.description', '/docs/references/account/update-password.md') - ->param('password', '', function () { return new Password(); }, 'New user password.') - ->param('oldPassword', '', function () { return new Password(); }, 'Old user password.') + ->param('password', '', function () { return new Password(); }, 'New user password. Must be between 6 to 32 chars.') + ->param('oldPassword', '', function () { return new Password(); }, 'Old user password. Must be between 6 to 32 chars.') ->action( function ($password, $oldPassword) use ($response, $user, $projectDB, $audit, $oauth2Keys) { if (!Auth::passwordVerify($oldPassword, $user->getAttribute('password'))) { // Double check user password @@ -788,7 +788,7 @@ $utopia->patch('/v1/account/email') ->label('sdk.method', 'updateEmail') ->label('sdk.description', '/docs/references/account/update-email.md') ->param('email', '', function () { return new Email(); }, 'User email.') - ->param('password', '', function () { return new Password(); }, 'User password.') + ->param('password', '', function () { return new Password(); }, 'User password. Must be between 6 to 32 chars.') ->action( function ($email, $password) use ($response, $user, $projectDB, $audit, $oauth2Keys) { if (!Auth::passwordVerify($password, $user->getAttribute('password'))) { // Double check user password @@ -1144,8 +1144,8 @@ $utopia->put('/v1/account/recovery') ->label('abuse-key', 'url:{url},userId:{param-userId}') ->param('userId', '', function () { return new UID(); }, 'User account UID address.') ->param('secret', '', function () { return new Text(256); }, 'Valid reset token.') - ->param('password', '', function () { return new Password(); }, 'New password.') - ->param('passwordAgain', '', function () {return new Password(); }, 'New password again.') + ->param('password', '', function () { return new Password(); }, 'New password. Must be between 6 to 32 chars.') + ->param('passwordAgain', '', function () {return new Password(); }, 'New password again. Must be between 6 to 32 chars.') ->action( function ($userId, $secret, $password, $passwordAgain) use ($response, $projectDB, $audit) { if ($password !== $passwordAgain) { diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 7cd14e583c..2ffc3a0233 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -400,7 +400,7 @@ $utopia->delete('/v1/projects/:projectId') ->label('sdk.namespace', 'projects') ->label('sdk.method', 'delete') ->param('projectId', '', function () { return new UID(); }, 'Project unique ID.') - ->param('password', '', function () { return new UID(); }, 'Your user password for confirmation.') + ->param('password', '', function () { return new UID(); }, 'Your user password for confirmation. Must be between 6 to 32 chars.') ->action( function ($projectId, $password) use ($response, $consoleDB, $user, $deletes) { if (!Auth::passwordVerify($password, $user->getAttribute('password'))) { // Double check user password diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 3c0c6a40ca..12090ecc66 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -31,7 +31,7 @@ $utopia->post('/v1/users') ->label('sdk.method', 'create') ->label('sdk.description', '/docs/references/users/create-user.md') ->param('email', '', function () { return new Email(); }, 'User email.') - ->param('password', '', function () { return new Password(); }, 'User password.') + ->param('password', '', function () { return new Password(); }, 'User password. Must be between 6 to 32 chars.') ->param('name', '', function () { return new Text(100); }, 'User name.', true) ->action( function ($email, $password, $name) use ($response, $projectDB) { From 994773bbf201652872574078db60c390c30d2e36 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sun, 31 May 2020 08:44:11 +0300 Subject: [PATCH 12/20] Updated deps --- composer.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.lock b/composer.lock index eeb5424337..6b23ee63e8 100644 --- a/composer.lock +++ b/composer.lock @@ -1779,16 +1779,16 @@ "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de" + "reference": "a390fde13fc9bc2ffb73340bb8f07201a8e85af8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/6a1471ddbf2f448b35f3a8e390c903435e6dd5de", - "reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a390fde13fc9bc2ffb73340bb8f07201a8e85af8", + "reference": "a390fde13fc9bc2ffb73340bb8f07201a8e85af8", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -1827,7 +1827,7 @@ "constructor", "instantiate" ], - "time": "2019-12-23T19:18:31+00:00" + "time": "2020-05-30T16:47:47+00:00" }, { "name": "matthiasmullie/minify", From aadac941c6dcbbb7c5a08c8b17f966fe9bbc707d Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sun, 31 May 2020 08:49:30 +0300 Subject: [PATCH 13/20] Removed required fields --- app/views/console/storage/index.phtml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/console/storage/index.phtml b/app/views/console/storage/index.phtml index 8cb0d4ea59..6fdd782898 100644 --- a/app/views/console/storage/index.phtml +++ b/app/views/console/storage/index.phtml @@ -44,11 +44,11 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0);
    (Max file size allowed: )
    - +
    Add * for wildcard access
    - +
    Add * for wildcard access