diff --git a/src/core/server/app/middleware/graphql/persistedQueryMiddleware.ts b/src/core/server/app/middleware/graphql/persistedQueryMiddleware.ts index 62704fac5..855df0375 100644 --- a/src/core/server/app/middleware/graphql/persistedQueryMiddleware.ts +++ b/src/core/server/app/middleware/graphql/persistedQueryMiddleware.ts @@ -40,6 +40,7 @@ const persistedQueryMiddleware = ({ ) { throw new RawQueryNotAuthorized( tenant.id, + body && body.query ? body.query : null, req.user ? req.user.id : null ); } diff --git a/src/core/server/app/middleware/logging.ts b/src/core/server/app/middleware/logging.ts index a78f8c448..cfd2f2b4e 100644 --- a/src/core/server/app/middleware/logging.ts +++ b/src/core/server/app/middleware/logging.ts @@ -6,6 +6,16 @@ import { ErrorRequestHandler, RequestHandler, } from "coral-server/types/express"; +import { Request, Response } from "express"; + +const extractMetadata = (req: Request, res: Response) => ({ + url: req.originalUrl || req.url, + method: req.method, + statusCode: res.statusCode, + host: req.hostname, + userAgent: req.get("User-Agent"), + ip: req.ip, +}); export const accessLogger: RequestHandler = (req, res, next) => { const startTime = now(); @@ -14,24 +24,11 @@ export const accessLogger: RequestHandler = (req, res, next) => { // Compute the end time. const responseTime = Math.round(now() - startTime); - // Get some extra goodies from the request. - const userAgent = req.get("User-Agent"); - // Grab the logger. const log = req.coral ? req.coral.logger : logger; // Log this out. - log.debug( - { - url: req.originalUrl || req.url, - method: req.method, - statusCode: res.statusCode, - host: req.hostname, - userAgent, - responseTime, - }, - "http request" - ); + log.debug({ ...extractMetadata(req, res), responseTime }, "http request"); }); next(); @@ -42,7 +39,7 @@ export const errorLogger: ErrorRequestHandler = (err, req, res, next) => { const log = req.coral ? req.coral.logger : logger; // Log this out. - log.error({ err }, "http error"); + log.error({ ...extractMetadata(req, res), err }, "http error"); next(err); }; diff --git a/src/core/server/errors/index.ts b/src/core/server/errors/index.ts index dfc2a03c8..22fb917de 100644 --- a/src/core/server/errors/index.ts +++ b/src/core/server/errors/index.ts @@ -749,10 +749,11 @@ export class PersistedQueryNotFound extends CoralError { } export class RawQueryNotAuthorized extends CoralError { - constructor(tenantID: string, userID: string | null) { + constructor(tenantID: string, query: string | null, userID: string | null) { super({ code: ERROR_CODES.RAW_QUERY_NOT_AUTHORIZED, - context: { tenantID, pvt: { userID } }, + status: 400, + context: { tenantID, pvt: { userID, query } }, }); } } diff --git a/src/core/server/graph/tenant/subscriptions/server.ts b/src/core/server/graph/tenant/subscriptions/server.ts index a8bbca496..1c67401db 100644 --- a/src/core/server/graph/tenant/subscriptions/server.ts +++ b/src/core/server/graph/tenant/subscriptions/server.ts @@ -237,6 +237,9 @@ export function onOperation(options: OnOperationOptions) { ) { throw new RawQueryNotAuthorized( params.context.tenant.id, + message.payload && message.payload.query + ? message.payload.query + : null, params.context.user ? params.context.user.id : null ); }