Files
habitica/website/common/script/libs/errors.js
Matteo Pagliazzi e7c8833c9a API v3 Rate Limiter (#12117)
* simplify ip address management by using the trust proxy express option

* add setupExpress file

* fix redirects middleware tests

* fix lint

* short circuit the ip blocking middleware

* basic implementation with ip based limiting

* improve logging

* upgrade apidoc

* apidoc: add introduction section

* fix lint

* fix tests

* fix lint

* add unit tests for rate limiter

* do not send retry-after header when points are available

* automatically fix lint

* fix more lint issues

* use userId as key for rate limit when available
2020-07-18 15:00:09 +02:00

71 lines
1.7 KiB
JavaScript

/* eslint-disable max-classes-per-file */
import extendableBuiltin from './extendableBuiltin';
// Base class for custom application errors
// It extends Error and capture the stack trace
export class CustomError extends extendableBuiltin(Error) {
constructor () {
super();
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
}
// We specify an httpCode for all errors so that they can be used in the API too
export class NotAuthorized extends CustomError {
constructor (customMessage) {
super();
this.name = this.constructor.name;
this.httpCode = 401;
this.message = customMessage || 'Not authorized.';
}
}
export class BadRequest extends CustomError {
constructor (customMessage) {
super();
this.name = this.constructor.name;
this.httpCode = 400;
this.message = customMessage || 'Bad request.';
}
}
export class NotFound extends CustomError {
constructor (customMessage) {
super();
this.name = this.constructor.name;
this.httpCode = 404;
this.message = customMessage || 'Not found.';
}
}
export class Forbidden extends CustomError {
constructor (customMessage) {
super();
this.name = this.constructor.name;
this.httpCode = 403;
this.message = customMessage || 'Access forbidden.';
}
}
export class TooManyRequests extends CustomError {
constructor (customMessage) {
super();
this.name = this.constructor.name;
this.httpCode = 429;
this.message = customMessage || 'Too many requests.';
}
}
export class NotImplementedError extends CustomError {
constructor (str) {
super();
this.name = this.constructor.name;
this.message = `Method: '${str}' not implemented`;
}
}