mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
140 lines
4.6 KiB
PL/PgSQL
140 lines
4.6 KiB
PL/PgSQL
-- +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);
|