- Nouvelle Edge Function create-event + RPC public.create_event : génère slug/admin_token/expire_at et insère l'event, réservée à service_role, appelée par le workflow n8n "Créer un événement" (Form Trigger, publié). - Passe DA "polaroid poussé à fond" : les cartes d'état (chargement/erreur/ succès), la modale de bienvenue et le formulaire passent en papier clair avec ruban washi tape et léger tilt, plutôt qu'en carte sombre sur fond sombre (ombre invisible dans l'ancienne version). Admin resté sobre/sombre mais cartes plus lisibles (liseré coloré, contraste renforcé). - Générateur QR et carton imprimable : lisent maintenant ?slug= et ?baseUrl= pour se pré-remplir depuis le lien renvoyé par create-event. - Correctifs : icône manquante sur "Télécharger" (admin), bug [hidden] anticipé sur l'état vide de la galerie invité.
43 lines
1.4 KiB
PL/PgSQL
43 lines
1.4 KiB
PL/PgSQL
-- Durcit photobooth.generate_unique_slug : le linter de sécurité Supabase
|
|
-- signale un search_path mutable (absent) sur cette fonction, introduite par
|
|
-- 20260918100000_create_event_rpc.sql. Même remède que le reste du projet
|
|
-- (public.create_event fixe déjà search_path) : figer explicitement, pour
|
|
-- empêcher qu'un search_path attaquant (ex: schéma temporaire malveillant)
|
|
-- ne fasse résoudre unaccent() ou photobooth.events vers autre chose que
|
|
-- prévu.
|
|
create or replace function photobooth.generate_unique_slug(p_source text)
|
|
returns text
|
|
language plpgsql
|
|
set search_path = photobooth, extensions, pg_temp
|
|
as $$
|
|
declare
|
|
v_base_slug text;
|
|
v_candidate text;
|
|
v_suffix integer := 1;
|
|
v_max_attempts constant integer := 1000;
|
|
begin
|
|
v_base_slug := lower(trim(both '-' from
|
|
regexp_replace(extensions.unaccent(coalesce(p_source, '')), '[^a-zA-Z0-9]+', '-', 'g')
|
|
));
|
|
|
|
if v_base_slug = '' then
|
|
v_base_slug := 'evenement';
|
|
end if;
|
|
|
|
v_candidate := v_base_slug;
|
|
|
|
while exists (select 1 from photobooth.events where slug = v_candidate) loop
|
|
v_suffix := v_suffix + 1;
|
|
v_candidate := v_base_slug || '-' || v_suffix;
|
|
|
|
if v_suffix > v_max_attempts then
|
|
raise exception 'slug_generation_failed'
|
|
using errcode = 'P0001',
|
|
detail = format('Impossible de générer un slug unique pour "%s" après %s tentatives.', p_source, v_max_attempts);
|
|
end if;
|
|
end loop;
|
|
|
|
return v_candidate;
|
|
end;
|
|
$$;
|