diff --git a/seasoned_api/src/plex/updateRequestsInPlex.js b/seasoned_api/src/plex/updateRequestsInPlex.js index c53ff7f..4242bdc 100644 --- a/seasoned_api/src/plex/updateRequestsInPlex.js +++ b/seasoned_api/src/plex/updateRequestsInPlex.js @@ -1,39 +1,47 @@ -const Plex = require('src/plex/plex') -const configuration = require('src/config/configuration').getInstance(); -const plex = new Plex(configuration.get('plex', 'ip')) -const establishedDatabase = require('src/database/database'); +const Plex = require("src/plex/plex"); +const configuration = require("src/config/configuration").getInstance(); +const plex = new Plex(configuration.get("plex", "ip")); +const establishedDatabase = require("src/database/database"); class UpdateRequestsInPlex { constructor() { - this.database = establishedDatabase; - this.queries = { - getMovies: `SELECT * FROM requests WHERE status = 'requested' OR status = 'downloading'`, -// getMovies: "select * from requests where status is 'reset'", - saveNewStatus: `UPDATE requests SET status = ? WHERE id IS ? and type IS ?`, - } + this.database = establishedDatabase; + this.queries = { + getMovies: `SELECT * FROM requests WHERE status = 'requested' OR status = 'downloading'`, + // getMovies: "select * from requests where status is 'reset'", + saveNewStatus: `UPDATE requests SET status = ? WHERE id IS ? and type IS ?` + }; } getByStatus() { - return this.database.all(this.queries.getMovies); + return this.database.all(this.queries.getMovies); } scrub() { - return this.getByStatus() - .then((requests) => Promise.all(requests.map(movie => plex.existsInPlex(movie)))) + return this.getByStatus().then(requests => + Promise.all(requests.map(movie => plex.existsInPlex(movie))) + ); } commitNewStatus(status, id, type, title) { - console.log(type, title, 'updated to:', status) - this.database.run(this.queries.saveNewStatus, [status, id, type]) + console.log(type, title, "updated to:", status); + this.database.run(this.queries.saveNewStatus, [status, id, type]); } - updateStatus(status) { this.getByStatus() - .then(requests => Promise.all(requests.map(request => plex.existsInPlex(request)))) - .then(matchedRequests => matchedRequests.filter(request => request.existsInPlex)) - .then(newMatches => newMatches.map(match => this.commitNewStatus(status, match.id, match.type, match.title))) + .then(requests => + Promise.all(requests.map(request => plex.existsInPlex(request))) + ) + .then(matchedRequests => + matchedRequests.filter(request => request.existsInPlex) + ) + .then(newMatches => + newMatches.map(match => + this.commitNewStatus(status, match.id, match.type, match.title) + ) + ); } } var requestsUpdater = new UpdateRequestsInPlex(); -requestsUpdater.updateStatus('downloaded') +requestsUpdater.updateStatus("downloaded"); -module.exports = UpdateRequestsInPlex +module.exports = UpdateRequestsInPlex; diff --git a/seasoned_api/src/webserver/app.js b/seasoned_api/src/webserver/app.js index fc6be9c..c1bb1a0 100644 --- a/seasoned_api/src/webserver/app.js +++ b/seasoned_api/src/webserver/app.js @@ -1,26 +1,26 @@ -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 mustHaveAccountLinkedToPlex = require('./middleware/mustHaveAccountLinkedToPlex'); -const configuration = require('src/config/configuration').getInstance(); +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 mustHaveAccountLinkedToPlex = require("./middleware/mustHaveAccountLinkedToPlex"); +const configuration = require("src/config/configuration").getInstance(); -const listController = require('./controllers/list/listController'); -const tautulli = require('./controllers/user/viewHistory.js'); -const SettingsController = require('./controllers/user/settings'); -const AuthenticatePlexAccountController = require('./controllers/user/authenticatePlexAccount'); +const listController = require("./controllers/list/listController"); +const tautulli = require("./controllers/user/viewHistory.js"); +const SettingsController = require("./controllers/user/settings"); +const AuthenticatePlexAccountController = require("./controllers/user/authenticatePlexAccount"); // TODO: Have our raven router check if there is a value, if not don't enable raven. -Raven.config(configuration.get('raven', 'DSN')).install(); +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 = configuration.get('webserver', 'origins'); +const allowedOrigins = configuration.get("webserver", "origins"); // TODO: All JSON handling in a single router // router.use(bodyParser.json()); @@ -31,118 +31,198 @@ router.use(tokenToUser); // TODO: Should have a separate middleware/router for handling headers. router.use((req, res, next) => { - // TODO add logging of all incoming + // TODO add logging of all incoming 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'); + 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(); + next(); }); -router.get('/', function mainHandler(req, res) { - throw new Error('Broke!'); +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'); + 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/settings', mustBeAuthenticated, SettingsController.getSettingsController); -router.put('/v1/user/settings', mustBeAuthenticated, SettingsController.updateSettingsController); -router.get('/v1/user/search_history', mustBeAuthenticated, require('./controllers/user/searchHistory.js')); -router.get('/v1/user/requests', mustBeAuthenticated, require('./controllers/user/requests.js')); -router.post('/v1/user/link_plex', mustBeAuthenticated, AuthenticatePlexAccountController.link); -router.post('/v1/user/unlink_plex', mustBeAuthenticated, AuthenticatePlexAccountController.unlink); +router.post("/v1/user", require("./controllers/user/register.js")); +router.post("/v1/user/login", require("./controllers/user/login.js")); +router.get( + "/v1/user/settings", + mustBeAuthenticated, + SettingsController.getSettingsController +); +router.put( + "/v1/user/settings", + mustBeAuthenticated, + SettingsController.updateSettingsController +); +router.get( + "/v1/user/search_history", + mustBeAuthenticated, + require("./controllers/user/searchHistory.js") +); +router.get( + "/v1/user/requests", + mustBeAuthenticated, + require("./controllers/user/requests.js") +); +router.post( + "/v1/user/link_plex", + mustBeAuthenticated, + AuthenticatePlexAccountController.link +); +router.post( + "/v1/user/unlink_plex", + mustBeAuthenticated, + AuthenticatePlexAccountController.unlink +); -router.get('/v1/user/view_history', mustHaveAccountLinkedToPlex, tautulli.userViewHistoryController); -router.get('/v1/user/watch_time', mustHaveAccountLinkedToPlex, tautulli.watchTimeStatsController); -router.get('/v1/user/plays_by_day', mustHaveAccountLinkedToPlex, tautulli.getPlaysByDaysController); -router.get('/v1/user/plays_by_dayofweek', mustHaveAccountLinkedToPlex, tautulli.getPlaysByDayOfWeekController); +router.get( + "/v1/user/view_history", + mustHaveAccountLinkedToPlex, + tautulli.userViewHistoryController +); +router.get( + "/v1/user/watch_time", + mustHaveAccountLinkedToPlex, + tautulli.watchTimeStatsController +); +router.get( + "/v1/user/plays_by_day", + mustHaveAccountLinkedToPlex, + tautulli.getPlaysByDaysController +); +router.get( + "/v1/user/plays_by_dayofweek", + mustHaveAccountLinkedToPlex, + tautulli.getPlaysByDayOfWeekController +); /** * 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("/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/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/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/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/credits', require('./controllers/movie/credits.js')); -router.get('/v2/movie/:id/release_dates', require('./controllers/movie/releaseDates.js')); -router.get('/v2/show/:id/credits', require('./controllers/show/credits.js')); +router.get("/v2/movie/:id/credits", require("./controllers/movie/credits.js")); +router.get( + "/v2/movie/:id/release_dates", + require("./controllers/movie/releaseDates.js") +); +router.get("/v2/show/:id/credits", require("./controllers/show/credits.js")); -router.get('/v2/movie/:id', require('./controllers/movie/info.js')); -router.get('/v2/show/:id', require('./controllers/show/info.js')); -router.get('/v2/person/:id', require('./controllers/person/info.js')); +router.get("/v2/movie/:id", require("./controllers/movie/info.js")); +router.get("/v2/show/:id", require("./controllers/show/info.js")); +router.get("/v2/person/:id", require("./controllers/person/info.js")); /** * Plex */ -router.get('/v2/plex/search', require('./controllers/plex/search')); +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')); +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")); -router.get('/v1/plex/watch-link', mustBeAuthenticated, require('./controllers/plex/watchDirectLink.js')); +router.get( + "/v1/plex/watch-link", + mustBeAuthenticated, + require("./controllers/plex/watchDirectLink.js") +); /** * Requests */ -router.get('/v2/request', require('./controllers/request/fetchAllRequests.js')); -router.get('/v2/request/:id', require('./controllers/request/getRequest.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')); +router.get("/v2/request", require("./controllers/request/fetchAllRequests.js")); +router.get("/v2/request/:id", require("./controllers/request/getRequest.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')); +router.get( + "/v1/pirate/search", + mustBeAuthenticated, + require("./controllers/pirate/searchTheBay.js") +); +router.post( + "/v1/pirate/add", + mustBeAuthenticated, + require("./controllers/pirate/addMagnet.js") +); /** * git */ -router.post('/v1/git/dump', require('./controllers/git/dumpHook.js')); +router.post("/v1/git/dump", require("./controllers/git/dumpHook.js")); /** * misc */ - router.get('/v1/emoji', require('./controllers/misc/emoji.js')); +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); +app.use("/api", router); module.exports = app; diff --git a/seasoned_api/src/webserver/controllers/request/requestTmdbId.js b/seasoned_api/src/webserver/controllers/request/requestTmdbId.js index 09d55f4..47c8b90 100644 --- a/seasoned_api/src/webserver/controllers/request/requestTmdbId.js +++ b/seasoned_api/src/webserver/controllers/request/requestTmdbId.js @@ -1,16 +1,16 @@ -const configuration = require('src/config/configuration').getInstance(); -const TMDB = require('src/tmdb/tmdb'); -const RequestRepository = require('src/request/request'); -const tmdb = new TMDB(configuration.get('tmdb', 'apiKey')); +const configuration = require("src/config/configuration").getInstance(); +const TMDB = require("src/tmdb/tmdb"); +const RequestRepository = require("src/request/request"); +const tmdb = new TMDB(configuration.get("tmdb", "apiKey")); const request = new RequestRepository(); -const tmdbMovieInfo = (id) => { - return tmdb.movieInfo(id) -} +const tmdbMovieInfo = id => { + return tmdb.movieInfo(id); +}; -const tmdbShowInfo = (id) => { - return tmdb.showInfo(id) -} +const tmdbShowInfo = id => { + return tmdb.showInfo(id); +}; /** * Controller: Request by id with type param @@ -19,33 +19,45 @@ const tmdbShowInfo = (id) => { * @returns {Callback} */ function requestTmdbIdController(req, res) { - const { id, type } = req.body + const { id, type } = req.body; - const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; - const user_agent = req.headers['user-agent']; + const ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; + const user_agent = req.headers["user-agent"]; const user = req.loggedInUser; - let mediaFunction = undefined + let mediaFunction = undefined; if (id === undefined || type === undefined) { - res.status(422).send({ success: false, message: "'Missing parameteres: 'id' and/or 'type'"}) + res + .status(422) + .send({ + success: false, + message: "'Missing parameteres: 'id' and/or 'type'" + }); } - if (type === 'movie') { - mediaFunction = tmdbMovieInfo - } else if (type === 'show') { - mediaFunction = tmdbShowInfo + if (type === "movie") { + mediaFunction = tmdbMovieInfo; + } else if (type === "show") { + mediaFunction = tmdbShowInfo; } else { - res.status(422).send({ success: false, message: 'Incorrect type. Allowed types: "movie" or "show"'}) + res + .status(422) + .send({ + success: false, + message: 'Incorrect type. Allowed types: "movie" or "show"' + }); } mediaFunction(id) // .catch((error) => { console.error(error); res.status(404).send({ success: false, error: 'Id not found' }) }) .then(tmdbMedia => request.requestFromTmdb(tmdbMedia, ip, user_agent, user)) - .then(() => res.send({success: true, message: 'Request has been submitted.'})) + .then(() => + res.send({ success: true, message: "Request has been submitted." }) + ) .catch(error => { res.send({ success: false, message: error.message }); - }) + }); } module.exports = requestTmdbIdController;