mirror of
https://github.com/thiloho/archtika.git
synced 2025-11-22 02:41:35 +01:00
Remove NGINX website directories from API and fix some minor issues
This commit is contained in:
@@ -29,7 +29,7 @@ ALTER DEFAULT PRIVILEGES REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
|
||||
|
||||
CREATE TABLE internal.user (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
||||
username VARCHAR(16) UNIQUE NOT NULL CHECK (LENGTH(username) >= 3),
|
||||
username VARCHAR(16) UNIQUE NOT NULL CHECK (LENGTH(username) >= 3 AND username ~ '^[a-zA-Z0-9_-]+$'),
|
||||
password_hash CHAR(60) NOT NULL,
|
||||
user_role NAME NOT NULL DEFAULT 'authenticated_user',
|
||||
max_number_websites INT NOT NULL DEFAULT CURRENT_SETTING('app.website_max_number_user') ::INT,
|
||||
|
||||
@@ -26,19 +26,7 @@ CREATE VIEW api.website WITH ( security_invoker = ON
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
internal.website AS w
|
||||
WHERE
|
||||
w.user_id = (
|
||||
CURRENT_SETTING(
|
||||
'request.jwt.claims', TRUE
|
||||
)::JSON ->> 'user_id')::UUID
|
||||
OR w.id IN (
|
||||
SELECT
|
||||
c.website_id
|
||||
FROM
|
||||
internal.collab AS c
|
||||
WHERE
|
||||
c.user_id = (CURRENT_SETTING('request.jwt.claims', TRUE)::JSON ->> 'user_id')::UUID);
|
||||
internal.website;
|
||||
|
||||
CREATE VIEW api.settings WITH ( security_invoker = ON
|
||||
) AS
|
||||
|
||||
@@ -146,22 +146,6 @@ CREATE TRIGGER _prevent_storage_excess_settings
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION internal.prevent_website_storage_size_excess ();
|
||||
|
||||
CREATE VIEW api.all_user_websites AS
|
||||
SELECT
|
||||
u.id AS user_id,
|
||||
u.username,
|
||||
u.created_at AS user_created_at,
|
||||
u.max_number_websites,
|
||||
COALESCE(JSONB_AGG(JSONB_BUILD_OBJECT('id', w.id, 'title', w.title, 'max_storage_size', w.max_storage_size)
|
||||
ORDER BY w.created_at DESC) FILTER (WHERE w.id IS NOT NULL), '[]'::JSONB) AS websites
|
||||
FROM
|
||||
internal.user AS u
|
||||
LEFT JOIN internal.website AS w ON u.id = w.user_id
|
||||
GROUP BY
|
||||
u.id;
|
||||
|
||||
GRANT SELECT ON api.all_user_websites TO administrator;
|
||||
|
||||
GRANT UPDATE (max_storage_size) ON internal.website TO administrator;
|
||||
|
||||
GRANT UPDATE, DELETE ON internal.user TO administrator;
|
||||
@@ -193,8 +177,6 @@ DROP TRIGGER _prevent_storage_excess_settings ON internal.settings;
|
||||
|
||||
DROP FUNCTION internal.prevent_website_storage_size_excess;
|
||||
|
||||
DROP VIEW api.all_user_websites;
|
||||
|
||||
REVOKE UPDATE (max_storage_size) ON internal.website FROM administrator;
|
||||
|
||||
REVOKE UPDATE, DELETE ON internal.user FROM administrator;
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
-- migrate:up
|
||||
CREATE FUNCTION internal.cleanup_filesystem ()
|
||||
RETURNS TRIGGER
|
||||
AS $$
|
||||
DECLARE
|
||||
_website_id UUID;
|
||||
_domain_prefix VARCHAR(16);
|
||||
BEGIN
|
||||
IF TG_TABLE_NAME = 'website' THEN
|
||||
_website_id := OLD.id;
|
||||
SELECT
|
||||
d.prefix INTO _domain_prefix
|
||||
FROM
|
||||
internal.domain_prefix AS d
|
||||
WHERE
|
||||
d.website_id = _website_id;
|
||||
EXECUTE FORMAT('COPY (SELECT '''') TO PROGRAM ''rm -rf /var/www/archtika-websites/previews/%s''', _website_id);
|
||||
EXECUTE FORMAT('COPY (SELECT '''') TO PROGRAM ''rm -rf /var/www/archtika-websites/%s''', COALESCE(_domain_prefix, _website_id::VARCHAR));
|
||||
ELSE
|
||||
_website_id := OLD.website_id;
|
||||
SELECT
|
||||
d.prefix INTO _domain_prefix
|
||||
FROM
|
||||
internal.domain_prefix AS d
|
||||
WHERE
|
||||
d.website_id = _website_id;
|
||||
EXECUTE FORMAT('COPY (SELECT '''') TO PROGRAM ''rm -rf /var/www/archtika-websites/previews/%s/legal-information.html''', _website_id);
|
||||
EXECUTE FORMAT('COPY (SELECT '''') TO PROGRAM ''rm -rf /var/www/archtika-websites/%s/legal-information.html''', COALESCE(_domain_prefix, _website_id::VARCHAR));
|
||||
END IF;
|
||||
RETURN OLD;
|
||||
END;
|
||||
$$
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER;
|
||||
|
||||
CREATE TRIGGER _cleanup_filesystem_website
|
||||
BEFORE DELETE ON internal.website
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION internal.cleanup_filesystem ();
|
||||
|
||||
CREATE TRIGGER _cleanup_filesystem_legal_information
|
||||
BEFORE DELETE ON internal.legal_information
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION internal.cleanup_filesystem ();
|
||||
|
||||
-- migrate:down
|
||||
DROP TRIGGER _cleanup_filesystem_website ON internal.website;
|
||||
|
||||
DROP TRIGGER _cleanup_filesystem_legal_information ON internal.legal_information;
|
||||
|
||||
DROP FUNCTION internal.cleanup_filesystem;
|
||||
|
||||
Reference in New Issue
Block a user