UNPKG

@t2ee/cookieman

Version:
74 lines 3.01 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments)).next()); }); }; const vader_1 = require("@t2ee/vader"); const Cookie_1 = require("./Cookie"); const utils_1 = require("./utils"); const Chance = require("chance"); const chance = new Chance(); function CookieMiddleware(name, defaultExpire = 3600 * 1000) { return (context, next) => __awaiter(this, void 0, void 0, function* () { const cookieHeader = context.headers['cookie'] || ''; let cookie = null; for (const cookieString of cookieHeader.split(',').map(c => c.trim())) { const [key, value] = cookieString.split('='); if (!key || !value) continue; if (key === name) { cookie = yield utils_1.store().get(value); if (cookie && cookie.expires <= new Date()) { yield utils_1.store().remove(cookie); cookie = null; } } } if (!cookie) { cookie = new Cookie_1.default(); cookie.expires = new Date(Date.now() + defaultExpire); } context['cookieman:cookie-instance'] = cookie; yield next(); cookie = context['cookieman:cookie-instance']; if (cookie && cookie.key) { if (cookie.expires <= new Date()) { yield utils_1.store().remove(cookie); return; } yield utils_1.store().set(cookie); let cookieString = `${name}=${cookie.key};Expires=${cookie.expires.toString()}`; if (cookie.path) { cookieString += `;Path=${cookie.path}`; } if (cookie.domain) { cookieString += `;Domain=${cookie.domain}`; } if (cookie.secure) { cookieString += `;Secure`; } if (cookie.httpOnly) { cookieString += `;HttpOnly`; } context.http.set('Set-Cookie', cookieString); } }); } function InjectCookie(name) { return vader_1.decorate((property) => { return (target, key) => { property.WARES.push(CookieMiddleware(name)); property.PARAMS.push({ key, paramType: 'cookieman:inject-cookie', }); }; }); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = InjectCookie; //# sourceMappingURL=InjectCookie.js.map