Created
March 10, 2020 19:23
-
-
Save MagRelo/92e2a73831c29e7ba3839ee6fae1c62f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const sigUtil = require('eth-sig-util'); | |
const { checkUserMembership } = require('./pg-controller'); | |
function recover(message, signature) { | |
return sigUtil.recoverPersonalSignature({ | |
data: message, | |
sig: signature | |
}); | |
} | |
exports.htmlAuth = async function(req, res, next) { | |
// check for header | |
if (!req.headers['x-servesa']) { | |
return res.status(401).send('Unauthorized'); | |
} | |
// parse header object | |
const authObject = JSON.parse(req.headers['x-servesa']); | |
if (!authObject.message || !authObject.signature) { | |
return res.status(401).send('Unauthorized'); | |
} | |
// recover key from signature | |
const userKey = recover(authObject.message, authObject.signature); | |
// whatever kind of access control... | |
const isMember = await checkUserMembership(userKey, '0x1234...'); | |
if (!isMember) { | |
console.log('member not found in group'); | |
return res.status(401).send('Unauthorized'); | |
} | |
// call next middleware function | |
next(); | |
}; | |
exports.socketAuth = async function(packet, next) { | |
// check for header | |
if (!packet.handshake.headers['x-servesa']) { | |
console.log('no header'); | |
return next(new Error('401')); | |
} | |
// parse header object | |
const authObject = JSON.parse(packet.handshake.headers['x-servesa']); | |
if (!authObject.message || !authObject.signature) { | |
console.log('no auth content'); | |
return next(new Error('401')); | |
} | |
// recover key from signature | |
const recoveredUserKey = recover(authObject.message, authObject.signature); | |
// whatever kind of access control... | |
const isMember = await checkUserMembership(recoveredUserKey, '0x1234...'); | |
if (!isMember) { | |
console.log('member not found in group'); | |
return next(new Error('401')); | |
} | |
// call next middleware function | |
next(); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment