From da5a2e6aabbbb60b380019644331e3b030d80d31 Mon Sep 17 00:00:00 2001 From: v0 Date: Sun, 22 Mar 2026 23:32:23 +0000 Subject: [PATCH] feat: add passkey support and WebAuthn libraries Create database schema for passkey credentials. Co-authored-by: ASOwnerYT <23545044+ASOwnerYT@users.noreply.github.com> --- scripts/001_create_passkeys_table.sql | 35 +++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 scripts/001_create_passkeys_table.sql diff --git a/scripts/001_create_passkeys_table.sql b/scripts/001_create_passkeys_table.sql new file mode 100644 index 0000000..bc3addc --- /dev/null +++ b/scripts/001_create_passkeys_table.sql @@ -0,0 +1,35 @@ +-- Create passkeys table for WebAuthn credential storage +CREATE TABLE IF NOT EXISTS public.passkeys ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE, + credential_id TEXT NOT NULL UNIQUE, + public_key TEXT NOT NULL, + sign_count INTEGER NOT NULL DEFAULT 0, + transports TEXT[] DEFAULT ARRAY[]::TEXT[], + backup_eligible BOOLEAN DEFAULT FALSE, + backup_state BOOLEAN DEFAULT FALSE, + aaguid UUID, + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + last_used TIMESTAMP WITH TIME ZONE, + friendly_name TEXT +); + +-- Enable RLS on passkeys table +ALTER TABLE public.passkeys ENABLE ROW LEVEL SECURITY; + +-- Create RLS policies for passkeys +CREATE POLICY "Users can view their own passkeys" ON public.passkeys + FOR SELECT USING (auth.uid() = user_id); + +CREATE POLICY "Users can insert their own passkeys" ON public.passkeys + FOR INSERT WITH CHECK (auth.uid() = user_id); + +CREATE POLICY "Users can delete their own passkeys" ON public.passkeys + FOR DELETE USING (auth.uid() = user_id); + +CREATE POLICY "Users can update their own passkeys" ON public.passkeys + FOR UPDATE USING (auth.uid() = user_id); + +-- Create index for faster credential lookups +CREATE INDEX idx_passkeys_credential_id ON public.passkeys(credential_id); +CREATE INDEX idx_passkeys_user_id ON public.passkeys(user_id);