@t2ee/cookieman
Version:
t2ee cookie middleware
74 lines • 3.01 kB
JavaScript
;
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