From 5c9ed65b065d6c1f648e2c6381d9b76c0fa6da59 Mon Sep 17 00:00:00 2001 From: Fabien O'Carroll Date: Fri, 5 Apr 2019 09:06:23 +0200 Subject: [PATCH] Added runnable example w/ mock membersApi --- ghost/members-ssr/example.js | 79 ++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 ghost/members-ssr/example.js diff --git a/ghost/members-ssr/example.js b/ghost/members-ssr/example.js new file mode 100644 index 0000000000..0e5fa12544 --- /dev/null +++ b/ghost/members-ssr/example.js @@ -0,0 +1,79 @@ +const jwt = require('jsonwebtoken'); +const keypair = require('keypair'); +const MembersSSR = require('./'); +const keys = keypair(); + +const membersApiInstance = { + getMember() { + return Promise.resolve({name: 'egg'}); + }, + getPublicConfig() { + return Promise.resolve({ + issuer: 'example.com', + publicKey: keys.public + }); + } +}; + +const { + exchangeTokenForSession, + getMemberDataFromSession +} = MembersSSR({ + cookieSecure: false, // Secure cookie (default) + cookieKeys: ['some-coole-secret'], // Key to sign cookie with + membersApi: membersApiInstance // Used to fetch data and verify tokens +}); + +const server = require('http').createServer((req, res) => { + if (req.method.toLowerCase() === 'post') { + exchangeTokenForSession(req, res).then(() => { + res.writeHead(200); + res.end(); + }).catch((err) => { + res.writeHead(err.code); + res.end(err.message); + }); + } else { + getMemberDataFromSession(req, res).then((member) => { + res.writeHead(200, { + 'Content-Type': 'application/json' + }); + res.end(JSON.stringify(member)); + }).catch((err) => { + res.writeHead(err.code); + res.end(err.message); + }); + } +}); + +server.listen(0, '127.0.0.1', () => { + const {address, port} = server.address(); + const url = `http://${address}:${port}`; + const token = jwt.sign({}, keys.private, { + issuer: 'example.com', + audience: 'members-ssr', + algorithm: 'RS512' + }); + + require('http').request(url, { + method: 'post', + headers: { + 'content-type': 'text' + } + }, (res) => { + require('http').request(url, { + headers: { + cookie: res.headers['set-cookie'].join('; ') + } + }, (res) => { + res.pipe(process.stdout); + res.on('close', () => { + server.close(); + }); + }).end(); + }).end(token); +}); + +server.on('close', () => { + process.exit(1); +});