Module: Practical::Test::Helpers::Passkey::TestHelper
- Defined in:
- app/lib/practical/test/helpers/passkey/test_helper.rb
Instance Method Summary collapse
- #admin_relying_party(options: {}) ⇒ Object
- #admin_relying_party_id ⇒ Object
- #admin_relying_party_origin ⇒ Object
- #administrator_user_data(administrator:) ⇒ Object
- #assert_passkey_authentication_challenge(data:, stored_challenge:, credentials_to_allow: []) ⇒ Object
- #assert_passkey_registration_challenge(data:, stored_challenge:, relying_party_data:, user_data:, credentials_to_exclude: []) ⇒ Object
- #assertion_from_client(client:, challenge:, user_verified: true) ⇒ Object
- #create_credential_and_return_payload_from_challenge(client:, challenge:, user_verified: true) ⇒ Object
- #credential_data_for_passkey(passkey:) ⇒ Object
- #credential_id_for_challenge(passkeys:) ⇒ Object
- #encode_challenge(raw_challenge:) ⇒ Object
- #encoded_public_key(credential:, relying_party:) ⇒ Object
- #fake_authenticator ⇒ Object
- #fake_client(origin: "https://example.test", authenticator: WebAuthn::FakeAuthenticator.new) ⇒ Object
- #get_credential_payload_from_challenge(client:, challenge:, user_verified: true) ⇒ Object
- #hydrate_response_from_raw_credential(client:, relying_party:, raw_credential:) ⇒ Object
- #relying_party(options: {}) ⇒ Object
- #relying_party_origin ⇒ Object
- #user_data(user:) ⇒ Object
- #user_relying_party_id ⇒ Object
Instance Method Details
#admin_relying_party(options: {}) ⇒ Object
66 67 68 69 70 71 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 66 def (options: {}) return WebAuthn::RelyingParty.new(**{ allowed_origins: , name: I18n.translate("administrator.app_title.text") }.merge()) end |
#admin_relying_party_id ⇒ Object
58 59 60 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 58 def URI.parse().host end |
#admin_relying_party_origin ⇒ Object
54 55 56 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 54 def AppSettings. end |
#administrator_user_data(administrator:) ⇒ Object
38 39 40 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 38 def administrator_user_data(administrator:) {"name"=>administrator.email, "id"=>administrator.webauthn_id, "displayName"=>administrator.email} end |
#assert_passkey_authentication_challenge(data:, stored_challenge:, credentials_to_allow: []) ⇒ Object
23 24 25 26 27 28 29 30 31 32 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 23 def assert_passkey_authentication_challenge( data:, stored_challenge:, credentials_to_allow: [] ) assert_equal stored_challenge, data["challenge"] assert_equal "required", data["userVerification"] assert_equal credential_id_for_challenge(passkeys: credentials_to_allow), data["allowCredentials"] end |
#assert_passkey_registration_challenge(data:, stored_challenge:, relying_party_data:, user_data:, credentials_to_exclude: []) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 6 def assert_passkey_registration_challenge( data:, stored_challenge:, relying_party_data:, user_data:, credentials_to_exclude: [] ) authentication_selection = {"residentKey"=>"required", "userVerification"=>"required"} assert_equal stored_challenge, data["challenge"] assert_equal , data["rp"] assert_equal user_data, data["user"] assert_equal authentication_selection, data["authenticatorSelection"] assert_equal credentials_to_exclude, data["excludeCredentials"] end |
#assertion_from_client(client:, challenge:, user_verified: true) ⇒ Object
92 93 94 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 92 def assertion_from_client(client:, challenge:, user_verified: true) client.get(challenge: challenge, user_verified: user_verified) end |
#create_credential_and_return_payload_from_challenge(client:, challenge:, user_verified: true) ⇒ Object
117 118 119 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 117 def create_credential_and_return_payload_from_challenge(client:, challenge:, user_verified: true) return client.create(challenge: challenge, user_verified: user_verified) end |
#credential_data_for_passkey(passkey:) ⇒ Object
46 47 48 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 46 def credential_data_for_passkey(passkey:) {"type"=>"public-key", "id"=> passkey.external_id} end |
#credential_id_for_challenge(passkeys:) ⇒ Object
34 35 36 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 34 def credential_id_for_challenge(passkeys:) Array.wrap(passkeys).map{|x| {"type" => "public-key", "id" => x.external_id} } end |
#encode_challenge(raw_challenge:) ⇒ Object
88 89 90 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 88 def encode_challenge(raw_challenge:) Base64.strict_encode64(raw_challenge) end |
#encoded_public_key(credential:, relying_party:) ⇒ Object
125 126 127 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 125 def encoded_public_key(credential:, relying_party:) .encoder.encode(credential.public_key) end |
#fake_authenticator ⇒ Object
80 81 82 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 80 def fake_authenticator return WebAuthn::FakeAuthenticator.new end |
#fake_client(origin: "https://example.test", authenticator: WebAuthn::FakeAuthenticator.new) ⇒ Object
84 85 86 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 84 def fake_client(origin: "https://example.test", authenticator: WebAuthn::FakeAuthenticator.new) return WebAuthn::FakeClient.new(origin, authenticator: authenticator) end |
#get_credential_payload_from_challenge(client:, challenge:, user_verified: true) ⇒ Object
121 122 123 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 121 def get_credential_payload_from_challenge(client:, challenge:, user_verified: true) client.get(challenge: challenge, user_verified: user_verified) end |
#hydrate_response_from_raw_credential(client:, relying_party:, raw_credential:) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 96 def hydrate_response_from_raw_credential(client:, relying_party:, raw_credential:) attestation_object = if client.encoding .encoder.decode(raw_credential["response"]["attestationObject"]) else raw_credential["response"]["attestationObject"] end client_data_json = if client.encoding .encoder.decode(raw_credential["response"]["clientDataJSON"]) else raw_credential["response"]["clientDataJSON"] end return WebAuthn::AuthenticatorAttestationResponse.new( attestation_object: attestation_object, client_data_json: client_data_json, relying_party: ) end |
#relying_party(options: {}) ⇒ Object
73 74 75 76 77 78 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 73 def (options: {}) return WebAuthn::RelyingParty.new(**{ allowed_origins: , name: I18n.translate("app_title.text") }.merge()) end |
#relying_party_origin ⇒ Object
50 51 52 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 50 def AppSettings. end |
#user_data(user:) ⇒ Object
42 43 44 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 42 def user_data(user:) {"name"=>user.email, "id"=>user.webauthn_id, "displayName"=>user.name} end |
#user_relying_party_id ⇒ Object
62 63 64 |
# File 'app/lib/practical/test/helpers/passkey/test_helper.rb', line 62 def URI.parse().host end |