Fix: Linter warnings (#137)

* Automaticly fixable eslint issues, mostly 3 -> 2 space indentation

* fix: updated plex_userid to camelcase

* Linted and some consistency refactor on middleware

* eslint uses ecmaversion 2020 & allow empty catch rule

* Started linting source files

* Fixed eslint errors & improved a lot of error handling

* Set 2 eslint rules as warning temporarly
This commit is contained in:
2022-08-20 17:21:25 +02:00
committed by GitHub
parent cfbd4965db
commit 1815a429b0
83 changed files with 1625 additions and 1294 deletions

View File

@@ -1,5 +1,5 @@
const User = require("./user");
const jwt = require("jsonwebtoken");
const User = require("./user");
class Token {
constructor(user, admin = false, settings = null) {
@@ -16,8 +16,8 @@ class Token {
toString(secret) {
const { user, admin, settings } = this;
let data = { username: user.username, settings };
if (admin) data["admin"] = admin;
const data = { username: user.username, settings };
if (admin) data.admin = admin;
return jwt.sign(data, secret, { expiresIn: "90d" });
}

View File

@@ -1,8 +1,8 @@
class User {
constructor(username, email=undefined) {
this.username = username;
this.email = email;
}
constructor(username, email = undefined) {
this.username = username;
this.email = email;
}
}
module.exports = User;

View File

@@ -1,6 +1,69 @@
const assert = require("assert");
const establishedDatabase = require("../database/database");
class LinkPlexUserError extends Error {
constructor(errorMessage = null) {
const message =
"An unexpected error occured while linking plex and seasoned accounts";
super(message);
this.statusCode = 500;
this.errorMessage = errorMessage;
this.source = "database";
}
}
class UnlinkPlexUserError extends Error {
constructor(errorMessage = null) {
const message =
"An unexpected error occured while unlinking plex and seasoned accounts";
super(message);
this.statusCode = 500;
this.errorMessage = errorMessage;
this.source = "database";
}
}
class UnexpectedUserSettingsError extends Error {
constructor(errorMessage = null) {
const message =
"An unexpected error occured while fetching settings for your account";
super(message);
this.statusCode = 500;
this.errorMessage = errorMessage;
this.source = "database";
}
}
class NoSettingsUserNotFoundError extends Error {
constructor() {
const message = "User not found, no settings to get";
super(message);
this.statusCode = 404;
}
}
const rejectUnexpectedDatabaseError = (
message,
status,
error,
reject = null
) => {
const body = {
status,
message,
source: "seasoned database"
};
if (reject == null) {
return new Promise((_, reject) => reject(body));
}
return reject(body);
};
class UserRepository {
constructor(database) {
this.database = database || establishedDatabase;
@@ -51,8 +114,7 @@ class UserRepository {
assert(row, "The user does not exist.");
return row.password;
})
.catch(err => {
console.log(error);
.catch(() => {
throw new Error("Unable to find your user.");
});
}
@@ -78,17 +140,7 @@ class UserRepository {
this.database
.run(this.queries.link, [plexUserID, username])
.then(row => resolve(row))
.catch(error => {
// TODO log this unknown db error
console.error("db error", error);
reject({
status: 500,
message:
"An unexpected error occured while linking plex and seasoned accounts",
source: "seasoned database"
});
});
.catch(error => reject(new LinkPlexUserError(error)));
});
}
@@ -102,17 +154,7 @@ class UserRepository {
this.database
.run(this.queries.unlink, username)
.then(row => resolve(row))
.catch(error => {
// TODO log this unknown db error
console.log("db error", error);
reject({
status: 500,
message:
"An unexpected error occured while unlinking plex and seasoned accounts",
source: "seasoned database"
});
});
.catch(error => reject(new UnlinkPlexUserError(error)));
});
}
@@ -138,6 +180,7 @@ class UserRepository {
.get(this.queries.getSettings, username)
.then(async row => {
if (row == null) {
// eslint-disable-next-line no-console
console.debug(
`settings do not exist for user: ${username}. Creating settings entry.`
);
@@ -153,27 +196,13 @@ class UserRepository {
reject(error);
}
} else {
reject({
status: 404,
message: "User not found, no settings to get"
});
reject(new NoSettingsUserNotFoundError());
}
}
resolve(row);
})
.catch(error => {
console.error(
"Unexpected error occured while fetching settings for your account. Error:",
error
);
reject({
status: 500,
message:
"An unexpected error occured while fetching settings for your account",
source: "seasoned database"
});
});
.catch(error => reject(new UnexpectedUserSettingsError(error)));
});
}
@@ -184,12 +213,12 @@ class UserRepository {
* @param {String} emoji
* @returns {Promsie}
*/
updateSettings(username, dark_mode = undefined, emoji = undefined) {
updateSettings(username, _darkMode = null, _emoji = null) {
const settings = this.getSettings(username);
dark_mode = dark_mode !== undefined ? dark_mode : settings.dark_mode;
emoji = emoji !== undefined ? emoji : settings.emoji;
const darkMode = _darkMode || settings.darkMode;
const emoji = _emoji || settings.emoji;
return this.dbUpdateSettings(username, dark_mode, emoji).catch(error => {
return this.dbUpdateSettings(username, darkMode, emoji).catch(error => {
if (error.status && error.message) {
return error;
}
@@ -225,32 +254,13 @@ class UserRepository {
* @param {String} username
* @returns {Promsie}
*/
dbUpdateSettings(username, dark_mode, emoji) {
return new Promise((resolve, reject) =>
dbUpdateSettings(username, darkMode, emoji) {
return new Promise(resolve =>
this.database
.run(this.queries.updateSettings, [username, dark_mode, emoji])
.run(this.queries.updateSettings, [username, darkMode, emoji])
.then(row => resolve(row))
);
}
}
const rejectUnexpectedDatabaseError = (
message,
status,
error,
reject = null
) => {
console.error(error);
const body = {
status,
message,
source: "seasoned database"
};
if (reject == null) {
return new Promise((resolve, reject) => reject(body));
}
reject(body);
};
module.exports = UserRepository;

View File

@@ -50,7 +50,7 @@ class UserSecurity {
return new Promise((resolve, reject) => {
bcrypt.compare(clearPassword, hash, (error, match) => {
if (match) resolve(true);
reject(false);
reject(error);
});
});
}
@@ -61,7 +61,7 @@ class UserSecurity {
* @returns {Promise}
*/
static hashPassword(clearPassword) {
return new Promise(resolve => {
return new Promise((resolve, reject) => {
const saltRounds = 10;
bcrypt.hash(clearPassword, saltRounds, (error, hash) => {
if (error) reject(error);