summaryrefslogtreecommitdiff
path: root/src/db/rest/login/api_login.sql
blob: 0cf05356bb65c21201a9593ae93ff2bc049bcb2b (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
CREATE FUNCTION api.login(
	username TEXT,
	password TEXT
)
RETURNS sys.JWT
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_role NAME;
	_user_id INTEGER;
	_token sys.JWT;
BEGIN
	SELECT role INTO _role
		FROM admin.user u
		WHERE u.username = login.username
		AND u.password = login.password;

	IF _role IS NULL THEN
		PERFORM _api.raise(
			_msg => 'api_invalid_login'
		);
		RETURN NULL;
	END IF;

	SELECT id INTO _user_id
		FROM admin.user u
		WHERE u.username = login.username;

	_token = _api.sign_jwt(
		_role,
		_user_id
	);

	RETURN _token;
END
$BODY$;

GRANT EXECUTE ON FUNCTION api.login(TEXT, TEXT)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE admin.user
	TO rest_anon, rest_user;