mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-09-24 23:05:49 +00:00
51 lines
2.6 KiB
PL/PgSQL
51 lines
2.6 KiB
PL/PgSQL
-- Run as migration owner in a disposable Supabase database after both migrations.
|
|
begin;
|
|
insert into auth.users (id) values
|
|
('77000000-0000-0000-0000-000000000001'),
|
|
('77000000-0000-0000-0000-000000000002'),
|
|
('77000000-0000-0000-0000-000000000003');
|
|
do $$
|
|
declare
|
|
account uuid := '77000000-0000-0000-0000-000000000001';
|
|
begin
|
|
if has_function_privilege('authenticated', 'public.reserve_feedback_quota(uuid,integer,bigint)', 'EXECUTE')
|
|
or has_function_privilege('anon', 'public.reserve_feedback_quota(uuid,integer,bigint)', 'EXECUTE')
|
|
or has_table_privilege('authenticated', 'public.feedback_daily_usage', 'UPDATE')
|
|
or has_table_privilege('authenticated', 'public.feedback_reports', 'INSERT') then
|
|
raise exception 'Client can bypass server quotas';
|
|
end if;
|
|
if not has_function_privilege('service_role', 'public.reserve_feedback_quota(uuid,integer,bigint)', 'EXECUTE') then
|
|
raise exception 'Edge Function cannot reserve quota';
|
|
end if;
|
|
if exists (select 1 from pg_policies where schemaname = 'storage' and policyname = 'Upload own feedback files') then
|
|
raise exception 'Direct attachment uploads remain enabled';
|
|
end if;
|
|
if public.reserve_feedback_quota(account, 6, 1)
|
|
or public.reserve_feedback_quota(account, 1, 10485761)
|
|
or public.reserve_feedback_quota(account, -1, 0) then
|
|
raise exception 'Per-submission bounds bypassed';
|
|
end if;
|
|
for i in 1..5 loop
|
|
if not public.reserve_feedback_quota(account, 5, 1) then raise exception 'Valid file quota rejected'; end if;
|
|
end loop;
|
|
if public.reserve_feedback_quota(account, 1, 1) then raise exception 'Daily file cap bypassed'; end if;
|
|
account := '77000000-0000-0000-0000-000000000002';
|
|
for i in 1..5 loop
|
|
if not public.reserve_feedback_quota(account, 1, 10485760) then raise exception 'Valid byte quota rejected'; end if;
|
|
end loop;
|
|
if public.reserve_feedback_quota(account, 1, 1) then raise exception 'Daily byte cap bypassed'; end if;
|
|
account := '77000000-0000-0000-0000-000000000003';
|
|
for i in 1..10 loop
|
|
if not public.reserve_feedback_quota(account, 0, 0) then raise exception 'Valid report quota rejected'; end if;
|
|
end loop;
|
|
if public.reserve_feedback_quota(account, 0, 0) then raise exception 'Daily report cap bypassed'; end if;
|
|
if (select reports from public.feedback_daily_usage where user_id = account) <> 10 then
|
|
raise exception 'Rejected reservation changed quota';
|
|
end if;
|
|
-- A prior day's usage does not block today's quota.
|
|
update public.feedback_daily_usage set day = day - 1 where user_id = account;
|
|
if not public.reserve_feedback_quota(account, 1, 1) then raise exception 'Daily quota did not reset'; end if;
|
|
end;
|
|
$$;
|
|
rollback;
|