diff --git a/package.json b/package.json index 0f5aa4e18c..57c05163d6 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "commander": "2.9.0", "deepcopy": "0.6.3", "express": "4.14.0", + "firebase-admin": "^4.0.3", "intersect": "1.0.1", "lodash": "4.17.2", "lru-cache": "4.0.2", diff --git a/src/authDataManager/firebase.js b/src/authDataManager/firebase.js new file mode 100644 index 0000000000..e536af8c1b --- /dev/null +++ b/src/authDataManager/firebase.js @@ -0,0 +1,43 @@ +// Helper functions for accessing the qq Graph API. +var Parse = require('parse/node').Parse; +var admin = require("firebase-admin"); + + +var firebaseServiceAccount = process.env.FIREBASE_SERVICE_ACCOUNT; +if (firebaseServiceAccount != null) { + admin.initializeApp({ + credential: admin.credential.cert(require(firebaseServiceAccount)) + }); +} + + +// Returns a promise that fulfills iff this user id is valid. +function validateAuthData(authData) { + if (firebaseServiceAccount == null || firebaseServiceAccount == "") { + throw new Parse.Error(Parse.Error.FILE_READ_ERROR, "Firebase service account file not exists"); + } + + return admin.auth().verifyIdToken(authData.access_token) + .then(function (decodedToken) { + console.log(decodedToken) + if (uid == null || uid == "") { + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, "Firebase user not found"); + } + return; + }).catch(function (error) { + console.log(error) + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, error.message); + }); + +} + +// Returns a promise that fulfills if this app id is valid. +function validateAppId() { + return Promise.resolve(); +} + + +module.exports = { + validateAppId, + validateAuthData +}; diff --git a/src/authDataManager/index.js b/src/authDataManager/index.js index 5fe0f32b60..36466514f1 100755 --- a/src/authDataManager/index.js +++ b/src/authDataManager/index.js @@ -13,6 +13,7 @@ let vkontakte = require("./vkontakte"); let qq = require("./qq"); let wechat = require("./wechat"); let weibo = require("./weibo"); +let firebase = require("./firebase"); let anonymous = { validateAuthData: () => { @@ -39,7 +40,8 @@ let providers = { vkontakte, qq, wechat, - weibo + weibo, + firebase } module.exports = function(oauthOptions = {}, enableAnonymousUsers = true) {