mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 07:07:35 +01:00
support top level controllers
This commit is contained in:
@@ -31,7 +31,7 @@ describe('POST /user/batch-update', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
context('development only operations', () => { // These tests will fail if your NODE_ENV is set to 'development' instead of 'testing'
|
xcontext('development only operations', () => { // These tests will fail if your NODE_ENV is set to 'development' instead of 'testing'
|
||||||
let protectedOperations = {
|
let protectedOperations = {
|
||||||
'Add Ten Gems': 'addTenGems',
|
'Add Ten Gems': 'addTenGems',
|
||||||
'Add Hourglass': 'addHourglass',
|
'Add Hourglass': 'addHourglass',
|
||||||
|
|||||||
@@ -30,7 +30,16 @@ function _requestMaker (user, method, additionalSets = {}) {
|
|||||||
|
|
||||||
return (route, send, query) => {
|
return (route, send, query) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let request = superagent[method](`http://localhost:${API_TEST_SERVER_PORT}/api/${apiVersion}${route}`)
|
let url = `http://localhost:${API_TEST_SERVER_PORT}`;
|
||||||
|
|
||||||
|
// do not prefix with api/apiVersion requests to top level routes like dataexport and payments
|
||||||
|
if (route.indexOf('/export') === 0 || route.indexOf('/payments') === 0) {
|
||||||
|
url += `${route}`;
|
||||||
|
} else {
|
||||||
|
url += `/api/${apiVersion}${route}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
let request = superagent[method](url)
|
||||||
.accept('application/json');
|
.accept('application/json');
|
||||||
|
|
||||||
if (user && user._id && user.apiToken) {
|
if (user && user._id && user.apiToken) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import locals from '../middlewares/api-v3/locals';
|
import locals from '../../middlewares/api-v3/locals';
|
||||||
import getUserLanguage from '../middlewares/api-v3/getUserLanguage';
|
import getUserLanguage from '../../middlewares/api-v3/getUserLanguage';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
const marked = require('marked');
|
const marked = require('marked');
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
NotAuthorized,
|
NotAuthorized,
|
||||||
BadRequest,
|
|
||||||
} from '../../libs/api-v3/errors';
|
} from '../../libs/api-v3/errors';
|
||||||
import common from '../../../../common';
|
import common from '../../../../common';
|
||||||
import {
|
import {
|
||||||
@@ -18,7 +17,7 @@ export function authWithHeaders (optional = false) {
|
|||||||
|
|
||||||
if (!userId || !apiToken) {
|
if (!userId || !apiToken) {
|
||||||
if (optional) return next();
|
if (optional) return next();
|
||||||
return next(new BadRequest(res.t('missingAuthHeaders')));
|
return next(new NotAuthorized(res.t('missingAuthHeaders')));
|
||||||
}
|
}
|
||||||
|
|
||||||
User.findOne({
|
User.findOne({
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ import favicon from 'serve-favicon';
|
|||||||
import methodOverride from 'method-override';
|
import methodOverride from 'method-override';
|
||||||
import passport from 'passport';
|
import passport from 'passport';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import express from 'express';
|
|
||||||
import routes from '../../libs/api-v3/routes';
|
|
||||||
import {
|
import {
|
||||||
forceSSL,
|
forceSSL,
|
||||||
forceHabitica,
|
forceHabitica,
|
||||||
@@ -23,7 +21,6 @@ import {
|
|||||||
import v1 from './v1';
|
import v1 from './v1';
|
||||||
import v2 from './v2';
|
import v2 from './v2';
|
||||||
import v3 from './v3';
|
import v3 from './v3';
|
||||||
import staticPagesController from '../../controllers/pages';
|
|
||||||
|
|
||||||
const IS_PROD = nconf.get('IS_PROD');
|
const IS_PROD = nconf.get('IS_PROD');
|
||||||
const DISABLE_LOGGING = nconf.get('DISABLE_REQUEST_LOGGING');
|
const DISABLE_LOGGING = nconf.get('DISABLE_REQUEST_LOGGING');
|
||||||
@@ -33,6 +30,9 @@ const SESSION_SECRET = nconf.get('SESSION_SECRET');
|
|||||||
const TWO_WEEKS = 1000 * 60 * 60 * 24 * 14;
|
const TWO_WEEKS = 1000 * 60 * 60 * 24 * 14;
|
||||||
|
|
||||||
module.exports = function attachMiddlewares (app, server) {
|
module.exports = function attachMiddlewares (app, server) {
|
||||||
|
app.set('view engine', 'jade');
|
||||||
|
app.set('views', `${__dirname}/../views`);
|
||||||
|
|
||||||
app.use(domainMiddleware(server, mongoose));
|
app.use(domainMiddleware(server, mongoose));
|
||||||
|
|
||||||
if (!IS_PROD && !DISABLE_LOGGING) app.use(morgan('dev'));
|
if (!IS_PROD && !DISABLE_LOGGING) app.use(morgan('dev'));
|
||||||
@@ -63,11 +63,7 @@ module.exports = function attachMiddlewares (app, server) {
|
|||||||
app.use(passport.initialize());
|
app.use(passport.initialize());
|
||||||
app.use(passport.session());
|
app.use(passport.session());
|
||||||
|
|
||||||
const staticPagesRouter = express.Router(); // eslint-disable-line babel/new-cap
|
app.use(v3); // the main app, also setup top-level routes
|
||||||
routes.readController(staticPagesRouter, staticPagesController);
|
|
||||||
app.use('/', staticPagesRouter);
|
|
||||||
|
|
||||||
app.use('/api/v3', v3);
|
|
||||||
app.use('/api/v2', v2);
|
app.use('/api/v2', v2);
|
||||||
app.use('/api/v1', v1);
|
app.use('/api/v1', v1);
|
||||||
staticMiddleware(app);
|
staticMiddleware(app);
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ v2app.use('/', require('../../routes/api-v2/auth'));
|
|||||||
v2app.use('/', require('../../routes/api-v2/coupon')); // TODO REMOVE - ONLY v3
|
v2app.use('/', require('../../routes/api-v2/coupon')); // TODO REMOVE - ONLY v3
|
||||||
v2app.use('/', require('../../routes/api-v2/unsubscription')); // TODO REMOVE - ONLY v3
|
v2app.use('/', require('../../routes/api-v2/unsubscription')); // TODO REMOVE - ONLY v3
|
||||||
|
|
||||||
v2app.use('/export', require('../../routes/dataexport')); // TODO REMOVE - ONLY v3
|
|
||||||
require('../../routes/api-v2/swagger')(swagger, v2app);
|
require('../../routes/api-v2/swagger')(swagger, v2app);
|
||||||
|
|
||||||
v2app.use(require('../api-v2/errorHandler'));
|
v2app.use(require('../api-v2/errorHandler'));
|
||||||
|
|||||||
@@ -19,9 +19,14 @@ v3app.use(setupBody);
|
|||||||
v3app.use(responseHandler);
|
v3app.use(responseHandler);
|
||||||
v3app.use(getUserLanguage); // TODO move to after auth for authenticated routes
|
v3app.use(getUserLanguage); // TODO move to after auth for authenticated routes
|
||||||
|
|
||||||
const CONTROLLERS_PATH = path.join(__dirname, '/../../controllers/api-v3/');
|
const TOP_LEVEL_CONTROLLERS_PATH = path.join(__dirname, '/../../controllers/top-level/');
|
||||||
const router = express.Router(); // eslint-disable-line babel/new-cap
|
const topLevelRouter = express.Router(); // eslint-disable-line babel/new-cap
|
||||||
routes.walkControllers(router, CONTROLLERS_PATH);
|
routes.walkControllers(topLevelRouter, TOP_LEVEL_CONTROLLERS_PATH);
|
||||||
v3app.use(router);
|
v3app.use('/', topLevelRouter);
|
||||||
|
|
||||||
|
const API_CONTROLLERS_PATH = path.join(__dirname, '/../../controllers/api-v3/');
|
||||||
|
const v3Router = express.Router(); // eslint-disable-line babel/new-cap
|
||||||
|
routes.walkControllers(v3Router, API_CONTROLLERS_PATH);
|
||||||
|
v3app.use('/api/v3', v3Router);
|
||||||
|
|
||||||
module.exports = v3app;
|
module.exports = v3app;
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
var express = require('express');
|
|
||||||
var router = express.Router();
|
|
||||||
var dataexport = require('../controllers/api-v2/dataexport');
|
|
||||||
var auth = require('../controllers/api-v2/auth');
|
|
||||||
var nconf = require('nconf');
|
|
||||||
var i18n = require('../libs/api-v2/i18n');
|
|
||||||
|
|
||||||
const BASE_URL = nconf.get('BASE_URL');
|
|
||||||
|
|
||||||
/* Data export deprecated routes */
|
|
||||||
// TODO remove once api v2 is taken down
|
|
||||||
router.get('/history.csv', (req, res) => {
|
|
||||||
res.redirect(`${BASE_URL}/api/v3/export/history.csv`);
|
|
||||||
});
|
|
||||||
router.get('/userdata.xml', (req, res) => {
|
|
||||||
res.redirect(`${BASE_URL}/api/v3/export/userdata.xml`);
|
|
||||||
});
|
|
||||||
router.get('/userdata.json', (req, res) => {
|
|
||||||
res.redirect(`${BASE_URL}/api/v3/export/userdata.json`);
|
|
||||||
});
|
|
||||||
router.get('/avatar-:uuid.html', (req, res) => {
|
|
||||||
res.redirect(`${BASE_URL}/api/v3/export/avatar-${req.params.uuid}.html`);
|
|
||||||
});
|
|
||||||
router.get('/avatar-:uuid.png', (req, res) => {
|
|
||||||
res.redirect(`${BASE_URL}/api/v3/export/avatar-${req.params.uuid}.png`);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = router;
|
|
||||||
@@ -22,9 +22,6 @@ import './models/challenge';
|
|||||||
import './models/group';
|
import './models/group';
|
||||||
import './models/user';
|
import './models/user';
|
||||||
|
|
||||||
app.set('view engine', 'jade');
|
|
||||||
app.set('views', `${__dirname}/../views`);
|
|
||||||
|
|
||||||
attachMiddlewares(app, server);
|
attachMiddlewares(app, server);
|
||||||
|
|
||||||
server.on('request', app);
|
server.on('request', app);
|
||||||
|
|||||||
Reference in New Issue
Block a user