UNPKG

2.22 kBJavaScriptView Raw
1/**
2 * Kettle Session support, using standard express session middleware
3 *
4 * Copyright 2013 OCAD University
5 * Copyright 2015 Raising the Floor, International
6 *
7 * Licensed under the New BSD license. You may not use this file except in
8 * compliance with this License.
9 *
10 * You may obtain a copy of the License at
11 * https://github.com/fluid-project/kettle/blob/master/LICENSE.txt
12 */
13
14"use strict";
15
16var fluid = require("infusion"),
17 kettle = fluid.registerNamespace("kettle");
18
19fluid.require("express-session", require, "kettle.npm.expressSession");
20
21kettle.npm.makeMemorySessionStore = function () {
22 return new kettle.npm.expressSession.MemoryStore();
23};
24
25
26fluid.defaults("kettle.middleware.session", {
27 gradeNames: ["kettle.plainMiddleware"],
28 store: "@expand:kettle.npm.makeMemorySessionStore()",
29 middlewareOptions: { // https://github.com/expressjs/session#sessionoptions
30 name: "kettle.sid", // used to be "key" in express 3.x
31 store: "{that}.options.store",
32 cookie: {
33 secure: false
34 },
35 secret: "kettle session secret",
36 saveUninitialized: false,
37 resave: false
38 },
39 middleware: "@expand:kettle.npm.expressSession({that}.options.middlewareOptions)"
40});
41
42/**
43 * A grade contributing the session middleware to a server's collection
44 */
45fluid.defaults("kettle.server.sessionAware", {
46 distributeOptions: {
47 record: "kettle.middleware.session",
48 target: "{that > kettle.middlewareHolder}.options.components.session.type"
49 }
50});
51
52// Grade to be applied to a request in order to opt in to session processing
53fluid.defaults("kettle.request.sessionAware", {
54 requestMiddleware: {
55 session: {
56 middleware: "{middlewareHolder}.session"
57 }
58 },
59 events: {
60 onDestroySession: null
61 },
62 listeners: {
63 "onDestroySession.destroy": {
64 funcName: "kettle.request.sessionAware.destroy",
65 args: "{that}"
66 }
67 }
68});
69
70kettle.request.sessionAware.destroy = function (request) {
71 if (request.req.session) {
72 // TODO: determine if res.clearCookie is useful here as applied in our tests
73 request.req.session.destroy();
74 }
75};