From fcb24af8d940beac9bea28251b85af62cb34eb68 Mon Sep 17 00:00:00 2001 From: eldadfux Date: Sat, 6 Jul 2019 12:47:48 +0300 Subject: [PATCH] Updated Linkedin OAuth provider to support Linkedin V2 API --- app/sdks/js/package.json | 2 +- app/sdks/js/src/sdk.js | 239 +++++++++++++----------------------- app/sdks/js/src/sdk.min.js | 10 +- app/tasks/sdks.php | 6 +- composer.lock | 8 +- src/Auth/OAuth/LinkedIn.php | 25 ++-- 6 files changed, 114 insertions(+), 176 deletions(-) diff --git a/app/sdks/js/package.json b/app/sdks/js/package.json index e32839351c..7231fea721 100644 --- a/app/sdks/js/package.json +++ b/app/sdks/js/package.json @@ -2,7 +2,7 @@ "name": "appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)", - "version": "v1.0.1", + "version": "v1.0.4", "license": "BSD-3-Clause", "main": "src/sdk.js", "repository": { diff --git a/app/sdks/js/src/sdk.js b/app/sdks/js/src/sdk.js index 9f5f72a4c1..0ffffa6538 100644 --- a/app/sdks/js/src/sdk.js +++ b/app/sdks/js/src/sdk.js @@ -132,7 +132,7 @@ globalParams.push({key: key, value: value}); }; - addGlobalHeader('x-sdk-version', 'appwrite:javascript:v1.0.1'); + addGlobalHeader('x-sdk-version', 'appwrite:javascript:v1.0.4'); addGlobalHeader('content-type', ''); /** @@ -268,7 +268,7 @@ let form = document.createElement('form'); form.setAttribute('method', method); - form.setAttribute('action', url); + form.setAttribute('action', config.endpoint + url); for(let key in params) { if(params.hasOwnProperty(key)) { @@ -294,8 +294,7 @@ * Get currently logged in user data as JSON object. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ get: function() { let path = '/account'; @@ -311,8 +310,7 @@ * Delete currently logged in user account. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ delete: function() { let path = '/account'; @@ -333,8 +331,7 @@ * @param {string} email * @param {string} password * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updateEmail: function(email, password) { if(email === undefined) { throw new Error('Missing required parameter: "email"'); @@ -361,8 +358,7 @@ * * @param {string} name * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updateName: function(name) { if(name === undefined) { throw new Error('Missing required parameter: "name"'); @@ -386,8 +382,7 @@ * @param {string} password * @param {string} oldPassword * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updatePassword: function(password, oldPassword) { if(password === undefined) { throw new Error('Missing required parameter: "password"'); @@ -413,8 +408,7 @@ * Get currently logged in user preferences key-value object. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getPrefs: function() { let path = '/account/prefs'; @@ -432,8 +426,7 @@ * * @param {string} prefs * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updatePrefs: function(prefs) { if(prefs === undefined) { throw new Error('Missing required parameter: "prefs"'); @@ -455,8 +448,7 @@ * log returns user IP address, location and date and time of log. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getSecurity: function() { let path = '/account/security'; @@ -473,8 +465,7 @@ * devices. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getSessions: function() { let path = '/account/sessions'; @@ -510,8 +501,7 @@ * @param {string} success * @param {string} failure * @throws {Error} - * @return {Array} - */ + * @return {null} */ login: function(email, password, success = '', failure = '') { if(email === undefined) { throw new Error('Missing required parameter: "email"'); @@ -523,14 +513,12 @@ let path = '/auth/login'; - return http - .post(path, {'content-type': 'application/json'}, - { - 'email': email, - 'password': password, - 'success': success, - 'failure': failure - }); + return iframe('post', path, {project: config.project, + 'email': email, + 'password': password, + 'success': success, + 'failure': failure + }); }, /** @@ -541,8 +529,7 @@ * session secret cookie. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ logout: function() { let path = '/auth/logout'; @@ -561,8 +548,7 @@ * * @param {string} userId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ logoutBySession: function(userId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -589,8 +575,7 @@ * @param {string} email * @param {string} redirect * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ recovery: function(email, redirect) { if(email === undefined) { throw new Error('Missing required parameter: "email"'); @@ -628,8 +613,7 @@ * @param {string} passwordA * @param {string} passwordB * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ recoveryReset: function(userId, token, passwordA, passwordB) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -690,8 +674,7 @@ * @param {string} success * @param {string} failure * @throws {Error} - * @return {Array} - */ + * @return {null} */ register: function(email, password, redirect, name = '', success = '', failure = '') { if(email === undefined) { throw new Error('Missing required parameter: "email"'); @@ -707,16 +690,14 @@ let path = '/auth/register'; - return http - .post(path, {'content-type': 'application/json'}, - { - 'email': email, - 'password': password, - 'name': name, - 'redirect': redirect, - 'success': success, - 'failure': failure - }); + return iframe('post', path, {project: config.project, + 'email': email, + 'password': password, + 'name': name, + 'redirect': redirect, + 'success': success, + 'failure': failure + }); }, /** @@ -730,8 +711,7 @@ * @param {string} userId * @param {string} token * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ confirm: function(userId, token) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -765,8 +745,7 @@ * * @param {string} redirect * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ confirmResend: function(redirect) { if(redirect === undefined) { throw new Error('Missing required parameter: "redirect"'); @@ -790,8 +769,7 @@ * @param {string} code * @param {string} state * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ oauthCallback: function(projectId, provider, code, state = '') { if(projectId === undefined) { throw new Error('Missing required parameter: "projectId"'); @@ -823,8 +801,7 @@ * @param {string} success * @param {string} failure * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ oauth: function(provider, success = '', failure = '') { if(provider === undefined) { throw new Error('Missing required parameter: "provider"'); @@ -856,8 +833,7 @@ * @param {number} height * @param {number} quality * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getBrowser: function(code, width = 100, height = 100, quality = 100) { if(code === undefined) { throw new Error('Missing required parameter: "code"'); @@ -887,8 +863,7 @@ * @param {number} height * @param {number} quality * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getCreditCard: function(code, width = 100, height = 100, quality = 100) { if(code === undefined) { throw new Error('Missing required parameter: "code"'); @@ -913,8 +888,7 @@ * * @param {string} url * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getFavicon: function(url) { if(url === undefined) { throw new Error('Missing required parameter: "url"'); @@ -941,8 +915,7 @@ * @param {number} height * @param {number} quality * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getFlag: function(code, width = 100, height = 100, quality = 100) { if(code === undefined) { throw new Error('Missing required parameter: "code"'); @@ -970,8 +943,7 @@ * @param {number} margin * @param {number} download * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getQR: function(text, size = 400, margin = 1, download = 0) { if(text === undefined) { throw new Error('Missing required parameter: "text"'); @@ -1005,8 +977,7 @@ * @param {number} offset * @param {string} orderType * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ listCollections: function(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/database'; @@ -1030,8 +1001,7 @@ * @param {array} write * @param {array} rules * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createCollection: function(name, read = [], write = [], rules = []) { if(name === undefined) { throw new Error('Missing required parameter: "name"'); @@ -1068,8 +1038,7 @@ * @param {number} first * @param {number} last * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ listDocuments: function(collectionId, filters = [], offset = 0, limit = 50, orderField = '$uid', orderType = 'ASC', orderCast = 'string', search = '', first = 0, last = 0) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1105,8 +1074,7 @@ * @param {string} parentProperty * @param {string} parentPropertyType * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createDocument: function(collectionId, data, read = [], write = [], parentDocument = '', parentProperty = '', parentPropertyType = 'assign') { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1141,8 +1109,7 @@ * @param {array} write * @param {array} rules * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updateCollection: function(collectionId, name, read = [], write = [], rules = []) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1172,8 +1139,7 @@ * * @param {string} collectionId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteCollection: function(collectionId) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1196,8 +1162,7 @@ * @param {string} collectionId * @param {string} documentId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getDocument: function(collectionId, documentId) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1225,8 +1190,7 @@ * @param {array} read * @param {array} write * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updateDocument: function(collectionId, documentId, data, read = [], write = []) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1261,8 +1225,7 @@ * @param {string} collectionId * @param {string} documentId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteDocument: function(collectionId, documentId) { if(collectionId === undefined) { throw new Error('Missing required parameter: "collectionId"'); @@ -1292,8 +1255,7 @@ * supported language. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getLocale: function() { let path = '/locale'; @@ -1310,8 +1272,7 @@ * supported language. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getCountries: function() { let path = '/locale/countries'; @@ -1328,8 +1289,7 @@ * locale header to get the data in supported language. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getCountriesEU: function() { let path = '/locale/countries/eu'; @@ -1346,8 +1306,7 @@ * data in supported language. * * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getCountriesPhones: function() { let path = '/locale/countries/phones'; @@ -1372,8 +1331,7 @@ * @param {number} offset * @param {string} orderType * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ listFiles: function(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/storage/files'; @@ -1399,8 +1357,7 @@ * @param {array} write * @param {string} folderId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createFile: function(files, read = [], write = [], folderId = '') { if(files === undefined) { throw new Error('Missing required parameter: "files"'); @@ -1426,8 +1383,7 @@ * * @param {string} fileId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getFile: function(fileId) { if(fileId === undefined) { throw new Error('Missing required parameter: "fileId"'); @@ -1449,8 +1405,7 @@ * * @param {string} fileId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteFile: function(fileId) { if(fileId === undefined) { throw new Error('Missing required parameter: "fileId"'); @@ -1473,8 +1428,7 @@ * * @param {string} fileId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getFileDownload: function(fileId) { if(fileId === undefined) { throw new Error('Missing required parameter: "fileId"'); @@ -1503,8 +1457,7 @@ * @param {string} background * @param {string} output * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getFilePreview: function(fileId, width = 0, height = 0, quality = 100, background = '', output = '') { if(fileId === undefined) { throw new Error('Missing required parameter: "fileId"'); @@ -1532,8 +1485,7 @@ * @param {string} fileId * @param {string} as * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getFileView: function(fileId, as = '') { if(fileId === undefined) { throw new Error('Missing required parameter: "fileId"'); @@ -1563,8 +1515,7 @@ * @param {number} offset * @param {string} orderType * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ listTeams: function(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/teams'; @@ -1589,8 +1540,7 @@ * @param {string} name * @param {array} roles * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createTeam: function(name, roles = ["owner"]) { if(name === undefined) { throw new Error('Missing required parameter: "name"'); @@ -1614,8 +1564,7 @@ * * @param {string} teamId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getTeam: function(teamId) { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1638,8 +1587,7 @@ * @param {string} teamId * @param {string} name * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updateTeam: function(teamId, name) { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1666,8 +1614,7 @@ * * @param {string} teamId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteTeam: function(teamId) { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1689,8 +1636,7 @@ * * @param {string} teamId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getTeamMembers: function(teamId) { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1727,8 +1673,7 @@ * @param {string} redirect * @param {string} name * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createTeamMembership: function(teamId, email, roles, redirect, name = '') { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1767,8 +1712,7 @@ * @param {string} teamId * @param {string} inviteId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteTeamMembership: function(teamId, inviteId) { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1796,8 +1740,7 @@ * @param {string} inviteId * @param {string} redirect * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createTeamMembershipResend: function(teamId, inviteId, redirect) { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1846,8 +1789,7 @@ * @param {string} success * @param {string} failure * @throws {Error} - * @return {Array} - */ + * @return {null} */ updateTeamMembershipStatus: function(teamId, inviteId, userId, secret, success = '', failure = '') { if(teamId === undefined) { throw new Error('Missing required parameter: "teamId"'); @@ -1867,14 +1809,12 @@ let path = '/teams/{teamId}/memberships/{inviteId}/status'.replace(new RegExp('{teamId}', 'g'), teamId).replace(new RegExp('{inviteId}', 'g'), inviteId); - return http - .patch(path, {'content-type': 'application/json'}, - { - 'userId': userId, - 'secret': secret, - 'success': success, - 'failure': failure - }); + return iframe('patch', path, {project: config.project, + 'userId': userId, + 'secret': secret, + 'success': success, + 'failure': failure + }); } }; @@ -1891,8 +1831,7 @@ * @param {number} offset * @param {string} orderType * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ listUsers: function(search = '', limit = 25, offset = 0, orderType = 'ASC') { let path = '/users'; @@ -1915,8 +1854,7 @@ * @param {string} password * @param {string} name * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ createUser: function(email, password, name = '') { if(email === undefined) { throw new Error('Missing required parameter: "email"'); @@ -1944,8 +1882,7 @@ * * @param {string} userId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getUser: function(userId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -1966,8 +1903,7 @@ * * @param {string} userId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getUserLogs: function(userId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -1988,8 +1924,7 @@ * * @param {string} userId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getUserPrefs: function(userId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -2010,8 +1945,7 @@ * * @param {string} userId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ getUserSessions: function(userId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -2032,8 +1966,7 @@ * * @param {string} userId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteUserSessions: function(userId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -2055,8 +1988,7 @@ * @param {string} userId * @param {string} sessionId * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ deleteUsersSession: function(userId, sessionId) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); @@ -2083,8 +2015,7 @@ * @param {string} userId * @param {string} status * @throws {Error} - * @return {Array} - */ + * @return {Promise} */ updateUserStatus: function(userId, status) { if(userId === undefined) { throw new Error('Missing required parameter: "userId"'); diff --git a/app/sdks/js/src/sdk.min.js b/app/sdks/js/src/sdk.min.js index 0222c283b0..0f67ddc541 100644 --- a/app/sdks/js/src/sdk.min.js +++ b/app/sdks/js/src/sdk.min.js @@ -1,5 +1,5 @@ (function(window){window.Appwrite=function(){let config={endpoint:'https://appwrite.test/v1',project:'',key:'',locale:'',mode:'',};let setEndpoint=function(endpoint){config.endpoint=endpoint;return this};let setProject=function(value){http.addGlobalHeader('X-Appwrite-Project',value);config.project=value;return this};let setKey=function(value){http.addGlobalHeader('X-Appwrite-Key',value);config.key=value;return this};let setLocale=function(value){http.addGlobalHeader('X-Appwrite-Locale',value);config.locale=value;return this};let setMode=function(value){http.addGlobalHeader('X-Appwrite-Mode',value);config.mode=value;return this};let http=function(document){let globalParams=[],globalHeaders=[];let addParam=function(url,param,value){let a=document.createElement('a'),regex=/(?:\?|&|&)+([^=]+)(?:=([^&]*))*/g;let match,str=[];a.href=url;param=encodeURIComponent(param);while(match=regex.exec(a.search))if(param!==match[1])str.push(match[1]+(match[2]?"="+match[2]:""));str.push(param+(value?"="+encodeURIComponent(value):""));a.search=str.join("&");return a.href};let buildQuery=function(params){let str=[];for(let p in params){if(params.hasOwnProperty(p)){str.push(encodeURIComponent(p)+"="+encodeURIComponent(params[p]))}} -return str.join("&")};let addGlobalHeader=function(key,value){globalHeaders[key]={key:key.toLowerCase(),value:value.toLowerCase()}};let addGlobalParam=function(key,value){globalParams.push({key:key,value:value})};addGlobalHeader('x-sdk-version','appwrite:javascript:v1.0.1');addGlobalHeader('content-type','');let call=function(method,path,headers={},params={},progress=null){let i;path=config.endpoint+path;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name')} +return str.join("&")};let addGlobalHeader=function(key,value){globalHeaders[key]={key:key.toLowerCase(),value:value.toLowerCase()}};let addGlobalParam=function(key,value){globalParams.push({key:key,value:value})};addGlobalHeader('x-sdk-version','appwrite:javascript:v1.0.4');addGlobalHeader('content-type','');let call=function(method,path,headers={},params={},progress=null){let i;path=config.endpoint+path;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name')} if(typeof path!=='string'){throw new Error('var path must be of type string')} if(typeof headers!=='object'){throw new Error('var headers must be of type object')} for(i=0;i=request.status){let data=request.response;let contentType=this.getResponseHeader('content-type');contentType=contentType.substring(0,contentType.indexOf(';'));switch(contentType){case 'application/json':data=JSON.parse(data);break} resolve(data)}else{reject(new Error(request.statusText))}};if(progress){request.addEventListener('progress',progress);request.upload.addEventListener('progress',progress,!1)} -request.onerror=function(){reject(new Error("Network Error"))};request.send(params)})};return{'get':function(path,headers={},params={}){return call('GET',path+((params.length>0)?'?'+buildQuery(params):''),headers,{})},'post':function(path,headers={},params={},progress=null){return call('POST',path,headers,params,progress)},'put':function(path,headers={},params={},progress=null){return call('PUT',headers,params,progress)},'patch':function(path,headers={},params={},progress=null){return call('PATCH',path,headers,params,progress)},'delete':function(path,headers={},params={},progress=null){return call('DELETE',path,headers,params,progress)},'addGlobalParam':addGlobalParam,'addGlobalHeader':addGlobalHeader}}(window.document);let iframe=function(method,url,params){let form=document.createElement('form');form.setAttribute('method',method);form.setAttribute('action',url);for(let key in params){if(params.hasOwnProperty(key)){let hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField)}} +request.onerror=function(){reject(new Error("Network Error"))};request.send(params)})};return{'get':function(path,headers={},params={}){return call('GET',path+((params.length>0)?'?'+buildQuery(params):''),headers,{})},'post':function(path,headers={},params={},progress=null){return call('POST',path,headers,params,progress)},'put':function(path,headers={},params={},progress=null){return call('PUT',headers,params,progress)},'patch':function(path,headers={},params={},progress=null){return call('PATCH',path,headers,params,progress)},'delete':function(path,headers={},params={},progress=null){return call('DELETE',path,headers,params,progress)},'addGlobalParam':addGlobalParam,'addGlobalHeader':addGlobalHeader}}(window.document);let iframe=function(method,url,params){let form=document.createElement('form');form.setAttribute('method',method);form.setAttribute('action',config.endpoint+url);for(let key in params){if(params.hasOwnProperty(key)){let hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField)}} document.body.appendChild(form);return form.submit()};let account={get:function(){let path='/account';return http.get(path,{'content-type':'application/json'},{})},delete:function(){let path='/account';return http.delete(path,{'content-type':'application/json'},{})},updateEmail:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} let path='/account/email';return http.patch(path,{'content-type':'application/json'},{'email':email,'password':password})},updateName:function(name){if(name===undefined){throw new Error('Missing required parameter: "name"')} @@ -19,7 +19,7 @@ if(oldPassword===undefined){throw new Error('Missing required parameter: "oldPas let path='/account/password';return http.patch(path,{'content-type':'application/json'},{'password':password,'old-password':oldPassword})},getPrefs:function(){let path='/account/prefs';return http.get(path,{'content-type':'application/json'},{})},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"')} let path='/account/prefs';return http.patch(path,{'content-type':'application/json'},{'prefs':prefs})},getSecurity:function(){let path='/account/security';return http.get(path,{'content-type':'application/json'},{})},getSessions:function(){let path='/account/sessions';return http.get(path,{'content-type':'application/json'},{})}};let auth={login:function(email,password,success='',failure=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} -let path='/auth/login';return http.post(path,{'content-type':'application/json'},{'email':email,'password':password,'success':success,'failure':failure})},logout:function(){let path='/auth/logout';return http.delete(path,{'content-type':'application/json'},{})},logoutBySession:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/auth/login';return iframe('post',path,{project:config.project,'email':email,'password':password,'success':success,'failure':failure})},logout:function(){let path='/auth/logout';return http.delete(path,{'content-type':'application/json'},{})},logoutBySession:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} let path='/auth/logout/{userId}'.replace(new RegExp('{userId}','g'),userId);return http.delete(path,{'content-type':'application/json'},{})},recovery:function(email,redirect){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"')} let path='/auth/recovery';return http.post(path,{'content-type':'application/json'},{'email':email,'redirect':redirect})},recoveryReset:function(userId,token,passwordA,passwordB){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} @@ -29,7 +29,7 @@ if(passwordB===undefined){throw new Error('Missing required parameter: "password let path='/auth/recovery/reset';return http.put(path,{'content-type':'application/json'},{'userId':userId,'token':token,'password-a':passwordA,'password-b':passwordB})},register:function(email,password,redirect,name='',success='',failure=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} if(redirect===undefined){throw new Error('Missing required parameter: "redirect"')} -let path='/auth/register';return http.post(path,{'content-type':'application/json'},{'email':email,'password':password,'name':name,'redirect':redirect,'success':success,'failure':failure})},confirm:function(userId,token){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} +let path='/auth/register';return iframe('post',path,{project:config.project,'email':email,'password':password,'name':name,'redirect':redirect,'success':success,'failure':failure})},confirm:function(userId,token){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(token===undefined){throw new Error('Missing required parameter: "token"')} let path='/auth/register/confirm';return http.post(path,{'content-type':'application/json'},{'userId':userId,'token':token})},confirmResend:function(redirect){if(redirect===undefined){throw new Error('Missing required parameter: "redirect"')} let path='/auth/register/confirm/resend';return http.post(path,{'content-type':'application/json'},{'redirect':redirect})},oauthCallback:function(projectId,provider,code,state=''){if(projectId===undefined){throw new Error('Missing required parameter: "projectId"')} @@ -80,7 +80,7 @@ let path='/teams/{teamId}/memberships/{inviteId}/resend'.replace(new RegExp('{te if(inviteId===undefined){throw new Error('Missing required parameter: "inviteId"')} if(userId===undefined){throw new Error('Missing required parameter: "userId"')} if(secret===undefined){throw new Error('Missing required parameter: "secret"')} -let path='/teams/{teamId}/memberships/{inviteId}/status'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);return http.patch(path,{'content-type':'application/json'},{'userId':userId,'secret':secret,'success':success,'failure':failure})}};let users={listUsers:function(search='',limit=25,offset=0,orderType='ASC'){let path='/users';return http.get(path,{'content-type':'application/json'},{'search':search,'limit':limit,'offset':offset,'orderType':orderType})},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} +let path='/teams/{teamId}/memberships/{inviteId}/status'.replace(new RegExp('{teamId}','g'),teamId).replace(new RegExp('{inviteId}','g'),inviteId);return iframe('patch',path,{project:config.project,'userId':userId,'secret':secret,'success':success,'failure':failure})}};let users={listUsers:function(search='',limit=25,offset=0,orderType='ASC'){let path='/users';return http.get(path,{'content-type':'application/json'},{'search':search,'limit':limit,'offset':offset,'orderType':orderType})},createUser:function(email,password,name=''){if(email===undefined){throw new Error('Missing required parameter: "email"')} if(password===undefined){throw new Error('Missing required parameter: "password"')} let path='/users';return http.post(path,{'content-type':'application/json'},{'email':email,'password':password,'name':name})},getUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);return http.get(path,{'content-type':'application/json'},{})},getUserLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"')} diff --git a/app/tasks/sdks.php b/app/tasks/sdks.php index 069592b82d..456107f5f6 100644 --- a/app/tasks/sdks.php +++ b/app/tasks/sdks.php @@ -33,8 +33,8 @@ $cli Console::success('Fetching API Spec'); - $spec = getSSLPage('https://appwrite.io/v1/open-api-2.json'); - $spec = getSSLPage('https://appwrite.test/v1/open-api-2.json'); + $spec = getSSLPage('https://appwrite.io/v1/open-api-2.json?extensions=1'); + $spec = getSSLPage('https://appwrite.test/v1/open-api-2.json?extensions=1'); $clients = [ 'php' => [ @@ -46,7 +46,7 @@ $cli 'gitUserName' => 'appwrite', ], 'js' => [ - 'version' => 'v1.0.1', + 'version' => 'v1.0.4', 'result' => __DIR__ . '/../sdks/js/', 'gitURL' => 'https://github.com/appwrite/sdk-for-js.git', 'gitRepo' => 'git@github.com:appwrite/sdk-for-js.git', diff --git a/composer.lock b/composer.lock index 5f05ffb95d..fbd82b254d 100644 --- a/composer.lock +++ b/composer.lock @@ -57,12 +57,12 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "e733a59a95dee3c41c608e8844ed77c2bb475deb" + "reference": "9bf19207138736f36bf690601b0ae84a9e3ae9e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/e733a59a95dee3c41c608e8844ed77c2bb475deb", - "reference": "e733a59a95dee3c41c608e8844ed77c2bb475deb", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/9bf19207138736f36bf690601b0ae84a9e3ae9e0", + "reference": "9bf19207138736f36bf690601b0ae84a9e3ae9e0", "shasum": "" }, "require": { @@ -94,7 +94,7 @@ } ], "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", - "time": "2019-07-04 23:09:04" + "time": "2019-07-05 08:05:29" }, { "name": "bacon/bacon-qr-code", diff --git a/src/Auth/OAuth/LinkedIn.php b/src/Auth/OAuth/LinkedIn.php index 9c39306433..5298995d33 100644 --- a/src/Auth/OAuth/LinkedIn.php +++ b/src/Auth/OAuth/LinkedIn.php @@ -15,8 +15,9 @@ class LinkedIn extends OAuth * @var array */ protected $scope = [ - 'r_basicprofile', + 'r_liteprofile', 'r_emailaddress', + 'w_member_social', //'r_fullprofile', //TODO request permission from linkedIn for this scope ]; @@ -102,10 +103,16 @@ class LinkedIn extends OAuth */ public function getUserEmail(string $accessToken):string { - $user = $this->getUser($accessToken); + $email = json_decode($this->request('GET', 'https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))', ['Authorization: Bearer ' . urlencode($accessToken)]), true); - if(isset($user['emailAddress'])) { - return $user['emailAddress']; + if( + isset($email['elements']) && + isset($email['elements'][0]) && + isset($email['elements'][0]['handle~']) && + isset($email['elements'][0]['handle~']['emailAddress']) + ) + { + return $email['elements'][0]['handle~']['emailAddress']; } return ''; @@ -120,12 +127,12 @@ class LinkedIn extends OAuth $user = $this->getUser($accessToken); $name = ''; - if(isset($user['firstName'])) { - $name = $user['firstName']; + if(isset($user['localizedFirstName'])) { + $name = $user['localizedFirstName']; } - if(isset($user['lastName'])) { - $name = (empty($name)) ? $user['lastName'] : $name . ' ' . $user['lastName']; + if(isset($user['localizedLastName'])) { + $name = (empty($name)) ? $user['localizedLastName'] : $name . ' ' . $user['localizedLastName']; } return $name; @@ -138,7 +145,7 @@ class LinkedIn extends OAuth protected function getUser(string $accessToken) { if(empty($this->user)) { - $this->user = json_decode($this->request('GET', 'https://api.linkedin.com/v1/people/~:(id,first-name,last-name,location,headline,industry,num-connections,picture-url,positions,summary,specialties,email-address)?format=json', ['Authorization: Bearer ' . urlencode($accessToken)]), true); + $this->user = json_decode($this->request('GET', 'https://api.linkedin.com/v2/me', ['Authorization: Bearer ' . urlencode($accessToken)]), true); } return $this->user;