mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-03 01:41:44 +00:00
@@ -0,0 +1,139 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
|
||||
-- Enable pgcrypto extension for gen_random_bytes if not already enabled
|
||||
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
||||
|
||||
-- Function to generate WebAuthn registration options with largeBlob and payment extensions
|
||||
CREATE OR REPLACE FUNCTION generate_webauthn_register_options(
|
||||
session_id UUID,
|
||||
vault_id UUID
|
||||
) RETURNS JSONB AS $$
|
||||
DECLARE
|
||||
challenge_bytes BYTEA;
|
||||
challenge_base64 TEXT;
|
||||
rp_id TEXT;
|
||||
rp_name TEXT;
|
||||
user_name TEXT;
|
||||
user_display_name TEXT;
|
||||
BEGIN
|
||||
-- Generate a random challenge based on session_id
|
||||
challenge_bytes = gen_random_bytes(32);
|
||||
challenge_base64 = encode(challenge_bytes, 'base64');
|
||||
|
||||
-- Set default user information
|
||||
user_name = 'user@' || session_id::TEXT;
|
||||
user_display_name = 'User';
|
||||
|
||||
-- Set relying party information
|
||||
rp_id = 'localhost'; -- This should be configurable
|
||||
rp_name = 'Sonr Highway';
|
||||
|
||||
-- Build and return the registration options
|
||||
RETURN jsonb_build_object(
|
||||
'challenge', challenge_base64,
|
||||
'rp', jsonb_build_object(
|
||||
'id', rp_id,
|
||||
'name', rp_name
|
||||
),
|
||||
'user', jsonb_build_object(
|
||||
'id', encode(session_id::TEXT::BYTEA, 'base64'),
|
||||
'name', user_name,
|
||||
'displayName', user_display_name
|
||||
),
|
||||
'pubKeyCredParams', jsonb_build_array(
|
||||
jsonb_build_object('type', 'public-key', 'alg', -7), -- ES256
|
||||
jsonb_build_object('type', 'public-key', 'alg', -257) -- RS256
|
||||
),
|
||||
'timeout', 60000,
|
||||
'attestation', 'direct',
|
||||
'authenticatorSelection', jsonb_build_object(
|
||||
'authenticatorAttachment', 'platform',
|
||||
'userVerification', 'required',
|
||||
'residentKey', 'required',
|
||||
'requireResidentKey', true
|
||||
),
|
||||
'extensions', jsonb_build_object(
|
||||
'largeBlob', jsonb_build_object(
|
||||
'support', 'required'
|
||||
),
|
||||
'payment', jsonb_build_object(
|
||||
'isPayment', true
|
||||
)
|
||||
)
|
||||
);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Function to generate WebAuthn login options with largeBlob and payment extensions
|
||||
CREATE OR REPLACE FUNCTION generate_webauthn_login_options(
|
||||
session_id UUID,
|
||||
vault_id UUID
|
||||
) RETURNS JSONB AS $$
|
||||
DECLARE
|
||||
challenge_bytes BYTEA;
|
||||
challenge_base64 TEXT;
|
||||
allow_credentials JSONB;
|
||||
rp_id TEXT;
|
||||
BEGIN
|
||||
-- Generate a random challenge based on session_id
|
||||
challenge_bytes = gen_random_bytes(32);
|
||||
challenge_base64 = encode(challenge_bytes, 'base64');
|
||||
|
||||
-- Set relying party information
|
||||
rp_id = 'localhost'; -- This should be configurable
|
||||
|
||||
-- Set empty allowed credentials (no vault_id column exists)
|
||||
allow_credentials = '[]'::JSONB;
|
||||
|
||||
-- Build and return the login options
|
||||
RETURN jsonb_build_object(
|
||||
'challenge', challenge_base64,
|
||||
'timeout', 60000,
|
||||
'rpId', rp_id,
|
||||
'allowCredentials', allow_credentials,
|
||||
'userVerification', 'required',
|
||||
'extensions', jsonb_build_object(
|
||||
'largeBlob', jsonb_build_object(
|
||||
'support', 'required',
|
||||
'read', true,
|
||||
'write', true
|
||||
),
|
||||
'payment', jsonb_build_object(
|
||||
'isPayment', true,
|
||||
'payeeName', 'Sonr Network',
|
||||
'payeeOrigin', 'https://sonr.io',
|
||||
'total', jsonb_build_object(
|
||||
'currency', 'USD',
|
||||
'value', '0.00'
|
||||
),
|
||||
'instrument', jsonb_build_object(
|
||||
'displayName', 'Sonr Wallet',
|
||||
'icon', 'https://sonr.io/icon.png'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Add comments for documentation
|
||||
COMMENT ON FUNCTION generate_webauthn_register_options(UUID, UUID) IS
|
||||
'Generates WebAuthn registration options with largeBlob and payment extensions.
|
||||
Parameters:
|
||||
- session_id: UUID for generating unique challenge
|
||||
- vault_id: UUID to associate with user information
|
||||
Returns: JSONB object with WebAuthn registration options including required extensions';
|
||||
|
||||
COMMENT ON FUNCTION generate_webauthn_login_options(UUID, UUID) IS
|
||||
'Generates WebAuthn login options with largeBlob and payment extensions.
|
||||
Parameters:
|
||||
- session_id: UUID for generating unique challenge
|
||||
- vault_id: UUID to lookup allowed credentials
|
||||
Returns: JSONB object with WebAuthn login options including read/write largeBlob and SPC payment extensions';
|
||||
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
DROP FUNCTION IF EXISTS generate_webauthn_login_options(UUID, UUID);
|
||||
DROP FUNCTION IF EXISTS generate_webauthn_register_options(UUID, UUID);
|
||||
Reference in New Issue
Block a user