diff options
author | Freya Murphy <freya@freyacat.org> | 2024-04-05 10:46:09 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-04-05 10:46:09 -0400 |
commit | 530bbf058781e00e588f1457b6ee589a64b74da1 (patch) | |
tree | c6cdd382a86d55538686293e51a1fc056cb59029 /src/db/rest/media/_api_serve_user_media.sql | |
parent | remove var (diff) | |
download | xssbook2-530bbf058781e00e588f1457b6ee589a64b74da1.tar.gz xssbook2-530bbf058781e00e588f1457b6ee589a64b74da1.tar.bz2 xssbook2-530bbf058781e00e588f1457b6ee589a64b74da1.zip |
i did thing oh god large commit
Diffstat (limited to 'src/db/rest/media/_api_serve_user_media.sql')
-rw-r--r-- | src/db/rest/media/_api_serve_user_media.sql | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/db/rest/media/_api_serve_user_media.sql b/src/db/rest/media/_api_serve_user_media.sql new file mode 100644 index 0000000..3487493 --- /dev/null +++ b/src/db/rest/media/_api_serve_user_media.sql @@ -0,0 +1,37 @@ +CREATE FUNCTION _api.serve_user_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"},' + '{"Cache-Control": "max-age=259200"}]' + , m.mime) + FROM admin.user_media m + WHERE m.id = _media_id + INTO _headers; + + SELECT m.content + FROM admin.user_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_user_media(INTEGER) + TO rest_anon, rest_user; +GRANT SELECT ON TABLE admin.user_media + TO rest_anon, rest_user; |