You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
4.7 KiB
JavaScript

5 years ago
"use strict";
const errorChain = require("error-chain");
let HttpError = errorChain("HttpError", { isHttpError: true });
/*** HTTP 400: Bad Request ***/
let BadRequest = HttpError.extend("BadRequest", { statusCode: 400, errorCode: "M_UNRECOGNIZED" });
let NotJson = BadRequest.extend("NotJson", { errorCode: "M_NOT_JSON" });
let BadJson = BadRequest.extend("BadJson", { errorCode: "M_BAD_JSON" });
/*** HTTP 401: Unauthorized ***/
let Unauthorized = HttpError.extend("Unauthorized", { statusCode: 401, errorCode: "M_UNAUTHORIZED" });
let MissingAccessToken = Unauthorized.extend("MissingAccessToken", { errorCode: "M_MISSING_TOKEN" });
let MissingCaptcha = Unauthorized.extend("MissingCaptcha", { errorCode: "M_CAPTCHA_NEEDED" });
5 years ago
let UIARequired = HttpError.extend("UIARequired", { statusCode: 401 });
let AuthenticationError = Unauthorized.extend("AuthenticationError", { errorCode: "M_FORBIDDEN" });
5 years ago
/*** HTTP 403: Forbidden ***/
let Forbidden = HttpError.extend("Forbidden", { statusCode: 403, errorCode: "M_FORBIDDEN" });
let InvalidAccessToken = Forbidden.extend("InvalidAccessToken", { errorCode: "M_UNKNOWN_TOKEN" });
let InvalidCaptcha = Forbidden.extend("InvalidCaptcha", { errorCode: "M_CAPTCHA_INVALID" });
let ServerNotTrusted = Forbidden.extend("ServerNotTrusted", { errorCode: "M_SERVER_NOT_TRUSTED" });
let NoGuestAccess = Forbidden.extend("NoGuestAccess", { errorCode: "M_GUEST_ACCESS_FORBIDDEN" });
let ExternalIdentifierAuthenticationFailed = Forbidden.extend("ExternalIdentifierAuthenticationFailed", { errorCode: "M_THREEPID_AUTH_FAILED" });
/*** HTTP 404: Not Found ***/
let NotFound = HttpError.extend("NotFound", { statusCode: 404, errorCode: "M_NOT_FOUND" });
let ExternalIdentifierNotFound = NotFound.extend("ExternalIdentifierNotFound", { errorCode: "M_THREEPID_NOT_FOUND" });
/*** HTTP 409: Conflict ***/
let ResourceExists = HttpError.extend("ResourceExists", { statusCode: 409 });
let UserExists = ResourceExists.extend("UserExists", { errorCode: "M_USER_IN_USE" });
let RoomExists = ResourceExists.extend("RoomExists", { errorCode: "M_ROOM_IN_USE" });
let ExternalIdentifierExists = ResourceExists.extend("ExternalIdentifierExists", { errorCode: "M_THREEPID_IN_USE" });
/*** HTTP 413: Payload Too Large ***/
let RequestTooLarge = HttpError.extend("RequestTooLarge", { statusCode: 413, errorCode: "M_TOO_LARGE" });
/*** HTTP 422: Unprocessable Entity (Invalid Payload) ***/
5 years ago
/* NOTE: Currently set to 400 instead, because that seems to be what the specification requires, even though 422 would be more appropriate. */
5 years ago
5 years ago
let InvalidData = HttpError.extend("InvalidData", { statusCode: /*422*/ 400 });
5 years ago
let InvalidUsername = InvalidData.extend("InvalidUsername", { errorCode: "M_INVALID_USERNAME" });
let InvalidRoomVersion = InvalidData.extend("InvalidRoomVersion", { errorCode: "M_UNSUPPORTED_ROOM_VERSION" });
let InvalidRoomState = InvalidData.extend("InvalidRoomState", { errorCode: "M_INVALID_ROOM_STATE" });
let InvalidStateChange = InvalidData.extend("InvalidStateChange", { errorCode: "M_BAD_STATE" });
let InvalidExternalIdentifier = InvalidData.extend("InvalidExternalIdentifier", { errorCode: "M_THREEPID_DENIED" });
let InvalidParameter = InvalidData.extend("InvalidParameter", { errorCode: "M_INVALID_PARAM" });
let MissingParameter = InvalidData.extend("MissingParameter", { errorCode: "M_MISSING_PARAM" });
let IncompatibleRoomVersion = InvalidData.extend("IncompatibleRoomVersion", { errorCode: "M_INCOMPATIBLE_ROOM_VERSION" });
5 years ago
let WeakPassword = InvalidData.extend("WeakPassword", { errorCode: "M_WEAK_PASSWORD" });
5 years ago
let ExclusiveResource = InvalidData.extend("ExclusiveResource", { errorCode: "M_EXCLUSIVE" });
5 years ago
/*** HTTP 429: Too Many Requests ***/
let TooManyRequests = HttpError.extend("TooManyRequests", { statusCode: 429, errorCode: "M_LIMIT_EXCEEDED" });
/*** HTTP 500: Internal Server Error ***/
let InternalServerError = HttpError.extend("InternalServerError", { statusCode: 500 });
let UnknownError = InternalServerError.extend("UnknownError", { errorCode: "M_UNKNOWN" });
5 years ago
let Unreachable = InternalServerError.extend("Unreachable"); /* FIXME: How to represent this with an error code? This should crash the process anyway. */
5 years ago
module.exports = {
5 years ago
HttpError, Unauthorized, MissingAccessToken, InvalidAccessToken, NotJson, BadJson, NotFound, TooManyRequests, MissingCaptcha, InvalidCaptcha, ServerNotTrusted, NoGuestAccess, UserExists, RoomExists, RequestTooLarge, InvalidUsername, InvalidRoomVersion, InvalidRoomState, InvalidStateChange, InvalidParameter, MissingParameter, IncompatibleRoomVersion, InternalServerError, UnknownError, ExclusiveResource, ResourceExists, Forbidden, BadRequest, ExternalIdentifierNotFound, ExternalIdentifierExists, ExternalIdentifierAuthenticationFailed, InvalidExternalIdentifier, WeakPassword, Unreachable, UIARequired, AuthenticationError
5 years ago
};