You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Assets/Editor/LambdaFunctions/LwFacebookLambdaFunction.js

148 lines
3.7 KiB
JavaScript

/*
* Copyright (c) Contributors to the Open 3D Engine Project
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
var http = require("https");
var facebookClientID = "{{facebookClientID}}";
var facebookClientSecret = "{{facebookClientSecret}}";
var facebookRedirectUrl = "{{facebookRedirectUrl}}";
var getFacebookRefreshToken = function(code, callback)
{
var options = {
hostname: 'graph.facebook.com',
path: '/v2.3/oauth/access_token',
port: 443,
method : "POST",
headers : {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
};
var body = "client_id=" + facebookClientID + "&";
body += "redirect_uri=" + facebookRedirectUrl + "&";
body += "client_secret=" + facebookClientSecret + "&";
body += "code=" + code;
console.log(body);
var req = http.request(options, function(res) {
res.setEncoding('utf8');
var store = "";
res.on('data', function (chunk) {
console.log(chunk);
store += chunk;
});
res.on('end', function() {
var response = JSON.parse(store);
var data = {
access_token : response.access_token,
expires_in : response.expires_in,
};
console.log(data);
callback(null, data);
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
callback(e);
});
});
req.write(body);
req.end();
};
var refreshAccessToken = function(refreshToken, callback)
{
var options = {
hostname: 'graph.facebook.com',
path: '/v2.3/oauth/access_token',
port: 443,
method : "POST",
headers : {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
};
var body = "grant_type=fb_exchange_token&";
body += "fb_exchange_token=" + refreshToken + "&";
body += "redirect_uri=" + facebookRedirectUrl + "&";
body += "client_id=" + facebookClientID + "&";
body += "client_secret=" + facebookClientSecret;
console.log(body);
var req = http.request(options, function(res) {
res.setEncoding('utf8');
var store = "";
res.on('data', function (chunk) {
console.log(chunk);
store += chunk;
});
res.on('end', function() {
var response = JSON.parse(store);
var data = {
access_token : response.access_token,
expires_in : response.expires_in,
refresh_token : response.refresh_token,
};
console.log(data);
callback(null, data);
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
callback(e);
});
});
req.write(body);
req.end();
};
exports.{{handlerName}} = function(event, context) {
if(typeof event.code != 'undefined') {
var code = event.code;
console.log(code);
getFacebookRefreshToken(code, function(err, data)
{
if(err)
{
context.fail(err);
}
else
{
context.succeed (data);
}
});
}
else if(typeof event.refresh_token != 'undefined') {
var refresh_token = event.refresh_token;
console.log(refresh_token);
refreshAccessToken(refresh_token, function(err, data)
{
if(err)
{
context.fail(err);
}
else
{
context.succeed (data);
}
});
}
};