From bfea6cb28e6eeda10b47ad32e3b4acadaebf6c92 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sun, 21 Mar 2021 01:17:27 +0100 Subject: [PATCH] Don't log print permission denied stack traces Use PermissionError to signal when permission is denied for an action and prevent them being logged as stack traces in the master log. --- packages/lib/errors.js | 11 +++++++++++ packages/lib/users.js | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/lib/errors.js b/packages/lib/errors.js index 40de8d80..9e1d2f1c 100644 --- a/packages/lib/errors.js +++ b/packages/lib/errors.js @@ -16,6 +16,16 @@ class CommandError extends Error { } */ class RequestError extends Error { } +/** + * Thrown when a permission check fails. + * + * Is a subclass of RequestError to prevent logging stack traces when + * requests fail due to permission denied. + * + * @static + */ +class PermissionError extends RequestError { } + /** * Signal for messages that fail validation * @static @@ -66,6 +76,7 @@ class PluginError extends Error { module.exports = { CommandError, RequestError, + PermissionError, InvalidMessage, SessionLost, AuthenticationFailed, diff --git a/packages/lib/users.js b/packages/lib/users.js index 3bb8f60a..dd9e0930 100644 --- a/packages/lib/users.js +++ b/packages/lib/users.js @@ -9,6 +9,9 @@ "use strict"; const jwt = require("jsonwebtoken"); +const libErrors = require("./errors"); + + /** * Represents a permission that can be granted * @static @@ -254,7 +257,8 @@ class User { * "Permission denied" error is thrown. * * @param {string} permission - The permission to check for. - * @throws {Error} if the user does noh have the given permission. + * @throws {Error} If the given permission does not exist. + * @throws {module:lib/errors.PermissionError} if the user does noh have the given permission. */ checkPermission(permission) { if (!permissions.has(permission)) { @@ -267,7 +271,7 @@ class User { } } - throw new Error("Permission denied"); + throw new libErrors.PermissionError("Permission denied"); } notifyJoin(instance_id) {