Merge pull request #1609 from xtuple/4_5_x
[xtuple] / node-datasource / routes / routes.js
1 /*jshint node:true, indent:2, curly:false, eqeqeq:true, immed:true, latedef:true, newcap:true, noarg:true,
2 regexp:true, undef:true, strict:true, trailing:true, white:true */
3 /*global X:true, XM:true */
4
5 (function () {
6   "use strict";
7
8   /**
9     Keep track of all of the routes and make them available from one place.
10     Note that we also determine here which routes are behind the login wall
11     by using ensureLogin.
12
13     Note that this means each route does not take care of its authentication
14     requirements, which is ok because some routes have variable authentication
15     requirements depending on how they're used (maintenance). But that does
16     mean that the routes should not be called directly. They should always
17     be called through these exports.
18
19     It would be possible to make the routes smarter and allow them to "register"
20     themselves and their path. But that would come at the cost of indirection.
21    */
22
23   var logoutPath = {redirectTo: "/logout"},
24     // this is going to look magical down where it's used. Basically ensureLoggedIn
25     // is a function that returns another function, and express allows routes to
26     // be defined in such a way as to chain these types of functions together in an array.
27     ensureLogin = require('connect-ensure-login').ensureLoggedIn(logoutPath),
28     analysis = require('./analysis'),
29     app = require('./app'),
30     auth = require('./auth'),
31     authorizeNet = require('./authorize-net'),
32     changePassword = require('./change_password'),
33     clientCode = require('./client_code'),
34     email = require('./email'),
35     exxport = require('./export'),
36     data = require('./data'),
37     file = require('./file'),
38     generateReport = require('./generate_report'),
39     generateOauthKey = require('./generate_oauth_key'),
40     locale = require('./locale'),
41     passport = require('passport'),
42     redirector = require('./redirector'),
43     recover = require('./recover'),
44     restDiscovery = require('./restDiscovery'),
45     restRouter = require('./restRouter'),
46     revokeOauthToken = require('./revoke_oauth_token'),
47     vcfExport = require('./vcfExport');
48
49   //
50   // Authentication-related routes
51   //
52   exports.app = [ensureLogin, app.serveApp];
53   exports.debug = [ensureLogin, app.serveDebug];
54   exports.login = auth.login;
55   exports.loginForm = auth.loginForm;
56   exports.logout = auth.logout;
57   exports.scope = auth.scope;
58   exports.scopeForm = auth.scopeForm;
59
60   exports.forgotPassword = recover.forgotPasswordForm;
61   exports.recoverPassword = recover.recoverPassword;
62   exports.verifyRecoverPassword = recover.verifyRecoverPassword;
63   exports.resetRecoveredPassword = recover.resetRecoveredPassword;
64   //
65   // Data-passthrough routes
66   //
67   exports.queryDatabase = data.queryDatabase;
68   exports.delete = [ensureLogin, data.delete];
69   exports.get = [ensureLogin, data.get];
70   exports.patch = [ensureLogin, data.patch];
71   exports.post = [ensureLogin, data.post];
72
73   //
74   // REST API Routes
75   exports.restDiscoveryList = [
76     restDiscovery.list
77   ];
78   exports.restDiscoveryGetRest = [
79     restDiscovery.getRest
80   ];
81   exports.restRouter = [
82     passport.authenticate('bearer', { session: false }),
83     restRouter.router
84   ];
85
86   //
87   // Custom routes
88   //
89   exports.creditCard = [ensureLogin, authorizeNet.transact];
90   exports.changePassword = [ensureLogin, changePassword.changePassword];
91   exports.clientCode = [ensureLogin, clientCode.clientCode];
92   exports.email = [ensureLogin, email.email];
93   exports.exxport = [ensureLogin, exxport.exxport];
94   exports.file = [ensureLogin, file.file];
95   exports.generateOauthKey = [ensureLogin, generateOauthKey.generateKey];
96   exports.generateReport = [ensureLogin, generateReport.generateReport];
97   exports.locale = [ensureLogin, locale.locale];
98   exports.redirect = redirector.redirect;
99   exports.analysis = [ensureLogin, analysis.analysis];
100   exports.resetPassword = [ensureLogin, changePassword.resetPassword];
101   exports.revokeOauthToken = [ensureLogin, revokeOauthToken.revokeToken];
102   exports.vcfExport = [ensureLogin, vcfExport.vcfExport];
103
104 }());