Require email account authentication
All checks were successful
CI / validate (push) Successful in 14m23s
All checks were successful
CI / validate (push) Successful in 14m23s
This commit is contained in:
@@ -2175,6 +2175,89 @@ grant execute on function public.dng_schema_version() to service_role;
|
||||
|
||||
notify pgrst, 'reload schema';
|
||||
|
||||
-- ============================================================================
|
||||
-- 0008_required_email_accounts.sql
|
||||
-- ============================================================================
|
||||
|
||||
-- D&G now uses recoverable email/password accounts. Keep the legacy function
|
||||
-- names so existing auth.users triggers are upgraded in place.
|
||||
|
||||
create or replace function public.create_profile_for_allowlisted_user()
|
||||
returns trigger
|
||||
language plpgsql
|
||||
security definer
|
||||
set search_path = ''
|
||||
as $$
|
||||
declare
|
||||
v_display_name text;
|
||||
begin
|
||||
if coalesce(new.is_anonymous, false) or nullif(btrim(new.email), '') is null then
|
||||
raise exception using
|
||||
errcode = '42501',
|
||||
message = 'A Dungeons & Ground account requires an email address.';
|
||||
end if;
|
||||
|
||||
v_display_name := coalesce(
|
||||
nullif(btrim(new.raw_user_meta_data ->> 'display_name'), ''),
|
||||
split_part(new.email, '@', 1),
|
||||
'Adventurer'
|
||||
);
|
||||
|
||||
insert into public.profiles(id, display_name)
|
||||
values (new.id, left(v_display_name, 80))
|
||||
on conflict (id) do update
|
||||
set display_name = excluded.display_name;
|
||||
|
||||
return new;
|
||||
end;
|
||||
$$;
|
||||
|
||||
revoke all on function public.create_profile_for_allowlisted_user() from public, anon, authenticated;
|
||||
|
||||
create or replace function public.enforce_alpha_email_allowlist()
|
||||
returns trigger
|
||||
language plpgsql
|
||||
security definer
|
||||
set search_path = ''
|
||||
as $$
|
||||
begin
|
||||
if coalesce(new.is_anonymous, false) or nullif(btrim(new.email), '') is null then
|
||||
raise exception using
|
||||
errcode = '42501',
|
||||
message = 'A Dungeons & Ground account requires an email address.';
|
||||
end if;
|
||||
return new;
|
||||
end;
|
||||
$$;
|
||||
|
||||
revoke all on function public.enforce_alpha_email_allowlist() from public, anon, authenticated;
|
||||
|
||||
-- Installations may contain confirmed email users created before the D&G
|
||||
-- schema. Give every non-anonymous email account a profile without touching
|
||||
-- existing campaign ownership or display names.
|
||||
insert into public.profiles(id, display_name)
|
||||
select
|
||||
auth_user.id,
|
||||
left(coalesce(
|
||||
nullif(btrim(auth_user.raw_user_meta_data ->> 'display_name'), ''),
|
||||
split_part(auth_user.email, '@', 1),
|
||||
'Adventurer'
|
||||
), 80)
|
||||
from auth.users auth_user
|
||||
where not coalesce(auth_user.is_anonymous, false)
|
||||
and nullif(btrim(auth_user.email), '') is not null
|
||||
on conflict (id) do nothing;
|
||||
|
||||
create or replace function public.dng_schema_version()
|
||||
returns integer language sql stable security definer set search_path = '' as $$
|
||||
select 8;
|
||||
$$;
|
||||
|
||||
revoke all on function public.dng_schema_version() from public, anon, authenticated;
|
||||
grant execute on function public.dng_schema_version() to service_role;
|
||||
|
||||
notify pgrst, 'reload schema';
|
||||
|
||||
|
||||
do $$
|
||||
begin
|
||||
@@ -2199,7 +2282,7 @@ begin
|
||||
if to_regprocedure('public.stage_four_create_character(uuid,uuid,text,text,text,jsonb,integer,integer,integer,integer,jsonb,jsonb,jsonb)') is null then
|
||||
raise exception 'D&G bootstrap verification failed: character creation RPC is missing';
|
||||
end if;
|
||||
if public.dng_schema_version() <> 7 then
|
||||
if public.dng_schema_version() <> 8 then
|
||||
raise exception 'D&G bootstrap verification failed: unexpected schema version';
|
||||
end if;
|
||||
end;
|
||||
|
||||
78
supabase/migrations/0008_required_email_accounts.sql
Normal file
78
supabase/migrations/0008_required_email_accounts.sql
Normal file
@@ -0,0 +1,78 @@
|
||||
-- D&G now uses recoverable email/password accounts. Keep the legacy function
|
||||
-- names so existing auth.users triggers are upgraded in place.
|
||||
|
||||
create or replace function public.create_profile_for_allowlisted_user()
|
||||
returns trigger
|
||||
language plpgsql
|
||||
security definer
|
||||
set search_path = ''
|
||||
as $$
|
||||
declare
|
||||
v_display_name text;
|
||||
begin
|
||||
if coalesce(new.is_anonymous, false) or nullif(btrim(new.email), '') is null then
|
||||
raise exception using
|
||||
errcode = '42501',
|
||||
message = 'A Dungeons & Ground account requires an email address.';
|
||||
end if;
|
||||
|
||||
v_display_name := coalesce(
|
||||
nullif(btrim(new.raw_user_meta_data ->> 'display_name'), ''),
|
||||
split_part(new.email, '@', 1),
|
||||
'Adventurer'
|
||||
);
|
||||
|
||||
insert into public.profiles(id, display_name)
|
||||
values (new.id, left(v_display_name, 80))
|
||||
on conflict (id) do update
|
||||
set display_name = excluded.display_name;
|
||||
|
||||
return new;
|
||||
end;
|
||||
$$;
|
||||
|
||||
revoke all on function public.create_profile_for_allowlisted_user() from public, anon, authenticated;
|
||||
|
||||
create or replace function public.enforce_alpha_email_allowlist()
|
||||
returns trigger
|
||||
language plpgsql
|
||||
security definer
|
||||
set search_path = ''
|
||||
as $$
|
||||
begin
|
||||
if coalesce(new.is_anonymous, false) or nullif(btrim(new.email), '') is null then
|
||||
raise exception using
|
||||
errcode = '42501',
|
||||
message = 'A Dungeons & Ground account requires an email address.';
|
||||
end if;
|
||||
return new;
|
||||
end;
|
||||
$$;
|
||||
|
||||
revoke all on function public.enforce_alpha_email_allowlist() from public, anon, authenticated;
|
||||
|
||||
-- Installations may contain confirmed email users created before the D&G
|
||||
-- schema. Give every non-anonymous email account a profile without touching
|
||||
-- existing campaign ownership or display names.
|
||||
insert into public.profiles(id, display_name)
|
||||
select
|
||||
auth_user.id,
|
||||
left(coalesce(
|
||||
nullif(btrim(auth_user.raw_user_meta_data ->> 'display_name'), ''),
|
||||
split_part(auth_user.email, '@', 1),
|
||||
'Adventurer'
|
||||
), 80)
|
||||
from auth.users auth_user
|
||||
where not coalesce(auth_user.is_anonymous, false)
|
||||
and nullif(btrim(auth_user.email), '') is not null
|
||||
on conflict (id) do nothing;
|
||||
|
||||
create or replace function public.dng_schema_version()
|
||||
returns integer language sql stable security definer set search_path = '' as $$
|
||||
select 8;
|
||||
$$;
|
||||
|
||||
revoke all on function public.dng_schema_version() from public, anon, authenticated;
|
||||
grant execute on function public.dng_schema_version() to service_role;
|
||||
|
||||
notify pgrst, 'reload schema';
|
||||
Reference in New Issue
Block a user