diff --git a/spec/AuthenticationAdapters.spec.js b/spec/AuthenticationAdapters.spec.js index a0032248..6cc603a2 100644 --- a/spec/AuthenticationAdapters.spec.js +++ b/spec/AuthenticationAdapters.spec.js @@ -8,6 +8,7 @@ const responses = { instagram: { data: { id: 'userId' } }, janrainengage: { stat: 'ok', profile: { identifier: 'userId' } }, janraincapture: { stat: 'ok', result: 'userId' }, + line: { userId: 'userId' }, vkontakte: { response: [{ id: 'userId' }] }, google: { sub: 'userId' }, wechat: { errcode: 0 }, @@ -29,6 +30,7 @@ describe('AuthenticationProviders', function() { 'twitter', 'janrainengage', 'janraincapture', + 'line', 'vkontakte', 'qq', 'spotify', diff --git a/src/Adapters/Auth/index.js b/src/Adapters/Auth/index.js index 5cc3f734..9e415662 100755 --- a/src/Adapters/Auth/index.js +++ b/src/Adapters/Auth/index.js @@ -13,6 +13,7 @@ const spotify = require('./spotify'); const digits = require('./twitter'); // digits tokens are validated by twitter const janrainengage = require('./janrainengage'); const janraincapture = require('./janraincapture'); +const line = require('./line'); const vkontakte = require('./vkontakte'); const qq = require('./qq'); const wechat = require('./wechat'); @@ -44,6 +45,7 @@ const providers = { digits, janrainengage, janraincapture, + line, vkontakte, qq, wechat, diff --git a/src/Adapters/Auth/line.js b/src/Adapters/Auth/line.js new file mode 100644 index 00000000..e1a55849 --- /dev/null +++ b/src/Adapters/Auth/line.js @@ -0,0 +1,39 @@ +// Helper functions for accessing the line API. +var Parse = require('parse/node').Parse; +const httpsRequest = require('./httpsRequest'); + +// Returns a promise that fulfills if this user id is valid. +function validateAuthData(authData) { + return request('profile', authData.access_token).then(response => { + if (response && response.userId && response.userId === authData.id) { + return; + } + throw new Parse.Error( + Parse.Error.OBJECT_NOT_FOUND, + 'Line auth is invalid for this user.' + ); + }); +} + +// Returns a promise that fulfills iff this app id is valid. +function validateAppId() { + return Promise.resolve(); +} + +// A promisey wrapper for api requests +function request(path, access_token) { + var options = { + host: 'api.line.me', + path: '/v2/' + path, + method: 'GET', + headers: { + Authorization: 'Bearer ' + access_token, + }, + }; + return httpsRequest.get(options); +} + +module.exports = { + validateAppId: validateAppId, + validateAuthData: validateAuthData, +};