const crypto = require('crypto'); const httpsRequest = require('./httpsRequest'); const Parse = require('parse/node').Parse; const graphRequest = (path) => { return httpsRequest.get(`https://graph.accountkit.com/v1.1/${path}`); }; function getRequestPath(authData, options) { const access_token = authData.access_token, appSecret = options && options.appSecret; if (appSecret) { const appsecret_proof = crypto.createHmac("sha256", appSecret).update(access_token).digest('hex'); return `me?access_token=${access_token}&appsecret_proof=${appsecret_proof}` } return `me?access_token=${access_token}`; } function validateAppId(appIds, authData, options) { if (!appIds.length) { return Promise.reject( new Parse.Error( Parse.Error.OBJECT_NOT_FOUND, 'Facebook app id for Account Kit is not configured.') ) } return graphRequest(getRequestPath(authData, options)) .then(data => { if (data && data.application && appIds.indexOf(data.application.id) != -1) { return; } throw new Parse.Error( Parse.Error.OBJECT_NOT_FOUND, 'Facebook app id for Account Kit is invalid for this user.'); }) } function validateAuthData(authData, options) { return graphRequest(getRequestPath(authData, options)) .then(data => { if (data && data.error) { throw data.error; } if (data && data.id == authData.id) { return; } throw new Parse.Error( Parse.Error.OBJECT_NOT_FOUND, 'Facebook Account Kit auth is invalid for this user.'); }) } module.exports = { validateAppId, validateAuthData };