0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-25 02:31:59 -05:00

Updated example.js to reflect new API

no-issue
This commit is contained in:
Fabien O'Carroll 2019-09-16 13:09:39 +08:00
parent 016422ce06
commit 667061676b

View file

@ -4,66 +4,77 @@ const MembersSSR = require('./');
const keys = keypair(); const keys = keypair();
const membersApiInstance = { const membersApiInstance = {
getMember() { /**
return Promise.resolve({name: 'egg'}); * @param {string} token
*/
async getMemberDataFromMagicLinkToken(token) {
return jwt.decode(token);
}, },
getPublicConfig() { async getMemberIdentityData() {
return Promise.resolve({ return {name: 'egg'};
issuer: 'example.com',
publicKey: keys.public
});
} }
}; };
const { const membersSSR = MembersSSR({
exchangeTokenForSession,
getMemberDataFromSession
} = MembersSSR({
cookieSecure: false, // Secure cookie (default) cookieSecure: false, // Secure cookie (default)
cookieKeys: ['some-coole-secret'], // Key to sign cookie with cookieKeys: ['some-coole-secret'], // Key to sign cookie with
membersApi: membersApiInstance // Used to fetch data and verify tokens getMembersApi: () => membersApiInstance // Used to fetch data and verify tokens
}); });
const server = require('http').createServer((req, res) => { const server = require('http').createServer(async (req, res) => {
if (!req.method) {
res.writeHead(405);
return res.end('Method not allowed.');
}
if (req.method.toLowerCase() === 'post') { if (req.method.toLowerCase() === 'post') {
exchangeTokenForSession(req, res).then(() => { try {
await membersSSR.exchangeTokenForSession(req, res);
res.writeHead(200); res.writeHead(200);
res.end(); res.end();
}).catch((err) => { } catch (err) {
console.error(err);
res.writeHead(err.statusCode); res.writeHead(err.statusCode);
res.end(err.message); res.end(err.message);
}); }
} else { } else {
getMemberDataFromSession(req, res).then((member) => { try {
const member = await membersSSR.getMemberDataFromSession(req, res);
res.writeHead(200, { res.writeHead(200, {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}); });
res.end(JSON.stringify(member)); res.end(JSON.stringify(member));
}).catch((err) => { } catch (err) {
console.error(err);
res.writeHead(err.statusCode); res.writeHead(err.statusCode);
res.end(err.message); res.end(err.message);
}); }
} }
}); });
server.listen(0, '127.0.0.1', () => { server.listen(0, '127.0.0.1', () => {
const {address, port} = server.address(); const addressInfo = server.address();
if (addressInfo === null || typeof addressInfo === 'string') {
throw new TypeError(`Unexpected return value from server.address(): ${addressInfo}`);
}
const {address, port} = addressInfo;
const url = `http://${address}:${port}`; const url = `http://${address}:${port}`;
const token = jwt.sign({}, keys.private, {
const token = jwt.sign({
name: 'egg',
email: 'egg@mast.er'
}, keys.private, {
issuer: 'example.com', issuer: 'example.com',
audience: 'example.com', audience: 'example.com',
algorithm: 'RS512' algorithm: 'RS512'
}); });
require('http').request(url, { require('http').request(`${url}?token=${token}`, {
method: 'post', method: 'post'
headers: {
'content-type': 'text'
}
}, (res) => { }, (res) => {
const cookies = res.headers['set-cookie'] || [];
require('http').request(url, { require('http').request(url, {
headers: { headers: {
cookie: res.headers['set-cookie'].join('; ') cookie: cookies.join('; ')
} }
}, (res) => { }, (res) => {
res.pipe(process.stdout); res.pipe(process.stdout);
@ -71,7 +82,7 @@ server.listen(0, '127.0.0.1', () => {
server.close(); server.close();
}); });
}).end(); }).end();
}).end(token); }).end();
}); });
server.on('close', () => { server.on('close', () => {