137 lines
5.0 KiB
JavaScript
137 lines
5.0 KiB
JavaScript
const express = require('express');
|
|
const Raven = require('raven');
|
|
const bodyParser = require('body-parser');
|
|
const tokenToUser = require('./middleware/tokenToUser');
|
|
const mustBeAuthenticated = require('./middleware/mustBeAuthenticated');
|
|
const mustBeAdmin = require('./middleware/mustBeAdmin');
|
|
const configuration = require('src/config/configuration').getInstance();
|
|
|
|
const listController = require('./controllers/list/listController');
|
|
|
|
// TODO: Have our raven router check if there is a value, if not don't enable raven.
|
|
Raven.config(configuration.get('raven', 'DSN')).install();
|
|
|
|
const app = express(); // define our app using express
|
|
app.use(Raven.requestHandler());
|
|
app.use(bodyParser.json());
|
|
|
|
const router = express.Router();
|
|
const allowedOrigins = ['https://kevinmidboe.com', 'http://localhost:8080'];
|
|
|
|
// TODO: All JSON handling in a single router
|
|
// router.use(bodyParser.json());
|
|
app.use(bodyParser.urlencoded({ extended: true }));
|
|
|
|
/* Decode the Authorization header if provided */
|
|
router.use(tokenToUser);
|
|
|
|
// TODO: Should have a separate middleware/router for handling headers.
|
|
router.use((req, res, next) => {
|
|
// TODO add logging of all incoming
|
|
console.log('Request: ', req.originalUrl);
|
|
|
|
const origin = req.headers.origin;
|
|
if (allowedOrigins.indexOf(origin) > -1) {
|
|
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
}
|
|
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, loggedinuser');
|
|
res.header('Access-Control-Allow-Methods', 'POST, GET, PUT');
|
|
|
|
next();
|
|
});
|
|
|
|
router.get('/', function mainHandler(req, res) {
|
|
throw new Error('Broke!');
|
|
});
|
|
|
|
app.use(Raven.errorHandler());
|
|
app.use(function onError(err, req, res, next) {
|
|
res.statusCode = 500;
|
|
res.end(res.sentry + '\n');
|
|
});
|
|
|
|
/**
|
|
* User
|
|
*/
|
|
router.post('/v1/user', require('./controllers/user/register.js'));
|
|
router.post('/v1/user/login', require('./controllers/user/login.js'));
|
|
router.get('/v1/user/history', mustBeAuthenticated, require('./controllers/user/history.js'));
|
|
router.get('/v1/user/requests', mustBeAuthenticated, require('./controllers/user/requests.js'));
|
|
|
|
/**
|
|
* Seasoned
|
|
*/
|
|
router.get('/v1/seasoned/all', require('./controllers/seasoned/readStrays.js'));
|
|
router.get('/v1/seasoned/:strayId', require('./controllers/seasoned/strayById.js'));
|
|
router.post('/v1/seasoned/verify/:strayId', require('./controllers/seasoned/verifyStray.js'));
|
|
|
|
router.get('/v2/search/', require('./controllers/search/multiSearch.js'));
|
|
router.get('/v2/search/movie', require('./controllers/search/movieSearch.js'));
|
|
router.get('/v2/search/show', require('./controllers/search/showSearch.js'));
|
|
router.get('/v2/search/person', require('./controllers/search/personSearch.js'));
|
|
|
|
router.get('/v2/movie/now_playing', listController.nowPlayingMovies);
|
|
router.get('/v2/movie/popular', listController.popularMovies);
|
|
router.get('/v2/movie/top_rated', listController.topRatedMovies);
|
|
router.get('/v2/movie/upcoming', listController.upcomingMovies);
|
|
|
|
router.get('/v2/show/now_playing', listController.nowPlayingShows);
|
|
router.get('/v2/show/popular', listController.popularShows);
|
|
router.get('/v2/show/top_rated', listController.topRatedShows);
|
|
|
|
router.get('/v2/movie/:id', require('./controllers/info/movieInfo.js'));
|
|
router.get('/v2/show/:id', require('./controllers/info/showInfo.js'));
|
|
router.get('/v2/person/:id', require('./controllers/info/personInfo.js'));
|
|
/**
|
|
* Plex
|
|
*/
|
|
router.get('/v2/plex/search', require('./controllers/plex/search'));
|
|
|
|
/**
|
|
* List
|
|
*/
|
|
router.get('/v1/plex/search', require('./controllers/plex/searchMedia.js'));
|
|
router.get('/v1/plex/playing', require('./controllers/plex/plexPlaying.js'));
|
|
router.get('/v1/plex/request', require('./controllers/plex/searchRequest.js'));
|
|
router.get('/v1/plex/request/:mediaId', require('./controllers/plex/readRequest.js'));
|
|
router.post('/v1/plex/request/:mediaId', require('./controllers/plex/submitRequest.js'));
|
|
router.post('/v1/plex/hook', require('./controllers/plex/hookDump.js'));
|
|
|
|
/**
|
|
* Requests
|
|
*/
|
|
|
|
router.get('/v2/request', require('./controllers/request/fetchAllRequests.js'));
|
|
router.post('/v2/request', require('./controllers/request/requestTmdbId.js'));
|
|
router.get('/v1/plex/requests/all', require('./controllers/plex/fetchRequested.js'));
|
|
router.put('/v1/plex/request/:requestId', mustBeAuthenticated, require('./controllers/plex/updateRequested.js'));
|
|
|
|
/**
|
|
* Pirate
|
|
*/
|
|
router.get('/v1/pirate/search', mustBeAuthenticated, require('./controllers/pirate/searchTheBay.js'));
|
|
router.post('/v1/pirate/add', mustBeAuthenticated, require('./controllers/pirate/addMagnet.js'));
|
|
|
|
/**
|
|
* TMDB
|
|
*/
|
|
router.get('/v1/tmdb/search', require('./controllers/tmdb/searchMedia.js'));
|
|
router.get('/v1/tmdb/list/:listname', require('./controllers/tmdb/listSearch.js'));
|
|
router.get('/v1/tmdb/:mediaId', require('./controllers/tmdb/readMedia.js'));
|
|
|
|
/**
|
|
* git
|
|
*/
|
|
router.post('/v1/git/dump', require('./controllers/git/dumpHook.js'));
|
|
|
|
/**
|
|
* misc
|
|
*/
|
|
router.get('/v1/emoji', require('./controllers/misc/emoji.js'));
|
|
|
|
// REGISTER OUR ROUTES -------------------------------
|
|
// all of our routes will be prefixed with /api
|
|
app.use('/api', router);
|
|
|
|
module.exports = app;
|