summaryrefslogtreecommitdiff
path: root/src/db/rest/login/_api_sign_jwt.sql
blob: dc8e9208e4947e9849d9f3665bff185f63f4ee50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE FUNCTION _api.sign_jwt(
	_role TEXT,
	_user_id INTEGER
)
RETURNS sys.JWT
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_jwt_secret TEXT;
	_token sys.JWT;
BEGIN
	SELECT jwt_secret INTO _jwt_secret
	FROM sys.database_info
	WHERE name = current_database();

	SELECT public.sign(
		row_to_json(r), _jwt_secret
	) INTO _token
	FROM (
		SELECT
			_role AS role,
			_user_id AS user_id,
			extract(epoch FROM now())::integer + (60 * 60 * 24) AS exp
	) r;

	RETURN _token;
END
$BODY$;

GRANT EXECUTE ON FUNCTION _api.sign_jwt(TEXT, INTEGER)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE sys.database_info
	TO rest_anon, rest_user;