|
27 | 27 | WHEN algorithm = 'HS384' THEN 'sha384'
|
28 | 28 | WHEN algorithm = 'HS512' THEN 'sha512'
|
29 | 29 | ELSE '' END) -- hmac throws error
|
30 |
| -SELECT url_encode(hmac(signables, secret, (select * FROM alg))); |
| 30 | +SELECT @extschema@.url_encode(hmac(signables, secret, (select * FROM alg))); |
31 | 31 | $$;
|
32 | 32 |
|
33 | 33 |
|
34 | 34 | CREATE OR REPLACE FUNCTION sign(payload json, secret text, algorithm text DEFAULT 'HS256')
|
35 | 35 | RETURNS text LANGUAGE sql AS $$
|
36 | 36 | WITH
|
37 | 37 | header AS (
|
38 |
| - SELECT url_encode(convert_to('{"alg":"' || algorithm || '","typ":"JWT"}', 'utf8')) |
| 38 | + SELECT @extschema@.url_encode(convert_to('{"alg":"' || algorithm || '","typ":"JWT"}', 'utf8')) |
39 | 39 | ),
|
40 | 40 | payload AS (
|
41 |
| - SELECT url_encode(convert_to(payload::text, 'utf8')) |
| 41 | + SELECT @extschema@.url_encode(convert_to(payload::text, 'utf8')) |
42 | 42 | ),
|
43 | 43 | signables AS (
|
44 | 44 | SELECT (SELECT * FROM header) || '.' || (SELECT * FROM payload)
|
45 | 45 | )
|
46 | 46 | SELECT
|
47 | 47 | (SELECT * FROM signables)
|
48 | 48 | || '.' ||
|
49 |
| - algorithm_sign((SELECT * FROM signables), secret, algorithm); |
| 49 | + @extschema@.algorithm_sign((SELECT * FROM signables), secret, algorithm); |
50 | 50 | $$;
|
51 | 51 |
|
52 | 52 |
|
53 | 53 | CREATE OR REPLACE FUNCTION verify(token text, secret text, algorithm text DEFAULT 'HS256')
|
54 | 54 | RETURNS table(header json, payload json, valid boolean) LANGUAGE sql AS $$
|
55 | 55 | SELECT
|
56 |
| - convert_from(url_decode(r[1]), 'utf8')::json AS header, |
57 |
| - convert_from(url_decode(r[2]), 'utf8')::json AS payload, |
58 |
| - r[3] = algorithm_sign(r[1] || '.' || r[2], secret, algorithm) AS valid |
| 56 | + convert_from(@extschema@.url_decode(r[1]), 'utf8')::json AS header, |
| 57 | + convert_from(@extschema@.url_decode(r[2]), 'utf8')::json AS payload, |
| 58 | + r[3] = @extschema@.algorithm_sign(r[1] || '.' || r[2], secret, algorithm) AS valid |
59 | 59 | FROM regexp_split_to_array(token, '\.') r;
|
60 | 60 | $$;
|
0 commit comments