first commit
This commit is contained in:
139
index.js
Normal file
139
index.js
Normal file
@@ -0,0 +1,139 @@
|
||||
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)
|
||||
})
|
||||
});
|
||||
|
||||
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 });
|
||||
}
|
||||
|
||||
cron.schedule('0 * * * * *', () => {
|
||||
services.flushExpiredTokens(300);
|
||||
});
|
||||
|
||||
|
||||
const app = express()
|
||||
app.use(expressLogging(logger));
|
||||
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('127.0.0.1:32101', {
|
||||
filter: proxyFilter
|
||||
}));
|
||||
|
||||
app.use('/api/v1/spider', proxy('127.0.0.1:32102', {
|
||||
filter: proxyFilter
|
||||
}));
|
||||
|
||||
app.use('/api/v1/spiduler', proxy('127.0.0.1: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)
|
||||
|
||||
|
||||
|
||||
app.listen(port)
|
||||
console.log('Server starting port ' + port)
|
||||
Reference in New Issue
Block a user