const jwt = require('jsonwebtoken'); function getUserId(ctx) { const Authorization = ctx.request.get('Authorization'); if (Authorization) { const token = Authorization.replace('Bearer ', ''); const { userId } = jwt.verify(token, process.env.APP_SECRET); return userId; } // TODO: Don't throw when they aren't logged in // throw new Error('Sorry, you must be logged in to do that!'); } function hasPermission(user, permissionsNeeded) { const matchedPermissions = user.permissions.filter(permissionTheyHave => permissionsNeeded.includes(permissionTheyHave) ); if (!matchedPermissions.length) { throw new Error(`You do not have sufficient permissions : ${permissionsNeeded} You Have: ${user.permissions} `); } } function checkForUserId(ctx) { const Authorization = ctx.request.get('Authorization'); if (Authorization) { const token = Authorization.replace('Bearer ', ''); const { userId } = jwt.verify(token, process.env.APP_SECRET); return userId; } } class AuthError extends Error { constructor() { super('Not authorized'); } } module.exports = { getUserId, AuthError, checkForUserId, hasPermission, };