125 lines
No EOL
4 KiB
JavaScript
125 lines
No EOL
4 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const request = require('request');
|
|
const serverConfig = require("./serverConfig.json");
|
|
const CLIENT_ID = serverConfig.CLIENT_ID;
|
|
const CLIENT_SECRET = serverConfig.CLIENT_SECRET;
|
|
const REDIRECT_URI = serverConfig.REDIRECT_URI;
|
|
const TOKEN_URL = "https://www.googleapis.com/oauth2/v4/token";
|
|
|
|
router.get("/", (req, res) => {
|
|
res.send("test");
|
|
})
|
|
|
|
router.get("/canary", (req, res) => {
|
|
// Ensure that the REDIRECT_URI is up.
|
|
// Checks that NGINX is serving the right page.
|
|
var redirectUriOK;
|
|
var apiRouterOK = true; // Always true if we can get here!
|
|
request.get(
|
|
REDIRECT_URI,
|
|
{
|
|
timeout: 15000
|
|
},
|
|
(error, response) => {
|
|
redirectUriOK = !error;
|
|
|
|
// The `result` value should be a logical AND
|
|
// of all of the subsystems whose status we check.
|
|
var responseObject = {
|
|
result: redirectUriOK && apiRouterOK && lastOauthRequestTokenOK && lastOauthExchangeCodeOK,
|
|
systemStatus: {
|
|
apiRouter: {
|
|
status: apiRouterOK
|
|
},
|
|
oAuth: {
|
|
lastRequest_token: {
|
|
status: lastOauthRequestTokenOK
|
|
},
|
|
lastExchangeCode: {
|
|
status: lastOauthExchangeCodeOK
|
|
}
|
|
},
|
|
redirectURI: {
|
|
status: redirectUriOK
|
|
}
|
|
}
|
|
};
|
|
res.statusCode = 200;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
return res.end(JSON.stringify(responseObject));
|
|
}
|
|
);
|
|
});
|
|
|
|
|
|
var lastOauthRequestTokenOK = true; // System is fine until proven otherwise
|
|
router.post("/request_token", (req, res) => {
|
|
const refresh_token = req.body.refresh_token;
|
|
const oAuthInfo = {
|
|
client_id: CLIENT_ID,
|
|
client_secret: CLIENT_SECRET,
|
|
refresh_token: refresh_token,
|
|
grant_type: "refresh_token"
|
|
}
|
|
request({
|
|
uri: TOKEN_URL,
|
|
method: "POST",
|
|
json: true,
|
|
body: oAuthInfo
|
|
}, (error, response) => {
|
|
lastOauthRequestTokenOK = !error;
|
|
|
|
if (error) {
|
|
const responseObject = {
|
|
status: "error",
|
|
errorText: `Refreshing Oauth Token with Google`
|
|
};
|
|
res.statusCode = 500;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
return res.end(JSON.stringify(responseObject));
|
|
} else {
|
|
response.body.status = "success"
|
|
res.statusCode = 200;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
return res.end(JSON.stringify(response.body));
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
var lastOauthExchangeCodeOK = true; // System is fine until proven otherwise
|
|
router.post("/exchangeCode", (req, res) => {
|
|
const code = req.body.code;
|
|
request({
|
|
uri: TOKEN_URL,
|
|
method: "POST",
|
|
json: true,
|
|
body: {
|
|
client_id: CLIENT_ID,
|
|
client_secret: CLIENT_SECRET,
|
|
redirect_uri: REDIRECT_URI,
|
|
grant_type: "authorization_code",
|
|
code: code
|
|
}
|
|
}, (error, response) => {
|
|
lastOauthExchangeCodeOK = !error;
|
|
|
|
if (error) {
|
|
const responseObject = {
|
|
status: "error",
|
|
errorText: `Problem getting back token`
|
|
};
|
|
res.statusCode = 500;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
return res.end(JSON.stringify(responseObject));
|
|
} else {
|
|
response.body.status = "success"
|
|
res.statusCode = 200;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
return res.end(JSON.stringify(response.body));
|
|
}
|
|
})
|
|
})
|
|
|
|
module.exports = router; |