136 lines
4.2 KiB
JavaScript
136 lines
4.2 KiB
JavaScript
var proxy = require('express-http-proxy'),
|
|
express = require('express'),
|
|
expressLogging = require('express-logging'),
|
|
logger = require('logops'),
|
|
port = 32100, hostname = '127.0.0.1',
|
|
supportedScopes = ['profile', 'status', 'avatar'],
|
|
expiresIn = 3600,
|
|
low = require('lowdb'),
|
|
FileSync = require('lowdb/adapters/FileSync'),
|
|
HttpStatus = require('http-status-codes'),
|
|
cron = require('node-cron');
|
|
|
|
const services = require('./app/services');
|
|
const adapter = new FileSync(__dirname + '/storage/db.json')
|
|
const db = low(adapter)
|
|
db.get('authCodes').value().forEach(codeData => {
|
|
codeData.expiresDate = function () {
|
|
var d = new Date();
|
|
d.setDate(d.getDate() + 2);
|
|
return d;
|
|
}();
|
|
services.authorizationService.saveAuthorizationCode(codeData, function (n, codeData) {
|
|
// console.log(codeData)
|
|
})
|
|
});
|
|
|
|
const app = express()
|
|
app.use(expressLogging(logger));
|
|
app.listen(port, () => {
|
|
console.log("Server running on port " + port);
|
|
});
|
|
|
|
|
|
|
|
|
|
var OAuthServer = require('simple-oauth-server'),
|
|
oauthServer = new OAuthServer(
|
|
services.clientService,
|
|
services.tokenService,
|
|
services.authorizationService,
|
|
services.membershipService,
|
|
expiresIn,
|
|
supportedScopes
|
|
);
|
|
|
|
function authorize(request, response) {
|
|
response.statusCode = 403;
|
|
response.json({ code: 501, message: 'Not Implemented' });
|
|
return true;
|
|
oauthServer.authorizeRequest(request, 'accountid', function (error, authorizationResult) {
|
|
if (error) {
|
|
response.statusCode = 400;
|
|
return response.end(JSON.stringify(error));
|
|
}
|
|
// var code = require('url').parse(authorizationResult.redirectUri, true).query.code;
|
|
// response.statusCode = 302;
|
|
// response.setHeader('Location', 'http://localhost:8080/oauth/token?client_id=1&grant_type=authorization_code&client_secret=kittens&code=' + code);
|
|
|
|
response.end(JSON.stringify(authorizationResult));
|
|
});
|
|
}
|
|
|
|
function grantToken(request, response) {
|
|
oauthServer.grantAccessToken(request, function (error, token) {
|
|
if (error) {
|
|
console.log(error)
|
|
response.statusCode = 400;
|
|
return response.json(error);
|
|
}
|
|
if (services.getClients()[request.query.client_id].id == 1) {
|
|
services.heartbeat.puls(token.access_token);
|
|
}
|
|
response.json(token);
|
|
});
|
|
}
|
|
|
|
function apiEndpoint(request, response) {
|
|
console.log(oauthServer.validateAccessToken(request, function (error, validationResult) {
|
|
if (error) {
|
|
response.statusCode = 401;
|
|
return response.json(error);
|
|
}
|
|
response.json(validationResult);
|
|
}));
|
|
}
|
|
|
|
function heartbeat(request, response) {
|
|
let updated = services.heartbeat.signal(request.headers.authorization);
|
|
response.json({ code: updated ? 200 : 400, data: updated });
|
|
}
|
|
|
|
const proxyFilter = function (req, res) {
|
|
return req.hostname == hostname ? true : new Promise(function (resolve) {
|
|
resolve(function () {
|
|
if (req.headers.authorization) {
|
|
let tokenData = services.getAccessTokens()[req.headers.authorization.split(' ').pop()];
|
|
// console.log('App token data', tokenData)
|
|
|
|
if (!tokenData || !tokenData.access_token) {
|
|
res.json({ code: HttpStatus.NOT_ACCEPTABLE })
|
|
return false;
|
|
}
|
|
if (tokenData.expiresDate < new Date()) {
|
|
res.json({ code: HttpStatus.NOT_ACCEPTABLE })
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}());
|
|
});
|
|
}
|
|
|
|
app.use('/api/v1/headless', proxy('spiduler-headless:32101', {
|
|
filter: proxyFilter
|
|
}));
|
|
|
|
app.use('/api/v1/spider', proxy('spiduler-spider:32102', {
|
|
filter: proxyFilter
|
|
}));
|
|
|
|
app.use('/api/v1/spiduler', proxy('spiduler-schedule:32103', {
|
|
filter: proxyFilter
|
|
}));
|
|
|
|
app.get('/oauth/authorize', authorize)
|
|
|
|
app.get('/api/v1/oauth/token', grantToken)
|
|
app.get('/oauth/token', grantToken)
|
|
|
|
app.get('/api/test', apiEndpoint)
|
|
|
|
// cron.schedule('0 * * * * *', () => {
|
|
// services.flushExpiredTokens(300);
|
|
// });
|