Skip to content

Commit

Permalink
Clean up a bunch of bogus subslects and join tables instead.
Browse files Browse the repository at this point in the history
  • Loading branch information
michelp committed Apr 24, 2017
1 parent 12a41ee commit 546a291
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
27 changes: 13 additions & 14 deletions pgjwt--0.0.1.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ $$;


CREATE OR REPLACE FUNCTION url_decode(data text) RETURNS bytea LANGUAGE sql AS $$
WITH t AS (SELECT translate(data, '-_', '+/')),
rem AS (SELECT length((SELECT * FROM t)) % 4) -- compute padding size
WITH t AS (SELECT translate(data, '-_', '+/') AS trans),
rem AS (SELECT length(t.trans) % 4 AS remainder FROM t) -- compute padding size
SELECT decode(
(SELECT * FROM t) ||
CASE WHEN (SELECT * FROM rem) > 0
THEN repeat('=', (4 - (SELECT * FROM rem)))
t.trans ||
CASE WHEN rem.remainder > 0
THEN repeat('=', (4 - rem.remainder))
ELSE '' END,
'base64');
'base64') FROM t, rem;
$$;


Expand All @@ -26,27 +26,26 @@ WITH
WHEN algorithm = 'HS256' THEN 'sha256'
WHEN algorithm = 'HS384' THEN 'sha384'
WHEN algorithm = 'HS512' THEN 'sha512'
ELSE '' END) -- hmac throws error
SELECT @[email protected]_encode(hmac(signables, secret, (select * FROM alg)));
ELSE '' END AS id) -- hmac throws error
SELECT @[email protected]_encode(hmac(signables, secret, alg.id)) FROM alg;
$$;


CREATE OR REPLACE FUNCTION sign(payload json, secret text, algorithm text DEFAULT 'HS256')
RETURNS text LANGUAGE sql AS $$
WITH
header AS (
SELECT @[email protected]_encode(convert_to('{"alg":"' || algorithm || '","typ":"JWT"}', 'utf8'))
SELECT @[email protected]_encode(convert_to('{"alg":"' || algorithm || '","typ":"JWT"}', 'utf8')) AS data
),
payload AS (
SELECT @[email protected]_encode(convert_to(payload::text, 'utf8'))
SELECT @[email protected]_encode(convert_to(payload::text, 'utf8')) AS data
),
signables AS (
SELECT (SELECT * FROM header) || '.' || (SELECT * FROM payload)
SELECT header.data || '.' || payload.data AS data FROM header, payload
)
SELECT
(SELECT * FROM signables)
|| '.' ||
@[email protected]_sign((SELECT * FROM signables), secret, algorithm);
signables.data || '.' ||
@[email protected]_sign(signables.data, secret, algorithm) FROM signables;
$$;


Expand Down
14 changes: 14 additions & 0 deletions test.sql
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
\set ECHO none
\set QUIET 1

\pset format unaligned
\pset tuples_only true
\pset pager

\set ON_ERROR_ROLLBACK 1
\set ON_ERROR_STOP true
\set QUIET 1

DROP EXTENSION IF EXISTS pgjwt;
CREATE EXTENSION pgjwt;

BEGIN;
SELECT plan(14);

Expand Down

0 comments on commit 546a291

Please sign in to comment.