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')}`);
+});