import Boom from 'boom' import Merchant from '../models/merchant' import { orderSession } from '../sessions' import { oystRegex } from '../validators/headers' import { replies } from '@oyst/utils' const { success } = replies const handler = async (req, reply) => { try { const matches = oystRegex.exec(req.headers['oyst-authorization']) if (!matches) { return reply(Boom.forbidden('forbidden')) } const obj = JSON.parse(new Buffer(matches[1], 'base64').toString('ascii')) const merchant = await Merchant.find(obj.m) const data = await merchant.verify(obj.t) const session = await orderSession.getData(data.id) return success({ data, merchant, session }, reply) } catch (err) { if (err.name === 'JsonWebTokenError' || err.name === 'TokenExpiredError') { return reply(Boom.unauthorized('invalid-token')) } reply(Boom.unauthorized('unauthorized')) } } export default { method: handler, assign: 'authorization' }