summaryrefslogtreecommitdiff
path: root/src/db/rest/media/_api_serve_system_media.sql
blob: 7e38949c08caa5082c43d39176463b497b0e3869 (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
CREATE FUNCTION _api.serve_system_media(
	_media_id INTEGER
)
RETURNS sys."*/*"
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_headers TEXT;
	_data BYTEA;
BEGIN
	SELECT FORMAT(
      '[{"Content-Type": "%s"},'
       '{"Content-Disposition": "inline; filename=\"%s\""},'
       '{"Cache-Control": "max-age=259200"}]'
      ,	m.mime, m.name)
	FROM xssbook.media m
	WHERE m.id = _media_id
	INTO _headers;

	SELECT m.content
	FROM xssbook.media m
	WHERE m.id = _media_id
	INTO _data;

	IF _data IS NOT NULL THEN
		PERFORM SET_CONFIG('response.headers', _headers, true);
		RETURN(_data);
	ELSE
		PERFORM _api.raise_not_found();
	END IF;
END
$BODY$;

GRANT EXECUTE ON FUNCTION _api.serve_system_media(INTEGER)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE xssbook.media
	TO rest_anon, rest_user;