'use strict'; // Helper functions for accessing the vkontakte API. const httpsRequest = require('./httpsRequest'); var Parse = require('parse/node').Parse; var logger = require('../../logger').default; // Returns a promise that fulfills iff this user id is valid. function validateAuthData(authData, params) { return vkOAuth2Request(params).then(function (response) { if (response && response.access_token) { return request("api.vk.com", "method/users.get?access_token=" + authData.access_token + "&v=5.8").then(function (response) { if (response && response.response && response.response.length && response.response[0].id == authData.id) { return; } throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is invalid for this user.'); }); } logger.error('Vk Auth', 'Vk appIds or appSecret is incorrect.'); throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk appIds or appSecret is incorrect.'); }); } function vkOAuth2Request(params) { return new Promise(function (resolve) { if (!params || !params.appIds || !params.appIds.length || !params.appSecret || !params.appSecret.length) { logger.error('Vk Auth', 'Vk auth is not configured. Missing appIds or appSecret.'); throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is not configured. Missing appIds or appSecret.'); } resolve(); }).then(function () { return request("oauth.vk.com", "access_token?client_id=" + params.appIds + "&client_secret=" + params.appSecret + "&v=5.59&grant_type=client_credentials"); }); } // Returns a promise that fulfills iff this app id is valid. function validateAppId() { return Promise.resolve(); } // A promisey wrapper for api requests function request(host, path) { return httpsRequest.get("https://" + host + "/" + path); } module.exports = { validateAppId: validateAppId, validateAuthData: validateAuthData };