function onAuth (message) { var socket = this.socket debug('message:', message) var res = jsonrpc.parse(message) if (res.type !== 'request') { return socket.end(Resp.encodeError(new Error(`Receive a unhandle message: ${message}`))) } if (res.payload.method !== 'auth') { res = jsonrpc.error(res.payload.id, new jsonrpc.JsonRpcError('Unauthorized: ' + message, 401)) return socket.end(Resp.encodeBulk(JSON.stringify(res))) } // params: [tokenxxx] try { socket.token = jwt.verifyToken(res.payload.params[0]) // Producer token should have producerId to be different from consumer auth. if (!validString(socket.token.producerId)) throw new Error('invalid signature') socket.id = tools.md5(res.payload.params[0]) socket.producerId = socket.token.producerId res = jsonrpc.success(res.payload.id, {id: socket.id}) socket.write(Resp.encodeBulk(JSON.stringify(res))) } catch (err) { res = jsonrpc.error(res.payload.id, new jsonrpc.JsonRpcError(err.message, 400)) return socket.end(Resp.encodeBulk(JSON.stringify(res))) } // Socket is ready to listen. socket.invalidRequestCount = 0 server.clients[socket.id] = socket this.on('data', onData) }
thunk(handleRPC(socket, req.payload))(function (err, res) { debug('response:', req.payload.id, err, res) var data = null if (err) { if (!(err instanceof jsonrpc.JsonRpcError)) { err = new jsonrpc.JsonRpcError(String(err), 500) } data = jsonrpc.error(req.payload.id, err) } else { data = jsonrpc.success(req.payload.id, res == null ? 'OK' : res) } socket.write(Resp.encodeBulk(JSON.stringify(data))) })