@dazejs/framework
Version:
Daze.js - A powerful web framework for Node.js
78 lines • 3.2 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.VerifyCsrfToken = void 0;
const minimatch_1 = __importDefault(require("minimatch"));
const response_1 = require("../../../http/response");
const decorators_1 = require("../../../decorators");
const helpers_1 = require("../../../helpers");
const defaultExcludedMethods = ['HEAD', 'GET', 'OPTIONS'];
const defaultInvalidTokenMessage = 'Invalid CSRF token';
let VerifyCsrfToken = class VerifyCsrfToken {
get except() {
return [];
}
get excludedMethods() {
return defaultExcludedMethods;
}
get invalidTokenMessage() {
return defaultInvalidTokenMessage;
}
isReadVerb(method) {
if (!method)
return false;
const excludedMethods = Array.isArray(this.excludedMethods)
? this.excludedMethods
: defaultExcludedMethods;
return !!~excludedMethods.indexOf(method.toUpperCase());
}
inExcept(requestPath) {
for (const except of this.except) {
if ((0, minimatch_1.default)(requestPath, except))
return true;
}
return false;
}
tokenValidity(request) {
const bodyToken = (request.body && typeof request.body._token === 'string')
? request.body._token : false;
const token = bodyToken
|| request.getHeader('csrf-token')
|| request.getHeader('xsrf-token')
|| request.getHeader('x-csrf-token')
|| request.getHeader('x-xsrf-token');
if (!token) {
return false;
}
if (!(0, helpers_1.app)().get('csrf').verify(request.session().get('secret'), token)) {
return false;
}
return true;
}
resolve(request, next) {
const session = request.session();
if (!session.get('secret')) {
session.set('secret', (0, helpers_1.app)().get('csrf').secretSync());
}
request._csrf = (0, helpers_1.app)().get('csrf').create(session.get('secret'));
if (this.isReadVerb(request.getMethod())
|| this.inExcept(request.getPath())
|| this.tokenValidity(request)) {
return next();
}
return new response_1.Response(this.invalidTokenMessage, 403);
}
};
VerifyCsrfToken = __decorate([
(0, decorators_1.Middleware)()
], VerifyCsrfToken);
exports.VerifyCsrfToken = VerifyCsrfToken;
//# sourceMappingURL=verify-csrf-token.js.map