diff --git a/config/userapi.js b/config/userapi.js index e6a6cf112b33c7b9e2df2577c79d7136e2c1d3b0..2fa9477ef25d0121cc6a88ce47dc7704d97eacb5 100644 --- a/config/userapi.js +++ b/config/userapi.js @@ -1,6 +1,6 @@ -module.exports = function (app, config, passport, models, ensureLoggedIn, bodyParser) { +module.exports = function (app, config, passport, models, ensureLoggedIn, bodyParser) { function setJsonApiHeader() { - return function(req, res, next) { + return function (req, res, next) { res.type('application/vnd.api+json'); next(); } @@ -11,7 +11,7 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP var selfName; try { selfName = req.user.id; - } catch(e) { + } catch (e) { selfName = '' } return selfName @@ -19,29 +19,29 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP //Passport SAML request is not accepted until the body is parsed. And since bodyParser can not used in the express app, it is called here separately. - app.post(config.passport.saml.path,bodyParser.json(),bodyParser.urlencoded({extended: true}), - passport.authenticate(config.passport.strategy, - { - failureRedirect: '/', - failureFlash: true - }), - function (req, res) { - if (req.session && req.session.returnTo) { - res.redirect('/'); // req.session.returnTo can't be used as the partial path after # is not available to the backend - } else { - res.redirect('/') ; - } - } - ); - - - app.get('/userapi', function(req, res){ + app.post(config.passport.saml.path, bodyParser.json(), bodyParser.urlencoded({ extended: true }), + passport.authenticate(config.passport.strategy, + { + failureRedirect: '/', + failureFlash: true + }), + function (req, res) { + if (req.session && req.session.returnTo) { + res.redirect('/'); // req.session.returnTo can't be used as the partial path after # is not available to the backend + } else { + res.redirect('/'); + } + } + ); + + + app.get('/userapi', function (req, res) { res.send('Working'); }); - app.get('/userapi/notebooks', setJsonApiHeader(), function(req, res){ - models.Notebook.find({isPublic: true},function(err,notebooks) { - if(err) { + app.get('/userapi/notebooks', setJsonApiHeader(), function (req, res) { + models.Notebook.find({ isPublic: true }, function (err, notebooks) { + if (err) { res.send({ errors: [err] }); } else { @@ -50,17 +50,17 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP }); }) - app.get('/userapi/notebooks/:id', setJsonApiHeader(), function(req, res){ - models.Notebook.findOne({_id: req.params.id},function(err,notebook) { - if(err) { - res.send({ errors: [ err ] }); + app.get('/userapi/notebooks/:id', setJsonApiHeader(), function (req, res) { + models.Notebook.findOne({ _id: req.params.id }, function (err, notebook) { + if (err) { + res.send({ errors: [err] }); } else if (notebook.isPublic || notebook.username == selfUserName(req)) { res.send({ data: models.notebookResObj(notebook) }); } else { // hide completely and treat as non existing, or trigger an error? currently expose minimal info res.send({ - data:{ + data: { type: "notebooks", id: req.params.id, attributes: { @@ -73,9 +73,9 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP }); }) - app.get('/userapi/rusages', setJsonApiHeader(), function(req, res){ - models.Rusage.find({},function(err,rusages) { - if(err) { + app.get('/userapi/rusages', setJsonApiHeader(), function (req, res) { + models.Rusage.find({}, function (err, rusages) { + if (err) { res.send({ errors: [err] }); } else { @@ -84,33 +84,33 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP }); }) - app.get('/userapi/rusages/:username', setJsonApiHeader(), function(req, res){ - models.getRusage(req.params.username, function(err,rusage) { - if(err) { - res.send({ errors: [ err ] }); + app.get('/userapi/rusages/:username', setJsonApiHeader(), function (req, res) { + models.getRusage(req.params.username, function (err, rusage) { + if (err) { + res.send({ errors: [err] }); } else { - // hide if rusage.username != selfUserName(req)?? + // hide if rusage.username != selfUserName(req)?? res.send(rusage) } }); }) - app.get('/userapi/myselfs', setJsonApiHeader(), function(req,res) { - models.getMyself(selfUserName(req), function(err, myself) { + app.get('/userapi/myselfs', setJsonApiHeader(), function (req, res) { + models.getMyself(selfUserName(req), function (err, myself) { if (err) { res.send({ errors: [err] }) } else { res.send({ - data: [ myself.data ], + data: [myself.data], included: myself.included }); } }); }); - app.get('/userapi/myselfs/:id', setJsonApiHeader(), function(req,res) { + app.get('/userapi/myselfs/:id', setJsonApiHeader(), function (req, res) { if (req.params.id == "1") { - models.getMyself(selfUserName(req), function(err, myself) { + models.getMyself(selfUserName(req), function (err, myself) { if (err) { res.send({ errors: [err] }) } else { @@ -124,14 +124,14 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP } }); - app.get('/userapi/myselfs/1/username', setJsonApiHeader(), function(req, res){ + app.get('/userapi/myselfs/1/username', setJsonApiHeader(), function (req, res) { res.send(selfUserName(req)) }); - app.get('/userapi/users/:username', setJsonApiHeader(), function(req, res){ + app.get('/userapi/users/:username', setJsonApiHeader(), function (req, res) { var selfName = selfUserName(req) let username = req.params.username; - models.getUserInfo(username, selfName, function(err, userInfo) { + models.getUserInfo(username, selfName, function (err, userInfo) { if (err) { res.send(err) } else { @@ -140,10 +140,10 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP }); }); - app.get('/userapi/users', setJsonApiHeader(), function(req, res){ + app.get('/userapi/users', setJsonApiHeader(), function (req, res) { var selfName = selfUserName(req) let username = req.params.username; - models.getUserInfo(username, selfName, function(err, userInfo) { + models.getUserInfo(username, selfName, function (err, userInfo) { if (err) { res.send(err) } else { @@ -152,8 +152,19 @@ module.exports = function (app, config, passport, models, ensureLoggedIn, bodyP }); }); - app.get('/notebook-edit/*', function(req, res){ - const target = 'https://labdev-nomad.esc.rzg.mpg.de/beaker/#/open?uri=' + req.url.slice(14, req.url.length).replace("/","%2F") + app.get('/containersForUser', function (req, res) { + const k8 = require('./kubernetes')(config); + const k8component = require('./components')(config); + const ProxyRouter = require('./ProxyRouter')(config, k8, k8component); + k8.ns(config.k8component.namespace).rc.get(config.k8component.imageType + '-rc-' + userID, function (err, result) { + if (!err) { + res.send(result); + } else res.send(err); + }); + }); + + app.get('/notebook-edit/*', function (req, res) { + const target = 'https://labdev-nomad.esc.rzg.mpg.de/beaker/#/open?uri=' + req.url.slice(14, req.url.length).replace("/", "%2F") console.log(`notebook-edit redirecting to ${target}`) res.redirect(302, target); });