From 0f244e9fb8ed0c0300eef26d5e53739b034a18f5 Mon Sep 17 00:00:00 2001 From: Truong Hoang Dung Date: Thu, 13 Sep 2018 11:40:01 +0700 Subject: [PATCH 1/2] Create GetFullPathToken --- src/jwt-server.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/jwt-server.js b/src/jwt-server.js index 3d7c279..de68f1f 100644 --- a/src/jwt-server.js +++ b/src/jwt-server.js @@ -21,12 +21,10 @@ import { SessionSecretToken, SessionCookieNameToken, SessionCookieExpiresToken, + GetFullPathToken, } from './tokens.js'; import type {SessionDeps, SessionService} from './types.js'; -// Scope path to `data.` here since `jsonwebtoken` has some special top-level keys that we do not want to expose (ex: `exp`) -const getFullPath = keyPath => `data.${keyPath}`; - type JWTConfig = { secret: string, cookieName: string, @@ -37,11 +35,13 @@ class JWTSession { cookie: string | void; token: ?Object | string; config: JWTConfig; + getFullPath: string => string; - constructor(ctx: Context, config: JWTConfig) { + constructor(ctx: Context, config: JWTConfig, getFullPath: string => string) { this.config = config; this.cookie = ctx.cookies.get(this.config.cookieName); this.token = null; + this.getFullPath = getFullPath } async loadToken() { if (this.token == null) { @@ -57,14 +57,14 @@ class JWTSession { this.token, "Cannot access token before loaded, please use this plugin before any of it's dependencies" ); - return get(this.token, getFullPath(keyPath)); + return get(this.token, this.getFullPath(keyPath)); } set(keyPath: string, val: mixed): boolean { assert( this.token, "Cannot access token before loaded, please use this plugin before any of it's dependencies" ); - return set(this.token, getFullPath(keyPath), val); + return set(this.token, this.getFullPath(keyPath), val); } } @@ -76,12 +76,13 @@ const p: FusionPlugin = secret: SessionSecretToken, cookieName: SessionCookieNameToken, expires: SessionCookieExpiresToken.optional, + getFullPath: GetFullPathToken.optional, }, provides: deps => { - const {secret, cookieName, expires = 86400} = deps; + const {secret, cookieName, expires = 86400, getFullPath = (ctx: Context) => keyPath => `data.${keyPath}`} = deps; const service: SessionService = { from: memoize((ctx: Context) => { - return new JWTSession(ctx, {secret, cookieName, expires}); + return new JWTSession(ctx, {secret, cookieName, expires, getFullPath(ctx)}); }), }; return service; From 5d10601613e2e97c8fb055708cfb583545323332 Mon Sep 17 00:00:00 2001 From: Truong Hoang Dung Date: Thu, 13 Sep 2018 11:42:47 +0700 Subject: [PATCH 2/2] Add GetFullPathToken --- src/tokens.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tokens.js b/src/tokens.js index 6dd46fc..046a40e 100644 --- a/src/tokens.js +++ b/src/tokens.js @@ -6,7 +6,7 @@ * @flow */ -import type {Token} from 'fusion-core'; +import type {Context, Token} from 'fusion-core'; import {createToken} from 'fusion-core'; export const SessionSecretToken: Token = createToken('SessionSecret'); @@ -16,3 +16,6 @@ export const SessionCookieNameToken: Token = createToken( export const SessionCookieExpiresToken: Token = createToken( 'SessionCookieExpires' ); +export const GetFullPathToken: Token<(ctx: Context) => string => string)> = createToken( + 'GetFullPathToken' + );