summaryrefslogtreecommitdiff
path: root/src/db/rest/login/_api_verify_jwt.sql
blob: 9e63cc94f7abaf918732aaa4ea3f3e475605e499 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
CREATE FUNCTION _api.verify_jwt(
	_token TEXT
)
RETURNS INTEGER
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_payload JSON;
	_valid BOOLEAN;
	_jwt_secret TEXT;
	_user_id INTEGER;
BEGIN
	SELECT jwt_secret INTO _jwt_secret
	FROM sys.database_info
	WHERE name = current_database();

	SELECT payload, valid
	INTO _payload, _valid
	FROM public.verify(
		_token,
		_jwt_secret
	);

	IF NOT FOUND THEN
		RETURN NULL;
	END IF;

	IF _valid <> TRUE THEN
		RETURN NULL;
	END IF;

	_user_id = _payload->>'user_id';

	UPDATE admin.user
	SET seen = clock_timestamp()
	WHERE id = _user_id;

	RETURN _user_id;
END
$BODY$;

GRANT EXECUTE ON FUNCTION _api.verify_jwt(TEXT)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE sys.database_info
	TO rest_anon, rest_user;
GRANT UPDATE ON TABLE admin.user
	TO rest_anon, rest_user;