diff --git a/seasoned_api/.eslintrc.json b/seasoned_api/.eslintrc.json index 6f67564..d7e47e6 100644 --- a/seasoned_api/.eslintrc.json +++ b/seasoned_api/.eslintrc.json @@ -1,3 +1,12 @@ { - "extends": "airbnb-base" -} \ No newline at end of file + "extends": [ + "airbnb-base" + ], + "rules": { + "indent": ["error", 3], + "prefer-destructuring": 0, + "camelcase": 0, + "import/no-unresolved": 0, + "import/no-extraneous-dependencies": 0 + } +} diff --git a/seasoned_api/package.json b/seasoned_api/package.json index 7814f28..7ef0308 100644 --- a/seasoned_api/package.json +++ b/seasoned_api/package.json @@ -5,7 +5,7 @@ "start": "cross-env SEASONED_CONFIG=conf/development.json NODE_PATH=. node src/webserver/server.js", "test": "cross-env SEASONED_CONFIG=conf/development.json NODE_PATH=. mocha --recursive test/system", "coverage": "cross-env PLANFLIX_CONFIG=conf/test.json NODE_PATH=. istanbul cover -x script/autogenerate-documentation.js --include-all-sources --dir test/.coverage node_modules/mocha/bin/_mocha --recursive test/**/* -- --report lcovonly && cat test/.coverage/lcov.info | coveralls && rm -rf test/.coverage", - "lint": "./node_modules/.bin/eslint src/webserver/" + "lint": "./node_modules/.bin/eslint src/" }, "dependencies": { "bcrypt-nodejs": "^0.0.3", diff --git a/seasoned_api/src/config/configuration.js b/seasoned_api/src/config/configuration.js index bd9d4c3..b9eede4 100644 --- a/seasoned_api/src/config/configuration.js +++ b/seasoned_api/src/config/configuration.js @@ -4,40 +4,40 @@ const Field = require('./field.js'); let instance = null; class Config { - constructor() { - this.location = Config.determineLocation(); - this.fields = require(`${this.location}`); - } + constructor() { + this.location = Config.determineLocation(); + this.fields = require(`${this.location}`); + } - static getInstance() { - if (instance == null) { - instance = new Config(); - } - return instance; - } + static getInstance() { + if (instance == null) { + instance = new Config(); + } + return instance; + } - static determineLocation() { - return path.join(__dirname, '..', '..', process.env.SEASONED_CONFIG); - } + static determineLocation() { + return path.join(__dirname, '..', '..', process.env.SEASONED_CONFIG); + } - get(section, option) { - if (this.fields[section] === undefined || this.fields[section][option] === undefined) { - throw new Error(`Filed "${section} => ${option}" does not exist.`); - } + get(section, option) { + if (this.fields[section] === undefined || this.fields[section][option] === undefined) { + throw new Error(`Filed "${section} => ${option}" does not exist.`); + } - const field = new Field(this.fields[section][option]) + const field = new Field(this.fields[section][option]); - if (field.value === '') { - const envField = process.env[[section.toUpperCase(), option.toUpperCase()].join('_')] - if (envField !== undefined && envField.length !== 0) { return envField } - } + if (field.value === '') { + const envField = process.env[[section.toUpperCase(), option.toUpperCase()].join('_')]; + if (envField !== undefined && envField.length !== 0) { return envField; } + } - if (field.value === undefined) { - throw new Error(`${section} => ${option} is empty.`); - } + if (field.value === undefined) { + throw new Error(`${section} => ${option} is empty.`); + } - return field.value; - } + return field.value; + } } -module.exports = Config; \ No newline at end of file +module.exports = Config; diff --git a/seasoned_api/src/config/environmentVariables.js b/seasoned_api/src/config/environmentVariables.js index d879fe7..b7fc3f2 100644 --- a/seasoned_api/src/config/environmentVariables.js +++ b/seasoned_api/src/config/environmentVariables.js @@ -1,16 +1,15 @@ class EnvironmentVariables { + constructor(variables) { + this.variables = variables || process.env; + } - constructor(variables) { - this.variables = variables || process.env; - } + get(variable) { + return this.variables[variable]; + } - get(variable) { - return this.variables[variable]; - } - - has(variable) { - return this.get(variable) !== undefined; - } + has(variable) { + return this.get(variable) !== undefined; + } } module.exports = EnvironmentVariables; diff --git a/seasoned_api/src/config/field.js b/seasoned_api/src/config/field.js index 1a8b79a..42eb8cd 100644 --- a/seasoned_api/src/config/field.js +++ b/seasoned_api/src/config/field.js @@ -2,49 +2,48 @@ const Filters = require('./filters.js'); const EnvironmentVariables = require('./environmentVariables.js'); class Field { + constructor(rawValue, environmentVariables) { + this.rawValue = rawValue; + this.filters = new Filters(rawValue); + this.valueWithoutFilters = this.filters.removeFiltersFromValue(); + this.environmentVariables = new EnvironmentVariables(environmentVariables); + } - constructor(rawValue, environmentVariables) { - this.rawValue = rawValue; - this.filters = new Filters(rawValue); - this.valueWithoutFilters = this.filters.removeFiltersFromValue(); - this.environmentVariables = new EnvironmentVariables(environmentVariables); - } + get value() { + if (this.filters.isEmpty()) { + return this.valueWithoutFilters; + } - get value() { - if (this.filters.isEmpty()) { - return this.valueWithoutFilters; - } + if (this.filters.has('base64') && !this.filters.has('env')) { + return Field.base64Decode(this.valueWithoutFilters); + } - if (this.filters.has('base64') && !this.filters.has('env')) { - return Field.base64Decode(this.valueWithoutFilters); - } + if (this.environmentVariables.has(this.valueWithoutFilters) && + this.environmentVariables.get(this.valueWithoutFilters) === '') { + return undefined; + } - if (this.environmentVariables.has(this.valueWithoutFilters) && - this.environmentVariables.get(this.valueWithoutFilters) === '') { - return undefined; - } + if (!this.filters.has('base64') && this.filters.has('env')) { + if (this.environmentVariables.has(this.valueWithoutFilters)) { + return this.environmentVariables.get(this.valueWithoutFilters); + } + return undefined; + } - if (!this.filters.has('base64') && this.filters.has('env')) { - if (this.environmentVariables.has(this.valueWithoutFilters)) { - return this.environmentVariables.get(this.valueWithoutFilters); - } - return undefined; - } + if (this.filters.has('env') && this.filters.has('base64')) { + if (this.environmentVariables.has(this.valueWithoutFilters)) { + const encodedEnvironmentVariable = this.environmentVariables.get(this.valueWithoutFilters); + return Field.base64Decode(encodedEnvironmentVariable); + } + return undefined; + } - if (this.filters.has('env') && this.filters.has('base64')) { - if (this.environmentVariables.has(this.valueWithoutFilters)) { - const encodedEnvironmentVariable = this.environmentVariables.get(this.valueWithoutFilters); - return Field.base64Decode(encodedEnvironmentVariable); - } - return undefined; - } + return this.valueWithoutFilters; + } - return this.valueWithoutFilters; - } - - static base64Decode(string) { - return new Buffer(string, 'base64').toString('utf-8'); - } + static base64Decode(string) { + return new Buffer(string, 'base64').toString('utf-8'); + } } -module.exports = Field; \ No newline at end of file +module.exports = Field; diff --git a/seasoned_api/src/config/filters.js b/seasoned_api/src/config/filters.js index fbeab07..b4ec359 100644 --- a/seasoned_api/src/config/filters.js +++ b/seasoned_api/src/config/filters.js @@ -1,35 +1,34 @@ class Filters { + constructor(value) { + this.value = value; + this.delimiter = '|'; + } - constructor(value) { - this.value = value; - this.delimiter = '|'; - } + get filters() { + return this.value.split(this.delimiter).slice(0, -1); + } - get filters() { - return this.value.split(this.delimiter).slice(0, -1); - } + isEmpty() { + return !this.hasValidType() || this.value.length === 0; + } - isEmpty() { - return !this.hasValidType() || this.value.length === 0; - } + has(filter) { + return this.filters.includes(filter); + } - has(filter) { - return this.filters.includes(filter); - } + hasValidType() { + return (typeof this.value === 'string'); + } - hasValidType() { - return (typeof this.value === 'string'); - } + removeFiltersFromValue() { + if (this.hasValidType() === false) { + return this.value; + } - removeFiltersFromValue() { - if (this.hasValidType() === false) { - return this.value; - } - - let filtersCombined = this.filters.join(this.delimiter); - filtersCombined += this.filters.length >= 1 ? this.delimiter : ''; - return this.value.replace(filtersCombined, ''); - } + let filtersCombined = this.filters.join(this.delimiter); + filtersCombined += this.filters.length >= 1 ? this.delimiter : ''; + return this.value.replace(filtersCombined, ''); + } } module.exports = Filters; diff --git a/seasoned_api/src/database/database.js b/seasoned_api/src/database/database.js index 8e509df..b71c357 100644 --- a/seasoned_api/src/database/database.js +++ b/seasoned_api/src/database/database.js @@ -1,5 +1,6 @@ const configuration = require('src/config/configuration').getInstance(); const SqliteDatabase = require('src/database/sqliteDatabase'); + const database = new SqliteDatabase(configuration.get('database', 'host')); /** @@ -9,7 +10,7 @@ const database = new SqliteDatabase(configuration.get('database', 'host')); * If the tables already exists, it simply proceeds. */ Promise.resolve() -.then(() => database.connect()) -.then(() => database.setUp()); + .then(() => database.connect()) + .then(() => database.setUp()); module.exports = database; diff --git a/seasoned_api/src/database/sqliteDatabase.js b/seasoned_api/src/database/sqliteDatabase.js index a68e207..76b92f6 100644 --- a/seasoned_api/src/database/sqliteDatabase.js +++ b/seasoned_api/src/database/sqliteDatabase.js @@ -16,8 +16,8 @@ class SqliteDatabase { */ connect() { return Promise.resolve() - .then(() => sqlite.open(this.host)) - .then(() => sqlite.exec('pragma foreign_keys = on;')); + .then(() => sqlite.open(this.host)) + .then(() => sqlite.exec('pragma foreign_keys = on;')); } /** @@ -73,10 +73,10 @@ class SqliteDatabase { * Tears down the database by running tearDown.sql file in schemas/. * @returns {Promise} */ - tearDown() { - const tearDownSchema = this.readSqlFile('tearDown.sql'); - return this.execute(tearDownSchema); - } + tearDown() { + const tearDownSchema = this.readSqlFile('tearDown.sql'); + return this.execute(tearDownSchema); + } /** * Returns the file contents of a SQL file in schemas/. diff --git a/seasoned_api/src/git/gitRepository.js b/seasoned_api/src/git/gitRepository.js index 54d0891..703ce2c 100644 --- a/seasoned_api/src/git/gitRepository.js +++ b/seasoned_api/src/git/gitRepository.js @@ -1,10 +1,9 @@ -const assert = require('assert'); class GitRepository { - - dumpHook(body) { - console.log(body); - } + static dumpHook(body) { + /* eslint-disable no-console */ + console.log(body); + } } -module.exports = GitRepository; \ No newline at end of file +module.exports = GitRepository; diff --git a/seasoned_api/src/media_classes/mediaInfo.js b/seasoned_api/src/media_classes/mediaInfo.js index 3019f25..3cbe69d 100644 --- a/seasoned_api/src/media_classes/mediaInfo.js +++ b/seasoned_api/src/media_classes/mediaInfo.js @@ -1,15 +1,15 @@ class MediaInfo { - constructor() { - this.duration = undefined; - this.height = undefined; - this.width = undefined; - this.bitrate = undefined; - this.resolution = undefined; - this.framerate = undefined; - this.protocol = undefined; - this.container = undefined; - this.audioCodec = undefined; - } + constructor() { + this.duration = undefined; + this.height = undefined; + this.width = undefined; + this.bitrate = undefined; + this.resolution = undefined; + this.framerate = undefined; + this.protocol = undefined; + this.container = undefined; + this.audioCodec = undefined; + } } -module.exports = MediaInfo; \ No newline at end of file +module.exports = MediaInfo; diff --git a/seasoned_api/src/media_classes/player.js b/seasoned_api/src/media_classes/player.js index cb430b2..e675f85 100644 --- a/seasoned_api/src/media_classes/player.js +++ b/seasoned_api/src/media_classes/player.js @@ -1,13 +1,12 @@ class Player { - constructor(device, address) { - this.device = device; - this.ip = address; - this.platform = undefined; - this.product = undefined; - this.title = undefined; - this.state = undefined; - - } + constructor(device, address) { + this.device = device; + this.ip = address; + this.platform = undefined; + this.product = undefined; + this.title = undefined; + this.state = undefined; + } } -module.exports = Player; \ No newline at end of file +module.exports = Player; diff --git a/seasoned_api/src/media_classes/user.js b/seasoned_api/src/media_classes/user.js index 73c4bec..fc09d7d 100644 --- a/seasoned_api/src/media_classes/user.js +++ b/seasoned_api/src/media_classes/user.js @@ -1,8 +1,8 @@ class User { - constructor(id, title) { - this.id = id; - this.title = title; - } + constructor(id, title) { + this.id = id; + this.title = title; + } } -module.exports = User; \ No newline at end of file +module.exports = User; diff --git a/seasoned_api/src/pirate/pirateRepository.js b/seasoned_api/src/pirate/pirateRepository.js index ca2a4fb..8dce82b 100644 --- a/seasoned_api/src/pirate/pirateRepository.js +++ b/seasoned_api/src/pirate/pirateRepository.js @@ -1,54 +1,53 @@ const assert = require('assert'); -var PythonShell = require('python-shell'); -var async = require('async'); +const PythonShell = require('python-shell'); async function find(searchterm, callback) { + const options = { + pythonPath: '/usr/bin/python3', + // pythonPath: '/Library/Frameworks/Python.framework/Versions/3.6/bin/python3', + args: [searchterm, '-s', 'piratebay', '--print'], + }; - var options = { - pythonPath: '/usr/bin/python3', - // pythonPath: '/Library/Frameworks/Python.framework/Versions/3.6/bin/python3', - args: [searchterm, '-s', 'piratebay', '--print'] - } - - PythonShell.run('../app/torrent_search/torrentSearch/search.py', options, callback); - // PythonShell does not support return -}; + PythonShell.run('../app/torrent_search/torrentSearch/search.py', options, callback); + // PythonShell does not support return +} async function callPythonAddMagnet(magnet, callback) { - var options = { - pythonPath: '/usr/bin/python', - // pythonPath: '/Library/Frameworks/Python.framework/Versions/3.6/bin/python3', - args: [magnet] - } + const options = { + pythonPath: '/usr/bin/python', + // pythonPath: '/Library/Frameworks/Python.framework/Versions/3.6/bin/python3', + args: [magnet], + }; - PythonShell.run('../app/magnet.py', options, callback); + PythonShell.run('../app/magnet.py', options, callback); } async function SearchPiratebay(query) { - return await new Promise((resolve, reject) => { - return find(query, function(err, results) { - if (err) { - console.log('THERE WAS A FUCKING ERROR!') - reject(Error('There was a error when searching for torrents')) - } - if (results) { - console.log('result', results); - resolve(JSON.parse(results, null, '\t')); - } - }) - }) + return await new Promise((resolve, reject) => find(query, (err, results) => { + if (err) { + /* eslint-disable no-console */ + console.log('THERE WAS A FUCKING ERROR!'); + reject(Error('There was a error when searching for torrents')); + } + if (results) { + /* eslint-disable no-console */ + console.log('result', results); + resolve(JSON.parse(results, null, '\t')); + } + })); } async function AddMagnet(magnet) { - return await new Promise((resolve) => { - return callPythonAddMagnet(magnet, function(err, results) { - if (err) { - console.log(err) - } - resolve({ success: true }) - }) - }) + return await new Promise(resolve => callPythonAddMagnet(magnet, (err, results) => { + if (err) { + /* eslint-disable no-console */ + console.log(err); + } + /* eslint-disable no-console */ + console.log(results); + resolve({ success: true }); + })); } -module.exports = { SearchPiratebay, AddMagnet } +module.exports = { SearchPiratebay, AddMagnet }; diff --git a/seasoned_api/src/plex/convertPlexToStream.js b/seasoned_api/src/plex/convertPlexToStream.js index 1e82173..f6ba3ef 100644 --- a/seasoned_api/src/plex/convertPlexToStream.js +++ b/seasoned_api/src/plex/convertPlexToStream.js @@ -5,15 +5,15 @@ const convertStreamToUser = require('src/plex/stream/convertStreamToUser'); const ConvertStreamToPlayback = require('src/plex/stream/convertStreamToPlayback'); function convertPlexToStream(plexStream) { - const stream = convertPlexToSeasoned(plexStream) - const plexStreamMedia = plexStream.Media[0] - stream.mediaInfo = convertStreamToMediaInfo(plexStreamMedia); - stream.player = convertStreamToPlayer(plexStream.Player); + const stream = convertPlexToSeasoned(plexStream); + const plexStreamMedia = plexStream.Media[0]; + stream.mediaInfo = convertStreamToMediaInfo(plexStreamMedia); + stream.player = convertStreamToPlayer(plexStream.Player); - stream.user = convertStreamToUser(plexStream.User); - stream.playback = new ConvertStreamToPlayback(plexStreamMedia.Part[0]); + stream.user = convertStreamToUser(plexStream.User); + stream.playback = new ConvertStreamToPlayback(plexStreamMedia.Part[0]); - return stream; + return stream; } -module.exports = convertPlexToStream; \ No newline at end of file +module.exports = convertPlexToStream; diff --git a/seasoned_api/src/plex/convertStreamToMediaInfo.js b/seasoned_api/src/plex/convertStreamToMediaInfo.js index 60d6c1d..ca75776 100644 --- a/seasoned_api/src/plex/convertStreamToMediaInfo.js +++ b/seasoned_api/src/plex/convertStreamToMediaInfo.js @@ -1,22 +1,22 @@ const MediaInfo = require('src/media_classes/mediaInfo'); function convertStreamToMediaInfo(plexStream) { - const mediaInfo = new MediaInfo(); - - mediaInfo.duration = plexStream.duration; - mediaInfo.height = plexStream.height; - mediaInfo.width = plexStream.width; + const mediaInfo = new MediaInfo(); - if (plexStream.bitrate) { - mediaInfo.bitrate = plexStream.bitrate; - } - mediaInfo.resolution = plexStream.videoResolution; - mediaInfo.framerate = plexStream.videoFrameRate; - mediaInfo.protocol = plexStream.protocol; - mediaInfo.container = plexStream.container; - mediaInfo.audioCodec = plexStream.audioCodec; + mediaInfo.duration = plexStream.duration; + mediaInfo.height = plexStream.height; + mediaInfo.width = plexStream.width; - return mediaInfo; + if (plexStream.bitrate) { + mediaInfo.bitrate = plexStream.bitrate; + } + mediaInfo.resolution = plexStream.videoResolution; + mediaInfo.framerate = plexStream.videoFrameRate; + mediaInfo.protocol = plexStream.protocol; + mediaInfo.container = plexStream.container; + mediaInfo.audioCodec = plexStream.audioCodec; + + return mediaInfo; } -module.exports = convertStreamToMediaInfo; \ No newline at end of file +module.exports = convertStreamToMediaInfo; diff --git a/seasoned_api/src/plex/hookDump.js b/seasoned_api/src/plex/hookDump.js index 1761757..23cecf4 100644 --- a/seasoned_api/src/plex/hookDump.js +++ b/seasoned_api/src/plex/hookDump.js @@ -1,14 +1,7 @@ -/* -* @Author: KevinMidboe -* @Date: 2017-05-03 23:26:46 -* @Last Modified by: KevinMidboe -* @Last Modified time: 2017-05-03 23:27:59 -*/ - const configuration = require('src/config/configuration').getInstance(); function hookDumpController(req, res) { - console.log(req); + console.log(req); } -module.exports = hookDumpController; \ No newline at end of file +module.exports = hookDumpController; diff --git a/seasoned_api/src/plex/mailTemplate.js b/seasoned_api/src/plex/mailTemplate.js index c07e34f..64d38a9 100644 --- a/seasoned_api/src/plex/mailTemplate.js +++ b/seasoned_api/src/plex/mailTemplate.js @@ -1,26 +1,25 @@ class mailTemplate { - - constructor(mediaItem) { - this.mediaItem = mediaItem; - this.posterURL = 'https://image.tmdb.org/t/p/w600'; - } + constructor(mediaItem) { + this.mediaItem = mediaItem; + this.posterURL = 'https://image.tmdb.org/t/p/w600'; + } - toText() { - return this.mediaItem.title + ' (' + this.mediaItem.year + ')'; // plain text body - } + toText() { + return `${this.mediaItem.title} (${this.mediaItem.year})`; // plain text body + } - toHTML() { - const info = { - name: this.mediaItem.title, - year: '(' + this.mediaItem.year + ')', - poster: this.posterURL + this.mediaItem.poster - } + toHTML() { + const info = { + name: this.mediaItem.title, + year: `(${this.mediaItem.year})`, + poster: this.posterURL + this.mediaItem.poster, + }; - return ` -

${info.name} ${info.year}

- - ` - } + return ` +

${info.name} ${info.year}

+ + `; + } } -module.exports = mailTemplate; \ No newline at end of file +module.exports = mailTemplate; diff --git a/seasoned_api/src/plex/plexRepository.js b/seasoned_api/src/plex/plexRepository.js index 2a3b975..bde5c01 100644 --- a/seasoned_api/src/plex/plexRepository.js +++ b/seasoned_api/src/plex/plexRepository.js @@ -1,87 +1,80 @@ -const assert = require('assert'); const convertPlexToSeasoned = require('src/plex/convertPlexToSeasoned'); const convertPlexToStream = require('src/plex/convertPlexToStream'); -var rp = require('request-promise'); - -const PLEX_METHODS = ['lookup', 'playing'] +const rp = require('request-promise'); class PlexRepository { + inPlex(tmdbResult) { + return Promise.resolve() + .then(() => this.search(tmdbResult.title)) + .then(plexResult => this.compareTmdbToPlex(tmdbResult, plexResult)); + } - search(query, callback) { - var options = { - uri: 'http://10.0.0.44:32400/search?query=' + query, - headers: { - 'Accept': 'application/json' - }, - json: true - } + search(query) { + const options = { + uri: `http://10.0.0.44:32400/search?query=${query}`, + headers: { + Accept: 'application/json', + }, + json: true, + }; - return rp(options) - .then((result) => this.mapResults(result)) - .then(([mappedResults, resultCount]) => { - return { 'results': mappedResults, 'total_results': resultCount } - }) - } + return rp(options) + .then(result => this.mapResults(result)) + .then(([mappedResults, resultCount]) => ({ results: mappedResults, total_results: resultCount })); + } - compareTmdbToPlex(tmdb, plexResult) { - return Promise.resolve() - .then(() => { - plexResult.results.map((plexItem) => { - if (tmdb.title === plexItem.title && tmdb.year === plexItem.year) - tmdb.matchedInPlex = true; - }) - return tmdb - }) - } + static compareTmdbToPlex(tmdb, plexResult) { + return Promise.resolve() + .then(() => { + plexResult.results.map((plexItem) => { + if (tmdb.title === plexItem.title && tmdb.year === plexItem.year) { tmdb.matchedInPlex = true; } + return tmdb; + }); + return tmdb; + }); + } - inPlex(tmdbResult) { - return Promise.resolve() - .then(() => this.search(tmdbResult.title)) - .then((plexResult) => this.compareTmdbToPlex(tmdbResult, plexResult)) - } + static mapResults(response) { + return Promise.resolve() + .then(() => { + if (!response.MediaContainer.hasOwnProperty('Metadata')) return [[], 0]; - mapResults(response) { - return Promise.resolve() - .then(() => { - if (! response.MediaContainer.hasOwnProperty('Metadata')) return [[], 0] + const mappedResults = response.MediaContainer.Metadata.filter((element) => { + return (element.type === 'movie' || element.type === 'show'); + }).map((element) => convertPlexToSeasoned(element)); + return [mappedResults, mappedResults.length]; + }) + .catch((error) => { throw new Error(error); }); + } - const mappedResults = response.MediaContainer.Metadata.filter((element) => { - return (element.type === 'movie' || element.type === 'show') - }).map((element) => convertPlexToSeasoned(element)) - return [mappedResults, mappedResults.length] - }) - .catch((error) => {throw new Error(error)}) - } + nowPlaying() { + const options = { + uri: 'http://10.0.0.44:32400/status/sessions', + headers: { + Accept: 'application/json', + }, + json: true, + }; - nowPlaying() { - var options = { - uri: 'http://10.0.0.44:32400/status/sessions', - headers: { - 'Accept': 'application/json' - }, - json: true - } + return rp(options) + .then((result) => { + if (result.MediaContainer.size > 0) { + const playing = result.MediaContainer.Video.map(convertPlexToStream); + return { size: Object.keys(playing).length, video: playing }; + } + return { size: 0, video: [] }; + }) + .catch((err) => { + throw new Error(`Error handling plex playing. Error: ${err}`); + }); + } - return rp(options) - .then((result) => { - if (result.MediaContainer.size > 0) { - var playing = result.MediaContainer.Video.map(convertPlexToStream); - return {'size': Object.keys(playing).length, 'video': playing }; - } else { - return { 'size': 0, 'video': [] }; - } - }) - .catch((err) => { - throw new Error('Error handling plex playing. Error: ' + err); - }) - } - - // multipleInPlex(tmdbResults) { - // const results = tmdbResults.results.map(async (tmdb) => { - // return this.inPlex(tmdb) - // }) - // return Promise.all(results) - // } + // multipleInPlex(tmdbResults) { + // const results = tmdbResults.results.map(async (tmdb) => { + // return this.inPlex(tmdb) + // }) + // return Promise.all(results) + // } } module.exports = PlexRepository; diff --git a/seasoned_api/src/plex/requestRepository.js b/seasoned_api/src/plex/requestRepository.js index b24e7f8..3cfb60b 100644 --- a/seasoned_api/src/plex/requestRepository.js +++ b/seasoned_api/src/plex/requestRepository.js @@ -1,132 +1,117 @@ -const assert = require('assert'); const PlexRepository = require('src/plex/plexRepository'); -const plexRepository = new PlexRepository(); -const configuration = require('src/config/configuration').getInstance(); const Cache = require('src/tmdb/cache'); +const configuration = require('src/config/configuration').getInstance(); const TMDB = require('src/tmdb/tmdb'); -const cache = new Cache(); -const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); -var Promise = require('bluebird'); -var rp = require('request-promise'); - const establishedDatabase = require('src/database/database'); -const MailTemplate = require('src/plex/mailTemplate') +const plexRepository = new PlexRepository(); +const cache = new Cache(); +const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); -var pythonShell = require('python-shell'); +const MailTemplate = require('src/plex/mailTemplate'); const nodemailer = require('nodemailer'); class RequestRepository { + constructor(cache, database) { + this.database = database || establishedDatabase; + this.queries = { + insertRequest: "INSERT INTO requests VALUES (?, ?, ?, ?, ?, ?, ?, CURRENT_DATE, 'requested', ?, ?)", + fetchRequstedItems: 'SELECT * FROM requests', + updateRequestedById: 'UPDATE requests SET status = ? WHERE id is ? AND type is ?', + checkIfIdRequested: 'SELECT * FROM requests WHERE id IS ? AND type IS ?', + }; + } - constructor(cache, database) { - this.database = database || establishedDatabase; - this.queries = { - 'insertRequest': "INSERT INTO requests VALUES (?, ?, ?, ?, ?, ?, ?, CURRENT_DATE, 'requested', ?, ?)", - 'fetchRequstedItems': "SELECT * FROM requests", - 'updateRequestedById': "UPDATE requests SET status = ? WHERE id is ? AND type is ?", - 'checkIfIdRequested': "SELECT * FROM requests WHERE id IS ? AND type IS ?", - } - } + search(query, type, page) { + return Promise.resolve() + .then(() => tmdb.search(query, type, page)) + // .then((tmdbResult) => plexRepository.multipleInPlex(tmdbResult)) + .then(result => result) + .catch(error => `error in the house${error}`); + } - search(query, type, page) { - return Promise.resolve() - .then(() => tmdb.search(query, type, page)) - // .then((tmdbResult) => plexRepository.multipleInPlex(tmdbResult)) - .then((result) => { - return result - }) - .catch((error) => {return 'error in the house' + error}) - } + lookup(identifier, type = 'movie') { + return Promise.resolve() + .then(() => tmdb.lookup(identifier, type)) + .then(tmdbMovie => this.checkID(tmdbMovie)) + .then(tmdbMovie => plexRepository.inPlex(tmdbMovie)) + .catch((error) => { + throw new Error(error); + }); + } - lookup(identifier, type = 'movie') { - return Promise.resolve() - .then(() => tmdb.lookup(identifier, type)) - .then((tmdbMovie) => this.checkID(tmdbMovie)) - .then((tmdbMovie) => plexRepository.inPlex(tmdbMovie)) - .catch((error) => { - console.log(error) - }) - } + checkID(tmdbMovie) { + return Promise.resolve() + .then(() => this.database.get(this.queries.checkIfIdRequested, [tmdbMovie.id, tmdbMovie.type])) + .then((result, error) => { + if (error) { throw new Error(error); } + let already_requested = false; + if (result) { already_requested = true; } - checkID(tmdbMovie) { - return Promise.resolve() - .then(() => this.database.get(this.queries.checkIfIdRequested, [tmdbMovie.id, tmdbMovie.type])) - .then((result, error) => { - let already_requested = false; - if (result) - already_requested = true + tmdbMovie.requested = already_requested; + return tmdbMovie; + }); + } - tmdbMovie.requested = already_requested; - return tmdbMovie; - }) - - } - - /** - * Send request for given media id. - * @param {identifier, type} the id of the media object and type of media must be defined - * @returns {Promise} If nothing has gone wrong. - */ - sendRequest(identifier, type, ip, user_agent, user) { - tmdb.lookup(identifier, type).then(movie => { - - if (user === 'false') - user = 'NULL'; - console.log(user) - // Add request to database - this.database.run(this.queries.insertRequest, [movie.id, movie.title, movie.year, movie.poster_path, movie.background_path, user, ip, user_agent, movie.type]) + /** + * Send request for given media id. + * @param {identifier, type} the id of the media object and type of media must be defined + * @returns {Promise} If nothing has gone wrong. + */ + sendRequest(identifier, type, ip, user_agent, user) { + tmdb.lookup(identifier, type).then((movie) => { + if (user === 'false') { user = 'NULL'; } + // Add request to database + this.database.run(this.queries.insertRequest, [movie.id, movie.title, movie.year, movie.poster_path, movie.background_path, user, ip, user_agent, movie.type]); - // create reusable transporter object using the default SMTP transport - let transporter = nodemailer.createTransport({ - service: 'gmail', - auth: { - user: configuration.get('mail', 'user_pi'), - pass: configuration.get('mail', 'password_pi') - } - // host: configuration.get('mail', 'host'), - // port: 26, - // ignoreTLS: true, - // tls :{rejectUnauthorized: false}, - // secure: false, // secure:true for port 465, secure:false for port 587 - }); + // create reusable transporter object using the default SMTP transport + const transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: configuration.get('mail', 'user_pi'), + pass: configuration.get('mail', 'password_pi'), + }, + // host: configuration.get('mail', 'host'), + // port: 26, + // ignoreTLS: true, + // tls :{rejectUnauthorized: false}, + // secure: false, // secure:true for port 465, secure:false for port 587 + }); - const mailTemplate = new MailTemplate(movie) + const mailTemplate = new MailTemplate(movie); - // setup email data with unicode symbols - let mailOptions = { - // TODO get the mail adr from global location (easy to add) - from: 'MovieRequester ', // sender address - to: 'kevin.midboe@gmail.com', // list of receivers - subject: 'Download request', // Subject line - text: mailTemplate.toText(), - html: mailTemplate.toHTML() - }; + // setup email data with unicode symbols + const mailOptions = { + // TODO get the mail adr from global location (easy to add) + from: 'MovieRequester ', // sender address + to: 'kevin.midboe@gmail.com', // list of receivers + subject: 'Download request', // Subject line + text: mailTemplate.toText(), + html: mailTemplate.toHTML(), + }; - // send mail with defined transport object - transporter.sendMail(mailOptions, (error, info) => { - if (error) { - return console.log(error); - } - console.log('Message %s sent: %s', info.messageId, info.response); - }); + // send mail with defined transport object + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + return console.log(error); + } + console.log('Message %s sent: %s', info.messageId, info.response); + }); + }); - }) + // TODO add better response when done. + return Promise.resolve(); + } - // TODO add better response when done. - return Promise.resolve(); - - } - - fetchRequested() { - return this.database.all(this.queries.fetchRequstedItems); - } - - updateRequestedById(id, type, status) { - return this.database.run(this.queries.updateRequestedById, [status, id, type]); - } + fetchRequested() { + return this.database.all(this.queries.fetchRequstedItems); + } + updateRequestedById(id, type, status) { + return this.database.run(this.queries.updateRequestedById, [status, id, type]); + } } module.exports = RequestRepository; diff --git a/seasoned_api/src/plex/stream/convertStreamToPlayback.js b/seasoned_api/src/plex/stream/convertStreamToPlayback.js index f4fae2d..cdabee4 100644 --- a/seasoned_api/src/plex/stream/convertStreamToPlayback.js +++ b/seasoned_api/src/plex/stream/convertStreamToPlayback.js @@ -1,15 +1,14 @@ class convertStreamToPlayback { - constructor(plexStream) { - this.bitrate = plexStream.bitrate; - this.width = plexStream.width; - this.height = plexStream.height; - this.decision = plexStream.decision; - this.audioProfile = plexStream.audioProfile; - this.videoProfile = plexStream.videoProfile; - this.duration = plexStream.duration; - this.container = plexStream.container; - - } + constructor(plexStream) { + this.bitrate = plexStream.bitrate; + this.width = plexStream.width; + this.height = plexStream.height; + this.decision = plexStream.decision; + this.audioProfile = plexStream.audioProfile; + this.videoProfile = plexStream.videoProfile; + this.duration = plexStream.duration; + this.container = plexStream.container; + } } -module.exports = convertStreamToPlayback; \ No newline at end of file +module.exports = convertStreamToPlayback; diff --git a/seasoned_api/src/plex/stream/convertStreamToPlayer.js b/seasoned_api/src/plex/stream/convertStreamToPlayer.js index bb64e2f..8d4abc5 100644 --- a/seasoned_api/src/plex/stream/convertStreamToPlayer.js +++ b/seasoned_api/src/plex/stream/convertStreamToPlayer.js @@ -1,13 +1,13 @@ const Player = require('src/media_classes/player'); function convertStreamToPlayer(plexStream) { - const player = new Player(plexStream.device, plexStream.address); - player.platform = plexStream.platform; - player.product = plexStream.product; - player.title = plexStream.title; - player.state = plexStream.state; + const player = new Player(plexStream.device, plexStream.address); + player.platform = plexStream.platform; + player.product = plexStream.product; + player.title = plexStream.title; + player.state = plexStream.state; - return player; + return player; } -module.exports = convertStreamToPlayer; \ No newline at end of file +module.exports = convertStreamToPlayer; diff --git a/seasoned_api/src/plex/stream/convertStreamToUser.js b/seasoned_api/src/plex/stream/convertStreamToUser.js index bce1c2a..6b356d2 100644 --- a/seasoned_api/src/plex/stream/convertStreamToUser.js +++ b/seasoned_api/src/plex/stream/convertStreamToUser.js @@ -1,7 +1,7 @@ const User = require('src/media_classes/user'); function convertStreamToUser(plexStream) { - return new User(plexStream.id, plexStream.title); + return new User(plexStream.id, plexStream.title); } -module.exports = convertStreamToUser; \ No newline at end of file +module.exports = convertStreamToUser; diff --git a/seasoned_api/src/searchHistory/searchHistory.js b/seasoned_api/src/searchHistory/searchHistory.js index 1fabb31..c51590e 100644 --- a/seasoned_api/src/searchHistory/searchHistory.js +++ b/seasoned_api/src/searchHistory/searchHistory.js @@ -1,39 +1,38 @@ const establishedDatabase = require('src/database/database'); class SearchHistory { + constructor(database) { + this.database = database || establishedDatabase; + this.queries = { + 'create': 'insert into search_history (search_query, user_name) values (?, ?)', + 'read': 'select search_query from search_history where user_name = ? order by id desc', + }; + } - constructor(database) { - this.database = database || establishedDatabase; - this.queries = { - 'create': 'insert into search_history (search_query, user_name) values (?, ?)', - 'read': 'select search_query from search_history where user_name = ? order by id desc', - }; - } - - /** + /** * Retrive a search queries for a user from the database. * @param {User} user existing user * @returns {Promise} */ - read(user) { - return this.database.all(this.queries.read, user) - .then(rows => rows.map(row => row.search_query)); - } + read(user) { + return this.database.all(this.queries.read, user) + .then(rows => rows.map(row => row.search_query)); + } - /** + /** * Creates a new search entry in the database. * @param {User} user a new user * @param {String} searchQuery the query the user searched for * @returns {Promise} */ - create(user, searchQuery) { - return this.database.run(this.queries.create, [searchQuery, user]).catch((error) => { - if (error.message.includes('FOREIGN')) { - throw new Error('Could not create search history.'); - } - }); - } - + create(user, searchQuery) { + return this.database.run(this.queries.create, [searchQuery, user]) + .catch((error) => { + if (error.message.includes('FOREIGN')) { + throw new Error('Could not create search history.'); + } + }); + } } module.exports = SearchHistory; diff --git a/seasoned_api/src/seasoned/stray.js b/seasoned_api/src/seasoned/stray.js index ce2218f..f33e2ac 100644 --- a/seasoned_api/src/seasoned/stray.js +++ b/seasoned_api/src/seasoned/stray.js @@ -1,7 +1,7 @@ class Stray { - constructor(id) { - this.id = id; - } + constructor(id) { + this.id = id; + } } -module.exports = Stray; \ No newline at end of file +module.exports = Stray; diff --git a/seasoned_api/src/seasoned/strayRepository.js b/seasoned_api/src/seasoned/strayRepository.js index 7d439b0..05ae66f 100644 --- a/seasoned_api/src/seasoned/strayRepository.js +++ b/seasoned_api/src/seasoned/strayRepository.js @@ -1,67 +1,62 @@ const assert = require('assert'); const Stray = require('src/seasoned/stray'); const establishedDatabase = require('src/database/database'); -var pythonShell = require('python-shell'); - -function foo(e) { - throw('Foooo'); -} +const pythonShell = require('python-shell'); class StrayRepository { + constructor(database) { + this.database = database || establishedDatabase; + this.queries = { + read: 'SELECT * FROM stray_eps WHERE id = ?', + readAll: 'SELECT id, name, season, episode, verified FROM stray_eps', + readAllFiltered: 'SELECT id, name, season, episode, verified FROM stray_eps WHERE verified = ', + checkVerified: 'SELECT id FROM stray_eps WHERE verified = 0 AND id = ?', + verify: 'UPDATE stray_eps SET verified = 1 WHERE id = ?', + }; + } - constructor(database) { - this.database = database || establishedDatabase; - this.queries = { - 'read': 'SELECT * FROM stray_eps WHERE id = ?', - 'readAll': 'SELECT id, name, season, episode, verified FROM stray_eps', - 'readAllFiltered': 'SELECT id, name, season, episode, verified FROM stray_eps WHERE verified = ', - 'checkVerified': 'SELECT id FROM stray_eps WHERE verified = 0 AND id = ?', - 'verify': 'UPDATE stray_eps SET verified = 1 WHERE id = ?', - }; - } + read(strayId) { + return this.database.get(this.queries.read, strayId).then((row) => { + assert.notEqual(row, undefined, `Could not find list with id ${strayId}.`); + return row; + }); + } - read(strayId) { - return this.database.get(this.queries.read, strayId).then((row) => { - assert.notEqual(row, undefined, `Could not find list with id ${strayId}.`); - return row; - }) - } + readAll(verified = null) { + let dbSearchQuery = this.queries.readAll; + if (verified != null) { + dbSearchQuery = this.queries.readAllFiltered + verified.toString(); + } + return this.database.all(dbSearchQuery).then(rows => + rows.map((row) => { + const stray = new Stray(row.id); + stray.name = row.name; + stray.season = row.season; + stray.episode = row.episode; + stray.verified = row.verified; + return stray; + })); + } - readAll(verified = null, page = 1) { - var dbSearchQuery = this.queries.readAll; - if (verified != null) { - dbSearchQuery = this.queries.readAllFiltered + verified.toString(); - } - return this.database.all(dbSearchQuery).then(rows => - rows.map((row) => { - const stray = new Stray(row.id); - stray.name = row.name; - stray.season = row.season; - stray.episode = row.episode; - stray.verified = row.verified; - return stray; - })) - } + verifyStray(strayId) { + return this.database.get(this.queries.checkVerified, strayId).then((row) => { + assert.notEqual(row, undefined, `Stray '${strayId}' already verified.`); - verifyStray(strayId) { - return this.database.get(this.queries.checkVerified, strayId).then((row) => { - assert.notEqual(row, undefined, `Stray '${strayId}' already verified.`); + const options = { + pythonPath: '/usr/bin/python3', + args: [strayId], + }; - var options = { - pythonPath: '/usr/bin/python3', - args: [strayId] - } + pythonShell.run('../app/moveSeasoned.py', options, (err, results) => { + if (err) throw err; + // TODO Add error handling!! StrayRepository.ERROR + // results is an array consisting of messages collected during execution + console.log('results: %j', results); + }); - pythonShell.run('../app/moveSeasoned.py', options, function (err, results) { - if (err) throw err; - // TODO Add error handling!! StrayRepository.ERROR - // results is an array consisting of messages collected during execution - console.log('results: %j', results); - }); - - return this.database.run(this.queries.verify, strayId); - }) - } + return this.database.run(this.queries.verify, strayId); + }); + } } module.exports = StrayRepository; diff --git a/seasoned_api/src/tmdb/cache.js b/seasoned_api/src/tmdb/cache.js index 4c8b62e..584df15 100644 --- a/seasoned_api/src/tmdb/cache.js +++ b/seasoned_api/src/tmdb/cache.js @@ -2,43 +2,43 @@ const assert = require('assert'); const establishedDatabase = require('src/database/database'); class Cache { - constructor(database) { - this.database = database || establishedDatabase - this.queries = { - 'read': 'SELECT value, time_to_live, created_at, DATETIME("now", "localtime") as now, ' + - 'DATETIME(created_at, "+" || time_to_live || " seconds") as expires ' + - 'FROM cache WHERE key = ? AND now < expires', - 'create': 'INSERT OR REPLACE INTO cache (key, value, time_to_live) VALUES (?, ?, ?)', - }; - } + constructor(database) { + this.database = database || establishedDatabase; + this.queries = { + read: 'SELECT value, time_to_live, created_at, DATETIME("now", "localtime") as now, ' + + 'DATETIME(created_at, "+" || time_to_live || " seconds") as expires ' + + 'FROM cache WHERE key = ? AND now < expires', + create: 'INSERT OR REPLACE INTO cache (key, value, time_to_live) VALUES (?, ?, ?)', + }; + } - /** - * Retrieve an unexpired cache entry by key. - * @param {String} key of the cache entry - * @returns {Object} - */ - get(key) { - return Promise.resolve() - .then(() => this.database.get(this.queries.read, [key])) - .then((row) => { - assert(row, 'Could not find cache enrty with that key.'); - return JSON.parse(row.value); - }) - } + /** + * Retrieve an unexpired cache entry by key. + * @param {String} key of the cache entry + * @returns {Object} + */ + get(key) { + return Promise.resolve() + .then(() => this.database.get(this.queries.read, [key])) + .then((row) => { + assert(row, 'Could not find cache enrty with that key.'); + return JSON.parse(row.value); + }); + } - /** - * Insert cache entry with key and value. - * @param {String} key of the cache entry - * @param {String} value of the cache entry - * @param {Number} timeToLive the number of seconds before entry expires - * @returnsĀ {Object} - */ - set(key, value, timeToLive = 172800) { - const json = JSON.stringify(value); - return Promise.resolve() - .then(() => this.database.run(this.queries.create, [key, json, timeToLive])) - .then(() => value); - } + /** + * Insert cache entry with key and value. + * @param {String} key of the cache entry + * @param {String} value of the cache entry + * @param {Number} timeToLive the number of seconds before entry expires + * @returns {Object} + */ + set(key, value, timeToLive = 172800) { + const json = JSON.stringify(value); + return Promise.resolve() + .then(() => this.database.run(this.queries.create, [key, json, timeToLive])) + .then(() => value); + } } module.exports = Cache; diff --git a/seasoned_api/src/user/token.js b/seasoned_api/src/user/token.js index bce5c84..cd8c285 100644 --- a/seasoned_api/src/user/token.js +++ b/seasoned_api/src/user/token.js @@ -2,37 +2,36 @@ const User = require('src/user/user'); const jwt = require('jsonwebtoken'); class Token { + constructor(user) { + this.user = user; + } - constructor(user) { - this.user = user; - } + /** + * Generate a new token. + * @param {String} secret a cipher of the token + * @returns {String} + */ + toString(secret) { + return jwt.sign({ username: this.user.username }, secret); + } - /** - * Generate a new token. - * @param {String} secret a cipher of the token - * @returns {String} - */ - toString(secret) { - return jwt.sign({ username: this.user.username }, secret); - } - - /** + /** * Decode a token. * @param {Token} jwtToken an encrypted token * @param {String} secret a cipher of the token * @returns {Token} */ - static fromString(jwtToken, secret) { - let username = null; + static fromString(jwtToken, secret) { + let username = null; - try { - username = jwt.verify(jwtToken, secret).username; - } catch (error) { - throw new Error('The token is invalid.'); - } - const user = new User(username); - return new Token(user); - } + try { + username = jwt.verify(jwtToken, secret).username; + } catch (error) { + throw new Error('The token is invalid.'); + } + const user = new User(username); + return new Token(user); + } } module.exports = Token; diff --git a/seasoned_api/src/user/user.js b/seasoned_api/src/user/user.js index a4bb44c..d922fbb 100644 --- a/seasoned_api/src/user/user.js +++ b/seasoned_api/src/user/user.js @@ -1,8 +1,8 @@ class User { - constructor(username, email) { - this.username = username; - this.email = email; - } + constructor(username, email) { + this.username = username; + this.email = email; + } } -module.exports = User; \ No newline at end of file +module.exports = User; diff --git a/seasoned_api/src/user/userRepository.js b/seasoned_api/src/user/userRepository.js index b81ef30..b672a4d 100644 --- a/seasoned_api/src/user/userRepository.js +++ b/seasoned_api/src/user/userRepository.js @@ -2,58 +2,56 @@ const assert = require('assert'); const establishedDatabase = require('src/database/database'); class UserRepository { + constructor(database) { + this.database = database || establishedDatabase; + this.queries = { + read: 'select * from user where lower(user_name) = lower(?)', + create: 'insert into user (user_name, email) values(?, ?)', + change: 'update user set password = ? where user_name = ?', + retrieveHash: 'select * from user where user_name = ?', + }; + } - constructor(database) { - this.database = database || establishedDatabase; - this.queries = { - read: 'select * from user where lower(user_name) = lower(?)', - create: 'insert into user (user_name, email) values(?, ?)', - change: 'update user set password = ? where user_name = ?', - retrieveHash: 'select * from user where user_name = ?', - }; - } - - /** + /** * Create a user in a database. * @param {User} user the user you want to create * @returns {Promise} */ - create(user) { - return Promise.resolve() - .then(() => this.database.get(this.queries.read, user.username)) - .then(row => assert.equal(row, undefined)) - .then(() => this.database.run(this.queries.create, [user.username, user.email])) - .catch((error) => { - if (error.message.endsWith('email')) { - throw new Error('That email is already taken'); - } else if (error.name === 'AssertionError' || error.message.endsWith('user_name')) { - throw new Error('That username is already taken'); - } - }); - } + create(user) { + return Promise.resolve() + .then(() => this.database.get(this.queries.read, user.username)) + .then(row => assert.equal(row, undefined)) + .then(() => this.database.run(this.queries.create, [user.username, user.email])) + .catch((error) => { + if (error.message.endsWith('email')) { + throw new Error('That email is already taken'); + } else if (error.name === 'AssertionError' || error.message.endsWith('user_name')) { + throw new Error('That username is already taken'); + } + }); + } - /** + /** * Retrieve a password from a database. * @param {User} user the user you want to retrieve the password * @returns {Promise} */ - retrieveHash(user) { - return this.database.get(this.queries.retrieveHash, user.username).then((row) => { - assert(row, 'The user does not exist.'); - return row.password; - }); - } + retrieveHash(user) { + return this.database.get(this.queries.retrieveHash, user.username).then((row) => { + assert(row, 'The user does not exist.'); + return row.password; + }); + } - /** + /** * Change a user's password in a database. * @param {User} user the user you want to create * @param {String} password the new password you want to change * @returns {Promise} */ - changePassword(user, password) { - return this.database.run(this.queries.change, [password, user.username]); - } - + changePassword(user, password) { + return this.database.run(this.queries.change, [password, user.username]); + } } module.exports = UserRepository; diff --git a/seasoned_api/src/user/userSecurity.js b/seasoned_api/src/user/userSecurity.js index 185b1bd..71583db 100644 --- a/seasoned_api/src/user/userSecurity.js +++ b/seasoned_api/src/user/userSecurity.js @@ -2,75 +2,74 @@ const bcrypt = require('bcrypt-nodejs'); const UserRepository = require('src/user/userRepository'); class UserSecurity { + constructor(database) { + this.userRepository = new UserRepository(database); + } - constructor(database) { - this.userRepository = new UserRepository(database); - } - - /** + /** * Create a new user in PlanFlix. * @param {User} user the new user you want to create * @param {String} clearPassword a password of the user * @returns {Promise} */ - createNewUser(user, clearPassword) { - if (user.username.trim() === '') { - throw new Error('The username is empty.'); - } else if (user.email.trim() === '') { - throw new Error('The email is empty.'); - } else if (clearPassword.trim() === '') { - throw new Error('The password is empty.'); - } else { - return Promise.resolve() - .then(() => this.userRepository.create(user)) - .then(() => UserSecurity.hashPassword(clearPassword)) - .then(hash => this.userRepository.changePassword(user, hash)); - } - } + createNewUser(user, clearPassword) { + if (user.username.trim() === '') { + throw new Error('The username is empty.'); + } else if (user.email.trim() === '') { + throw new Error('The email is empty.'); + } else if (clearPassword.trim() === '') { + throw new Error('The password is empty.'); + } else { + return Promise.resolve() + .then(() => this.userRepository.create(user)) + .then(() => UserSecurity.hashPassword(clearPassword)) + .then(hash => this.userRepository.changePassword(user, hash)); + } + } - /** + /** * Login into PlanFlix. * @param {User} user the user you want to login * @param {String} clearPassword the user's password * @returns {Promise} */ - login(user, clearPassword) { - return Promise.resolve() - .then(() => this.userRepository.retrieveHash(user)) - .then(hash => UserSecurity.compareHashes(hash, clearPassword)) - .catch(() => { throw new Error('Wrong username or password.'); }); - } + login(user, clearPassword) { + return Promise.resolve() + .then(() => this.userRepository.retrieveHash(user)) + .then(hash => UserSecurity.compareHashes(hash, clearPassword)) + .catch(() => { throw new Error('Wrong username or password.'); }); + } - /** + /** * Compare between a password and a hash password from database. * @param {String} hash the hash password from database * @param {String} clearPassword the user's password * @returns {Promise} */ - static compareHashes(hash, clearPassword) { - return new Promise((resolve, reject) => { - bcrypt.compare(clearPassword, hash, (error, matches) => { - if (matches === true) { - resolve(); - } else { - reject(); - } + static compareHashes(hash, clearPassword) { + return new Promise((resolve, reject) => { + bcrypt.compare(clearPassword, hash, (error, matches) => { + if (matches === true) { + resolve(); + } else { + reject(); + } + }); }); - }); - } + } - /** + /** * Hashes a password. * @param {String} clearPassword the user's password * @returns {Promise} */ - static hashPassword(clearPassword) { - return new Promise((resolve) => { - bcrypt.hash(clearPassword, null, null, (error, hash) => { - resolve(hash); + static hashPassword(clearPassword) { + return new Promise((resolve) => { + bcrypt.hash(clearPassword, null, null, (error, hash) => { + resolve(hash); + }); }); - }); - } + } } module.exports = UserSecurity; diff --git a/seasoned_api/src/webserver/app.js b/seasoned_api/src/webserver/app.js index df3dfe2..cf5aabc 100644 --- a/seasoned_api/src/webserver/app.js +++ b/seasoned_api/src/webserver/app.js @@ -5,10 +5,9 @@ const tokenToUser = require('./middleware/tokenToUser'); const mustBeAuthenticated = require('./middleware/mustBeAuthenticated'); const configuration = require('src/config/configuration').getInstance(); -// TODO: Have our raven router check if there is a value, if not don't enable raven. +// 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()); // this will let us get the data from a POST @@ -34,27 +33,27 @@ 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) { - console.log('allowed'); - 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'); + // TODO add logging of all incoming + console.log('Request: ', req.originalUrl); + const origin = req.headers.origin; + if (allowedOrigins.indexOf(origin) > -1) { + console.log('allowed'); + 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!'); + 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'); }); /** diff --git a/seasoned_api/src/webserver/controllers/git/dumpHook.js b/seasoned_api/src/webserver/controllers/git/dumpHook.js index c05ada6..cfc1637 100644 --- a/seasoned_api/src/webserver/controllers/git/dumpHook.js +++ b/seasoned_api/src/webserver/controllers/git/dumpHook.js @@ -3,13 +3,13 @@ const GitRepository = require('src/git/gitRepository'); const gitRepository = new GitRepository(); function dumpHookController(req, res) { - gitRepository.dumpHook(req.body) - .then(() => { - res.status(200); - }) - .catch((error) => { - res.status(500); - }); + gitRepository.dumpHook(req.body) + .then(() => { + res.status(200); + }) + .catch((error) => { + res.status(500); + }); } module.exports = dumpHookController; diff --git a/seasoned_api/src/webserver/controllers/pirate/addMagnet.js b/seasoned_api/src/webserver/controllers/pirate/addMagnet.js index 66d7e74..9899831 100644 --- a/seasoned_api/src/webserver/controllers/pirate/addMagnet.js +++ b/seasoned_api/src/webserver/controllers/pirate/addMagnet.js @@ -9,15 +9,15 @@ const PirateRepository = require('src/pirate/pirateRepository'); function updateRequested(req, res) { - const magnet = req.body.magnet; + const magnet = req.body.magnet; - PirateRepository.AddMagnet(magnet) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + PirateRepository.AddMagnet(magnet) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = updateRequested; diff --git a/seasoned_api/src/webserver/controllers/pirate/searchTheBay.js b/seasoned_api/src/webserver/controllers/pirate/searchTheBay.js index 6ee8eee..4f85f69 100644 --- a/seasoned_api/src/webserver/controllers/pirate/searchTheBay.js +++ b/seasoned_api/src/webserver/controllers/pirate/searchTheBay.js @@ -15,15 +15,15 @@ const PirateRepository = require('src/pirate/pirateRepository'); * @returns {Callback} */ function updateRequested(req, res) { - const { query, page, type } = req.query; + const { query, page, type } = req.query; - PirateRepository.SearchPiratebay(query, page, type) - .then((result) => { - res.send({ success: true, torrents: result }); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + PirateRepository.SearchPiratebay(query, page, type) + .then((result) => { + res.send({ success: true, torrents: result }); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = updateRequested; diff --git a/seasoned_api/src/webserver/controllers/plex/fetchRequested.js b/seasoned_api/src/webserver/controllers/plex/fetchRequested.js index 673e306..1602aba 100644 --- a/seasoned_api/src/webserver/controllers/plex/fetchRequested.js +++ b/seasoned_api/src/webserver/controllers/plex/fetchRequested.js @@ -9,15 +9,15 @@ const requestRepository = new RequestRepository(); * @returns {Callback} */ function historyController(req, res) { - const user = req.loggedInUser; + // const user = req.loggedInUser; - requestRepository.fetchRequested() - .then((requestedItems) => { - res.send({ success: true, results: requestedItems, total_results: requestedItems.length }); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + requestRepository.fetchRequested() + .then((requestedItems) => { + res.send({ success: true, results: requestedItems, total_results: requestedItems.length }); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = historyController; diff --git a/seasoned_api/src/webserver/controllers/plex/hookDump.js b/seasoned_api/src/webserver/controllers/plex/hookDump.js index 1761757..82d4e69 100644 --- a/seasoned_api/src/webserver/controllers/plex/hookDump.js +++ b/seasoned_api/src/webserver/controllers/plex/hookDump.js @@ -2,13 +2,11 @@ * @Author: KevinMidboe * @Date: 2017-05-03 23:26:46 * @Last Modified by: KevinMidboe -* @Last Modified time: 2017-05-03 23:27:59 +* @Last Modified time: 2018-02-06 20:54:22 */ -const configuration = require('src/config/configuration').getInstance(); - function hookDumpController(req, res) { - console.log(req); + console.log(req); } -module.exports = hookDumpController; \ No newline at end of file +module.exports = hookDumpController; diff --git a/seasoned_api/src/webserver/controllers/plex/plexPlaying.js b/seasoned_api/src/webserver/controllers/plex/plexPlaying.js index 2670ea0..a14ec6a 100644 --- a/seasoned_api/src/webserver/controllers/plex/plexPlaying.js +++ b/seasoned_api/src/webserver/controllers/plex/plexPlaying.js @@ -1,14 +1,15 @@ const PlexRepository = require('src/plex/plexRepository'); + const plexRepository = new PlexRepository(); function playingController(req, res) { - plexRepository.nowPlaying() - .then((movies) => { - res.send(movies); - }) - .catch((error) => { - res.status(500).send({success: false, error: error.message }); - }) + plexRepository.nowPlaying() + .then((movies) => { + res.send(movies); + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } -module.exports = playingController; \ No newline at end of file +module.exports = playingController; diff --git a/seasoned_api/src/webserver/controllers/plex/readRequest.js b/seasoned_api/src/webserver/controllers/plex/readRequest.js index 0524a2f..351dae6 100644 --- a/seasoned_api/src/webserver/controllers/plex/readRequest.js +++ b/seasoned_api/src/webserver/controllers/plex/readRequest.js @@ -1,4 +1,5 @@ const RequestRepository = require('src/plex/requestRepository'); + const requestRepository = new RequestRepository(); /** @@ -8,14 +9,14 @@ const requestRepository = new RequestRepository(); * @returns {Callback} */ function readRequestController(req, res) { - const mediaId = req.params.mediaId; - const { type } = req.query; - requestRepository.lookup(mediaId, type) - .then((movies) => { - res.send(movies); - }).catch((error) => { - res.status(404).send({ success: false, error: error.message }); - }); + const mediaId = req.params.mediaId; + const { type } = req.query; + requestRepository.lookup(mediaId, type) + .then((movies) => { + res.send(movies); + }).catch((error) => { + res.status(404).send({ success: false, error: error.message }); + }); } module.exports = readRequestController; diff --git a/seasoned_api/src/webserver/controllers/plex/searchMedia.js b/seasoned_api/src/webserver/controllers/plex/searchMedia.js index bef7f26..3351f6c 100644 --- a/seasoned_api/src/webserver/controllers/plex/searchMedia.js +++ b/seasoned_api/src/webserver/controllers/plex/searchMedia.js @@ -1,27 +1,28 @@ const PlexRepository = require('src/plex/plexRepository'); + const plexRepository = new PlexRepository(); /** - * Controller: Search for media and check existence + * Controller: Search for media and check existence * in plex by query and page * @param {Request} req http request variable * @param {Response} res * @returns {Callback} */ function searchMediaController(req, res) { - const { query, page } = req.query; + const { query } = req.query; - plexRepository.searchMedia(query) - .then((media) => { - if (media !== undefined || media.length > 0) { - res.send(media); - } else { - res.status(404).send({ success: false, error: 'Search query did not return any results.'}) - } - }) - .catch((error) => { - res.status(500).send({success: false, error: error.message }); - }) + plexRepository.search(query) + .then((media) => { + if (media !== undefined || media.length > 0) { + res.send(media); + } else { + res.status(404).send({ success: false, error: 'Search query did not return any results.' }); + } + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } -module.exports = searchMediaController; \ No newline at end of file +module.exports = searchMediaController; diff --git a/seasoned_api/src/webserver/controllers/plex/searchRequest.js b/seasoned_api/src/webserver/controllers/plex/searchRequest.js index 8be256a..e5b038c 100644 --- a/seasoned_api/src/webserver/controllers/plex/searchRequest.js +++ b/seasoned_api/src/webserver/controllers/plex/searchRequest.js @@ -1,24 +1,25 @@ const SearchHistory = require('src/searchHistory/searchHistory'); const Cache = require('src/tmdb/cache'); const RequestRepository = require('src/plex/requestRepository.js'); + const cache = new Cache(); const requestRepository = new RequestRepository(cache); const searchHistory = new SearchHistory(); function searchRequestController(req, res) { - const user = req.headers.loggedinuser; - const { query, page, type } = req.query; + const user = req.headers.loggedinuser; + const { query, page, type } = req.query; - Promise.resolve() - .then(() => searchHistory.create(user, query)) - .then(() => requestRepository.search(query, page, type)) - .then((searchResult) => { - res.send(searchResult); - }) - .catch((error) => { - res.status(500).send({success: false, error: error.message }); - }) + Promise.resolve() + .then(() => searchHistory.create(user, query)) + .then(() => requestRepository.search(query, page, type)) + .then((searchResult) => { + res.send(searchResult); + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } -module.exports = searchRequestController; \ No newline at end of file +module.exports = searchRequestController; diff --git a/seasoned_api/src/webserver/controllers/plex/submitRequest.js b/seasoned_api/src/webserver/controllers/plex/submitRequest.js index 08f4ca3..6afb085 100644 --- a/seasoned_api/src/webserver/controllers/plex/submitRequest.js +++ b/seasoned_api/src/webserver/controllers/plex/submitRequest.js @@ -1,4 +1,5 @@ const RequestRepository = require('src/plex/requestRepository.js'); + const requestRepository = new RequestRepository(); /** @@ -9,20 +10,20 @@ const requestRepository = new RequestRepository(); */ function submitRequestController(req, res) { - // This is the id that is the param of the url - const id = req.params.mediaId; - const type = req.query.type; - const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; - const user_agent = req.headers['user-agent'] - const user = req.headers.loggedinuser; + // This is the id that is the param of the url + const id = req.params.mediaId; + const type = req.query.type; + const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; + const user_agent = req.headers['user-agent']; + const user = req.headers.loggedinuser; - requestRepository.sendRequest(id, type, ip, user_agent, user) - .then(() => { - res.send({ success: true, message: 'Media item sucessfully requested!' }); - }) - .catch((error) => { - res.status(500).send({ success: false, error: error.message }); - }); + requestRepository.sendRequest(id, type, ip, user_agent, user) + .then(() => { + res.send({ success: true, message: 'Media item sucessfully requested!' }); + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } -module.exports = submitRequestController; \ No newline at end of file +module.exports = submitRequestController; diff --git a/seasoned_api/src/webserver/controllers/plex/updateRequested.js b/seasoned_api/src/webserver/controllers/plex/updateRequested.js index 57b2638..6057bf4 100644 --- a/seasoned_api/src/webserver/controllers/plex/updateRequested.js +++ b/seasoned_api/src/webserver/controllers/plex/updateRequested.js @@ -1,4 +1,5 @@ const RequestRepository = require('src/plex/requestRepository'); + const requestRepository = new RequestRepository(); /** @@ -8,17 +9,17 @@ const requestRepository = new RequestRepository(); * @returns {Callback} */ function updateRequested(req, res) { - const id = req.params.requestId; - const type = req.body.type; - const status = req.body.status; + const id = req.params.requestId; + const type = req.body.type; + const status = req.body.status; - requestRepository.updateRequestedById(id, type, status) - .then(() => { - res.send({ success: true }); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + requestRepository.updateRequestedById(id, type, status) + .then(() => { + res.send({ success: true }); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = updateRequested; diff --git a/seasoned_api/src/webserver/controllers/seasoned/readStrays.js b/seasoned_api/src/webserver/controllers/seasoned/readStrays.js index 5e5193b..1f87b31 100644 --- a/seasoned_api/src/webserver/controllers/seasoned/readStrays.js +++ b/seasoned_api/src/webserver/controllers/seasoned/readStrays.js @@ -1,16 +1,17 @@ const StrayRepository = require('src/seasoned/strayRepository'); + const strayRepository = new StrayRepository(); function readStraysController(req, res) { - const { verified, page } = req.query; - strayRepository.readAll(verified, page) - .then((strays) => { - res.send(strays); - }) - .catch((error) => { - res.status(500).send({success: false, error: error.message }); - }); + const { verified, page } = req.query; + strayRepository.readAll(verified, page) + .then((strays) => { + res.send(strays); + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } -module.exports = readStraysController; \ No newline at end of file +module.exports = readStraysController; diff --git a/seasoned_api/src/webserver/controllers/seasoned/strayById.js b/seasoned_api/src/webserver/controllers/seasoned/strayById.js index e86e2ed..9cdd57c 100644 --- a/seasoned_api/src/webserver/controllers/seasoned/strayById.js +++ b/seasoned_api/src/webserver/controllers/seasoned/strayById.js @@ -1,17 +1,17 @@ -const configuration = require('src/config/configuration').getInstance(); const StrayRepository = require('src/seasoned/strayRepository'); + const strayRepository = new StrayRepository(); function strayByIdController(req, res) { - const id = req.params.strayId; + const id = req.params.strayId; - strayRepository.read(id) - .then((stray) => { - res.send(stray); - }) - .catch((error) => { - res.status(500).send({ success: false, error: error.message }); - }); + strayRepository.read(id) + .then((stray) => { + res.send(stray); + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } module.exports = strayByIdController; diff --git a/seasoned_api/src/webserver/controllers/seasoned/verifyStray.js b/seasoned_api/src/webserver/controllers/seasoned/verifyStray.js index 3f5bf92..79c807c 100644 --- a/seasoned_api/src/webserver/controllers/seasoned/verifyStray.js +++ b/seasoned_api/src/webserver/controllers/seasoned/verifyStray.js @@ -3,15 +3,15 @@ const StrayRepository = require('src/seasoned/strayRepository'); const strayRepository = new StrayRepository(); function verifyStrayController(req, res) { - const id = req.params.strayId; + const id = req.params.strayId; - strayRepository.verifyStray(id) - .then(() => { - res.send({ success: true, message: 'Episode verified' }); - }) - .catch((error) => { - res.status(500).send({ success: false, error: error.message }); - }); + strayRepository.verifyStray(id) + .then(() => { + res.send({ success: true, message: 'Episode verified' }); + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } module.exports = verifyStrayController; diff --git a/seasoned_api/src/webserver/controllers/tmdb/listSearch.js b/seasoned_api/src/webserver/controllers/tmdb/listSearch.js index 276fd12..103f94c 100644 --- a/seasoned_api/src/webserver/controllers/tmdb/listSearch.js +++ b/seasoned_api/src/webserver/controllers/tmdb/listSearch.js @@ -1,10 +1,10 @@ const configuration = require('src/config/configuration').getInstance(); const Cache = require('src/tmdb/cache'); const TMDB = require('src/tmdb/tmdb'); + const cache = new Cache(); const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); - /** * Controller: Retrieve nowplaying movies / now airing shows * @param {Request} req http request variable @@ -12,15 +12,14 @@ const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); * @returns {Callback} */ function listSearchController(req, res) { - const listname = req.params.listname; - const { type, id, page } = req.query; - console.log(listname, type, id, page) - tmdb.listSearch(listname, type, id, page) - .then((results) => { - res.send(results); - }).catch((error) => { - res.status(404).send({ success: false, error: error.message }); - }); + const listname = req.params.listname; + const { type, id, page } = req.query; + tmdb.listSearch(listname, type, id, page) + .then((results) => { + res.send(results); + }).catch((error) => { + res.status(404).send({ success: false, error: error.message }); + }); } module.exports = listSearchController; diff --git a/seasoned_api/src/webserver/controllers/tmdb/readMedia.js b/seasoned_api/src/webserver/controllers/tmdb/readMedia.js index d9d86a4..d2c7294 100644 --- a/seasoned_api/src/webserver/controllers/tmdb/readMedia.js +++ b/seasoned_api/src/webserver/controllers/tmdb/readMedia.js @@ -1,6 +1,7 @@ const configuration = require('src/config/configuration').getInstance(); const Cache = require('src/tmdb/cache'); const TMDB = require('src/tmdb/tmdb'); + const cache = new Cache(); const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); @@ -11,14 +12,14 @@ const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); * @returns {Callback} */ function readMediaController(req, res) { - const mediaId = req.params.mediaId; - const { type } = req.query; - tmdb.lookup(mediaId, type) - .then((movies) => { - res.send(movies); - }).catch((error) => { - res.status(404).send({ success: false, error: error.message }); - }); + const mediaId = req.params.mediaId; + const { type } = req.query; + tmdb.lookup(mediaId, type) + .then((movies) => { + res.send(movies); + }).catch((error) => { + res.status(404).send({ success: false, error: error.message }); + }); } module.exports = readMediaController; diff --git a/seasoned_api/src/webserver/controllers/tmdb/searchMedia.js b/seasoned_api/src/webserver/controllers/tmdb/searchMedia.js index 4443bde..5d5910e 100644 --- a/seasoned_api/src/webserver/controllers/tmdb/searchMedia.js +++ b/seasoned_api/src/webserver/controllers/tmdb/searchMedia.js @@ -1,6 +1,7 @@ const configuration = require('src/config/configuration').getInstance(); const Cache = require('src/tmdb/cache'); const TMDB = require('src/tmdb/tmdb'); + const cache = new Cache(); const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); @@ -11,20 +12,20 @@ const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); * @returns {Callback} */ function searchMediaController(req, res) { - const { query, page, type } = req.query; + const { query, page, type } = req.query; - Promise.resolve() - .then(() => tmdb.search(query, page, type)) - .then((movies) => { - if (movies !== undefined || movies.length > 0) { - res.send(movies); - } else { - res.status(404).send({ success: false, error: 'Search query did not return any results.'}) - } - }) - .catch((error) => { - res.status(500).send({ success: false, error: error.message }); - }); + Promise.resolve() + .then(() => tmdb.search(query, page, type)) + .then((movies) => { + if (movies !== undefined || movies.length > 0) { + res.send(movies); + } else { + res.status(404).send({ success: false, error: 'Search query did not return any results.' }); + } + }) + .catch((error) => { + res.status(500).send({ success: false, error: error.message }); + }); } module.exports = searchMediaController; diff --git a/seasoned_api/src/webserver/controllers/user/history.js b/seasoned_api/src/webserver/controllers/user/history.js index e619d19..a396c1d 100644 --- a/seasoned_api/src/webserver/controllers/user/history.js +++ b/seasoned_api/src/webserver/controllers/user/history.js @@ -1,4 +1,5 @@ const SearchHistory = require('src/searchHistory/searchHistory'); + const searchHistory = new SearchHistory(); /** @@ -8,15 +9,15 @@ const searchHistory = new SearchHistory(); * @returns {Callback} */ function historyController(req, res) { - const user = req.loggedInUser; + const user = req.loggedInUser; - searchHistory.read(user) - .then((searchQueries) => { - res.send({ success: true, searchQueries }); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + searchHistory.read(user) + .then((searchQueries) => { + res.send({ success: true, searchQueries }); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = historyController; diff --git a/seasoned_api/src/webserver/controllers/user/login.js b/seasoned_api/src/webserver/controllers/user/login.js index 4fe7755..e839276 100644 --- a/seasoned_api/src/webserver/controllers/user/login.js +++ b/seasoned_api/src/webserver/controllers/user/login.js @@ -2,6 +2,7 @@ const User = require('src/user/user'); const Token = require('src/user/token'); const UserSecurity = require('src/user/userSecurity'); const configuration = require('src/config/configuration').getInstance(); + const secret = configuration.get('authentication', 'secret'); const userSecurity = new UserSecurity(); @@ -12,17 +13,17 @@ const userSecurity = new UserSecurity(); * @returns {Callback} */ function loginController(req, res) { - const user = new User(req.body.username); - const password = req.body.password; + const user = new User(req.body.username); + const password = req.body.password; - userSecurity.login(user, password) - .then(() => { - const token = new Token(user).toString(secret); - res.send({ success: true, token }); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + userSecurity.login(user, password) + .then(() => { + const token = new Token(user).toString(secret); + res.send({ success: true, token }); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = loginController; diff --git a/seasoned_api/src/webserver/controllers/user/register.js b/seasoned_api/src/webserver/controllers/user/register.js index b7e081a..6ca3663 100644 --- a/seasoned_api/src/webserver/controllers/user/register.js +++ b/seasoned_api/src/webserver/controllers/user/register.js @@ -1,5 +1,6 @@ const User = require('src/user/user'); const UserSecurity = require('src/user/userSecurity'); + const userSecurity = new UserSecurity(); /** @@ -9,16 +10,16 @@ const userSecurity = new UserSecurity(); * @returns {Callback} */ function registerController(req, res) { - const user = new User(req.body.username, req.body.email); - const password = req.body.password; + const user = new User(req.body.username, req.body.email); + const password = req.body.password; - userSecurity.createNewUser(user, password) - .then(() => { - res.send({ success: true, message: 'Welcome to Seasoned!' }); - }) - .catch((error) => { - res.status(401).send({ success: false, error: error.message }); - }); + userSecurity.createNewUser(user, password) + .then(() => { + res.send({ success: true, message: 'Welcome to Seasoned!' }); + }) + .catch((error) => { + res.status(401).send({ success: false, error: error.message }); + }); } module.exports = registerController; diff --git a/seasoned_api/src/webserver/middleware/mustBeAuthenticated.js b/seasoned_api/src/webserver/middleware/mustBeAuthenticated.js index 7613179..17a8973 100644 --- a/seasoned_api/src/webserver/middleware/mustBeAuthenticated.js +++ b/seasoned_api/src/webserver/middleware/mustBeAuthenticated.js @@ -1,11 +1,11 @@ const mustBeAuthenticated = (req, res, next) => { - - if (req.loggedInUser === undefined) { - return res.status(401).send({ - success: false, - error: 'You must be logged in.', - }); } - return next(); + if (req.loggedInUser === undefined) { + return res.status(401).send({ + success: false, + error: 'You must be logged in.', + }); + } + return next(); }; module.exports = mustBeAuthenticated; diff --git a/seasoned_api/src/webserver/middleware/tokenToUser.js b/seasoned_api/src/webserver/middleware/tokenToUser.js index 08e8f2a..462d077 100644 --- a/seasoned_api/src/webserver/middleware/tokenToUser.js +++ b/seasoned_api/src/webserver/middleware/tokenToUser.js @@ -1,5 +1,6 @@ /* eslint-disable no-param-reassign */ const configuration = require('src/config/configuration').getInstance(); + const secret = configuration.get('authentication', 'secret'); const Token = require('src/user/token'); @@ -7,16 +8,16 @@ const Token = require('src/user/token'); // curl -i -H "Authorization:[token]" localhost:31459/api/v1/user/history const tokenToUser = (req, res, next) => { - const rawToken = req.headers.authorization; - if (rawToken) { - try { - const token = Token.fromString(rawToken, secret); - req.loggedInUser = token.user; - } catch (error) { - req.loggedInUser = undefined; - } - } - next(); + const rawToken = req.headers.authorization; + if (rawToken) { + try { + const token = Token.fromString(rawToken, secret); + req.loggedInUser = token.user; + } catch (error) { + req.loggedInUser = undefined; + } + } + next(); }; module.exports = tokenToUser; diff --git a/seasoned_api/src/webserver/server.js b/seasoned_api/src/webserver/server.js index b045332..a3f91b4 100644 --- a/seasoned_api/src/webserver/server.js +++ b/seasoned_api/src/webserver/server.js @@ -2,7 +2,10 @@ const config = require('src/config/configuration').getInstance(); const app = require('./app'); module.exports = app.listen(config.get('webserver', 'port'), () => { - console.log('seasonedAPI'); - console.log(`Database is located at ${config.get('database', 'host')}`); - console.log(`Webserver is listening on ${config.get('webserver', 'port')}`); -}) \ No newline at end of file + /* eslint-disable no-console */ + console.log('seasonedAPI'); + /* eslint-disable no-console */ + console.log(`Database is located at ${config.get('database', 'host')}`); + /* eslint-disable no-console */ + console.log(`Webserver is listening on ${config.get('webserver', 'port')}`); +});