34 lines
631 B
PL/PgSQL
34 lines
631 B
PL/PgSQL
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;
|