Skip to content

Instantly share code, notes, and snippets.

@marcelmeyer
Last active March 14, 2018 17:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcelmeyer/8ca8aa30712ae69a3a3ac11e11e618c1 to your computer and use it in GitHub Desktop.
Save marcelmeyer/8ca8aa30712ae69a3a3ac11e11e618c1 to your computer and use it in GitHub Desktop.
Allows for some logging and debugging of PostgREST requests. All the x-* headers set by the reverse proxy.
create or replace function audit.api_request() returns void
language plpgsql
as $$
declare
_request_id text := coalesce(current_setting('request.header.x-request-id', true),'');
_role text := coalesce(current_setting('request.jwt.claim.role', true),'');
_user_id text := coalesce(current_setting('request.jwt.claim.id', true),'');
_resource text := coalesce(current_setting('request.header.x-path', true),'');
_verb text := coalesce(current_setting('request.header.x-verb', true),'');
_qs_id text := coalesce(current_setting('request.header.x-qs-id', true),'not-set');
_query text;
begin
raise log 'PostgREST: [%] JWT claim: (%:%) Resource: %:%; Query args: id=%',
_request_id,
_role,
_user_id,
_verb,
_resource,
_qs_id;
-- Create another connection and use it to write the action to a log table:
-- _query := 'insert into audit.requests (user_id,resource,action,role) values ';
-- _query := _query || '($user_id$, $resource$, $verb$, $role$)';
-- _query := replace(_query, '$user_id$'::text, quote_literal(_user_id));
-- _query := replace(_query, '$resource$'::text, quote_literal(lower(_resource)));
-- _query := replace(_query, '$verb$'::text, quote_literal(lower(_verb)));
-- _query := replace(_query, '$role$'::text, quote_literal(lower(_role)));
-- raise notice '%', _query;
-- PERFORM dblink_connect_u('dblink_audit','dbname=db');
-- PERFORM dblink('dblink_audit', _query);
-- PERFORM dblink('dblink_audit','COMMIT;');
-- PERFORM dblink_disconnect('dblink_audit');
end
$$;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment