var express = require('express');
/**
* Construction function.
* Wraps complete Aidbot's RESTful webservice and authentication and authorization mechanism.
*
* @constructor
* @param {Function} app instance of Express application
* @param {Connection} db database connection
*/
var api = function (app, db) {
//noinspection JSValidateTypes
app.configure(function () {
app.use(express.logger('dev'));
app.use(express.cookieParser('1234BSJG.gjsRt'));
app.use(express.cookieSession());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(__dirname + '/public'));
app.use(app.router);
});
//controllery
var controllers = require('./app/controllers/controllers.js')
, conversationController = new controllers.ConversationController(db)
, userController = new controllers.UserController(db)
, authController = new controllers.AuthController(db)
, settingsController = new controllers.SettingsController(db);
function checkAuth(req, res, next) {
if (req.session.authenticated === true) {
next();
} else {
res.status(401).send('401 Unauthorized');
}
}
// User login & logout
app.post('/auth/login', function (req, res, next) {
return authController.login(req, res, next);
});
app.post('/auth/logout', function (req, res, next) {
return authController.logout(req, res, next);
});
// Check API authentication
app.all('/api/*', function (req, res, next) {
checkAuth(req, res, next);
});
// RESTful Web API
app.get('/api/conversations', function (req, res, next) {
return conversationController.findAll(req, res, next);
});
app.get('/api/conversations/:id', function (req, res, next) {
return conversationController.find(req, res, next);
});
app.put('/api/conversations/:id', function (req, res, next) {
return conversationController.update(req, res, next);
});
app.get('/api/users', function (req, res, next) {
return userController.findAll(req, res, next);
});
app.get('/api/users/:id', function (req, res, next) {
return userController.find(req, res, next);
});
app.post('/api/users', function (req, res, next) {
return userController.save(req, res, next);
});
app.put('/api/users/:id', function (req, res, next) {
return userController.save(req, res, next);
});
app.get('/api/settings', function (req, res, next) {
return settingsController.load(req, res, next);
});
app.put('/api/settings', function (req, res, next) {
return settingsController.save(req, res, next);
});
}
module.exports = api;