Files
sonr/internal/migrations/007_webauthn_to_vc_func.sql
T

30 lines
1015 B
PL/PgSQL
Raw Normal View History

2025-10-03 14:45:52 -04:00
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION convert_webauthn_to_vc(
webauthn_credential JSONB
) RETURNS JSONB AS $$
DECLARE
vc_result JSONB;
BEGIN
-- Create the Verifiable Credential structure based on W3C standard
vc_result = jsonb_build_object(
'@context', jsonb_build_array('https://www.w3.org/2018/credentials/v1'),
'type', jsonb_build_array('VerifiableCredential', 'WebAuthnCredential'),
'issuer', jsonb_build_object(
'id', 'did:example:' || encode(digest(webauthn_credential->>'rpId', 'sha256'), 'hex')
),
'issuanceDate', to_char(now() at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS"Z"'),
'credentialSubject', jsonb_build_object(
'id', 'did:key:' || encode(digest(webauthn_credential->>'id', 'sha256'), 'hex'),
'webauthn', webauthn_credential
)
);
RETURN vc_result;
END;
$$ LANGUAGE plpgsql;
-- +goose StatementEnd
-- +goose Down
DROP FUNCTION convert_webauthn_to_vc;