UNPKG

@dazejs/framework

Version:

Daze.js - A powerful web framework for Node.js

78 lines 3.2 kB
"use strict"; 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