Untitled diff

Created Diff never expires
5 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
83 lines
113 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
191 lines
ORIGINAL app.js at KibanaDir/src/app.js
MODIFIED CUSTOM app.js


var express = require('express');
var express = require('express');
var path = require('path');
var path = require('path');
var favicon = require('serve-favicon');
var favicon = require('serve-favicon');
var requestLogger = require('./lib/requestLogger');
var requestLogger = require('./lib/requestLogger');
var auth = require('./lib/auth');
var auth = require('./lib/auth');
var xsrf = require('./lib/xsrf');
var appHeaders = require('./lib/appHeaders');
var appHeaders = require('./lib/appHeaders');
var cookieParser = require('cookie-parser');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var bodyParser = require('body-parser');
var compression = require('compression');
var compression = require('compression');
var config = require('./config');
var config = require('./config');

var xsrf = require('./lib/xsrf');
var request = require('request');
var routes = require('./routes/index');
var routes = require('./routes/index');
var proxy = require('./routes/proxy');
var proxy = require('./routes/proxy');

var app = express();
var app = express();
var parser = require('./parser.js');


// view engine setup
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.set('view engine', 'jade');
app.set('x-powered-by', false);
app.set('x-powered-by', false);
function authMiddleware (req, res, next) {
//check auth token here, if not authorized/authenticated

var subjectToken;
function getAdminToken(){
var adminToken;
request.post({
headers: {'content-type' : 'application/json'},
url: 'keystone_url/v3/auth/tokens',
rejectUnhauthorized : false,
strictSSL: false,
json: {
"auth":
{
"identity":
{
"methods": [
"password"
],
"password": {
"user": {
"domain" : {
"id":"default"
},
"name": "csa",
"password": process.env.CSA_PWD
}
}
},
"scope": {
"domain":{
"id":"default"
}
}
}
}
},
function(error, response, body){
adminToken = response.headers['x-subject-token'];
checkValidToken(adminToken);
});
}
function checkContainsHeader() {
//Check if request has an auth token

var containsHeader = 0;
if (req.headers['cookie']!=undefined) {
var cookie = (req.headers['cookie']);
if(cookie.indexOf('X-Auth-Token')!=-1) {
containsHeader=1;
subjectToken = parser(cookie);
}
}

//Redirect if it does not have an auth token
if(!containsHeader){
return res.send('Your session has timed out.Please login again');
}

else {
getAdminToken();
}
}
//Else check if user is authorized
function checkValidToken(adminToken) {
//Admin Token is not loaded in time, given an error
request.get({
headers: {
'content-type' : 'application/json',
'X-Subject-Token' : subjectToken,
'X-Auth-Token' : adminToken
},
url: 'keystone_url/v3/auth/tokens',
rejectUnhauthorized : false,
strictSSL: false,
},
function(error, response, body){
//Check authorization , admin for now
if (response.statusCode == 200) {
checkAuthorized(body);

}
else {
return res.send('Your session has timed out.Please login again');

}
});
}

function checkAuthorized(responseBody) {
var authorized = 0;
body = JSON.parse(responseBody);
roles = body.token.roles;
for ( i in roles){
if(roles[i].name == 'admin' || roles[i].name == 'monitor'){
authorized=1;
}

}
if(!authorized){
return res.send('Your session has timed out.Please login again');

}
next()
}
checkContainsHeader();
}
app.use(authMiddleware)


app.use(requestLogger());
app.use(requestLogger());
app.use(auth());
app.use(auth());
app.use(xsrf(config.kibana.xsrf_token));
app.use(xsrf(config.kibana.xsrf_token));
app.use(appHeaders());
app.use(appHeaders());
app.use(favicon(path.join(config.public_folder, 'styles', 'theme', 'elk.ico')));
app.use(favicon(path.join(config.public_folder, 'styles', 'theme', 'elk.ico')));


if (app.get('env') === 'development') {
if (app.get('env') === 'development') {
require('./dev')(app);
require('./dev')(app);
}
}


// The proxy must be set up before all the other middleware.
// The proxy must be set up before all the other middleware.
// TODO: WE might want to move the middleware to each of the individual routes
// TODO: WE might want to move the middleware to each of the individual routes
// so we don't have weird conflicts in the future.
// so we don't have weird conflicts in the future.
app.use('/elasticsearch', proxy);
app.use('/elasticsearch', proxy);


app.use(bodyParser.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(cookieParser());
app.use(compression());
app.use(compression());
app.use(express.static(config.public_folder));
app.use(express.static(config.public_folder));
if (config.external_plugins_folder) app.use('/plugins', express.static(config.external_plugins_folder));
if (config.external_plugins_folder) app.use('/plugins', express.static(config.external_plugins_folder));

app.use('/', routes);
app.use('/', routes);




// catch 404 and forward to error handler
// catch 404 and forward to error handler
app.use(function (req, res, next) {
app.use(function (req, res, next) {
var err = new Error('Not Found');
var err = new Error('Not Found');
err.status = 404;
err.status = 404;
next(err);
next(err);
});
});


// error handlers
// error handlers


// development error handler
// development error handler
// will print stacktrace
// will print stacktrace
if (app.get('env') === 'development') {
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.status(err.status || 500);
res.render('error', {
res.render('error', {
message: err.message,
message: err.message,
error: err
error: err
});
});
});
});
}
}


// production error handler
// production error handler
// no stacktraces leaked to user
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.status(err.status || 500);
res.render('error', {
res.render('error', {
message: err.message,
message: err.message,
error: {}
error: {}
});
});
});
});




module.exports = app;
module.exports = app;