support PhantAuth authentication (#5850)
* support PhantAuth authentication * fix spelling issues * Add test case
This commit is contained in:
committed by
Diamond Lewis
parent
d810f34cc5
commit
dfe0ff753c
@@ -13,6 +13,7 @@ const responses = {
|
|||||||
wechat: { errcode: 0 },
|
wechat: { errcode: 0 },
|
||||||
weibo: { uid: 'userId' },
|
weibo: { uid: 'userId' },
|
||||||
qq: 'callback( {"openid":"userId"} );', // yes it's like that, run eval in the client :P
|
qq: 'callback( {"openid":"userId"} );', // yes it's like that, run eval in the client :P
|
||||||
|
phantauth: { sub: 'userId' },
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('AuthenticationProviders', function() {
|
describe('AuthenticationProviders', function() {
|
||||||
@@ -33,6 +34,7 @@ describe('AuthenticationProviders', function() {
|
|||||||
'spotify',
|
'spotify',
|
||||||
'wechat',
|
'wechat',
|
||||||
'weibo',
|
'weibo',
|
||||||
|
'phantauth',
|
||||||
].map(function(providerName) {
|
].map(function(providerName) {
|
||||||
it('Should validate structure of ' + providerName, done => {
|
it('Should validate structure of ' + providerName, done => {
|
||||||
const provider = require('../lib/Adapters/Auth/' + providerName);
|
const provider = require('../lib/Adapters/Auth/' + providerName);
|
||||||
@@ -1165,3 +1167,23 @@ describe('apple signin auth adapter', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('phant auth adapter', () => {
|
||||||
|
const httpsRequest = require('../lib/Adapters/Auth/httpsRequest');
|
||||||
|
|
||||||
|
it('validateAuthData should throw for invalid auth', async () => {
|
||||||
|
const authData = {
|
||||||
|
id: 'fakeid',
|
||||||
|
access_token: 'sometoken',
|
||||||
|
};
|
||||||
|
const { adapter } = authenticationLoader.loadAuthAdapter('phantauth', {});
|
||||||
|
|
||||||
|
spyOn(httpsRequest, 'get').and.callFake(() => Promise.resolve({ sub: 'invalidID' }));
|
||||||
|
try {
|
||||||
|
await adapter.validateAuthData(authData);
|
||||||
|
fail();
|
||||||
|
} catch (e) {
|
||||||
|
expect(e.message).toBe('PhantAuth auth is invalid for this user.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const qq = require('./qq');
|
|||||||
const wechat = require('./wechat');
|
const wechat = require('./wechat');
|
||||||
const weibo = require('./weibo');
|
const weibo = require('./weibo');
|
||||||
const oauth2 = require('./oauth2');
|
const oauth2 = require('./oauth2');
|
||||||
|
const phantauth = require('./phantauth');
|
||||||
|
|
||||||
const anonymous = {
|
const anonymous = {
|
||||||
validateAuthData: () => {
|
validateAuthData: () => {
|
||||||
@@ -47,6 +48,7 @@ const providers = {
|
|||||||
qq,
|
qq,
|
||||||
wechat,
|
wechat,
|
||||||
weibo,
|
weibo,
|
||||||
|
phantauth,
|
||||||
};
|
};
|
||||||
|
|
||||||
function authDataValidator(adapter, appIds, options) {
|
function authDataValidator(adapter, appIds, options) {
|
||||||
|
|||||||
44
src/Adapters/Auth/phantauth.js
Normal file
44
src/Adapters/Auth/phantauth.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* PhantAuth was designed to simplify testing for applications using OpenID Connect
|
||||||
|
* authentication by making use of random generated users.
|
||||||
|
*
|
||||||
|
* To learn more, please go to: https://www.phantauth.net
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { Parse } = require('parse/node');
|
||||||
|
const httpsRequest = require('./httpsRequest');
|
||||||
|
|
||||||
|
// Returns a promise that fulfills if this user id is valid.
|
||||||
|
function validateAuthData(authData) {
|
||||||
|
return request('auth/userinfo', authData.access_token).then(data => {
|
||||||
|
if (data && data.sub == authData.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw new Parse.Error(
|
||||||
|
Parse.Error.OBJECT_NOT_FOUND,
|
||||||
|
'PhantAuth auth is invalid for this user.'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a promise that fulfills if this app id is valid.
|
||||||
|
function validateAppId() {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
// A promisey wrapper for api requests
|
||||||
|
function request(path, access_token) {
|
||||||
|
return httpsRequest.get({
|
||||||
|
host: 'phantauth.net',
|
||||||
|
path: '/' + path,
|
||||||
|
headers: {
|
||||||
|
Authorization: 'bearer ' + access_token,
|
||||||
|
'User-Agent': 'parse-server',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
validateAppId: validateAppId,
|
||||||
|
validateAuthData: validateAuthData,
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user