Skip to content

Commit 13975e0

Browse files
committed
[rb] update virtual auth implementation to match conventions
1 parent 930edbd commit 13975e0

File tree

7 files changed

+241
-390
lines changed

7 files changed

+241
-390
lines changed

rb/lib/selenium/webdriver/common/driver.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,17 +249,14 @@ def execute_async_script(script, *args)
249249
end
250250

251251
#
252-
# virtual-authenticator
252+
# @return [VirtualAuthenticator]
253+
# @see VirtualAuthenticator
253254
#
254255

255256
def add_virtual_authenticator(options)
256257
bridge.add_virtual_authenticator(options)
257258
end
258259

259-
def remove_virtual_authenticator(authenticator)
260-
bridge.remove_virtual_authenticator(authenticator)
261-
end
262-
263260
#-------------------------------- sugar --------------------------------
264261

265262
#

rb/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,53 @@
2020
module Selenium
2121
module WebDriver
2222
class VirtualAuthenticator
23-
attr_reader :id, :bridge
23+
24+
attr_reader :options
2425

2526
#
2627
# api private
28+
# Use `Driver#add_virtual_authenticator`
2729
#
2830

29-
def initialize(bridge, authenticator_id)
31+
def initialize(bridge, authenticator_id, options)
3032
@id = authenticator_id
3133
@bridge = bridge
34+
@options = options
35+
@valid = true
3236
end
3337

3438
def add_credential(credential)
3539
credential = credential.as_json
36-
credential[:authenticatorId] = @id
37-
bridge.add_credential credential
40+
@bridge.add_credential credential, @id
3841
end
3942

4043
def credentials
41-
credential_data = bridge.credentials @id
44+
credential_data = @bridge.credentials @id
4245
credential_data.map do |cred|
4346
Credential.from_json(cred)
4447
end
4548
end
4649

4750
def remove_credential(credential_id)
48-
credential_id = Base64.urlsafe_encode64(credential_id.pack('C*')) if credential_id.instance_of?(Array)
49-
bridge.remove_credential credential_id, @id
51+
credential_id = Credential.encode(credential_id) if credential_id.instance_of?(Array)
52+
@bridge.remove_credential credential_id, @id
5053
end
5154

5255
def remove_all_credentials
53-
bridge.remove_all_credentials @id
56+
@bridge.remove_all_credentials @id
5457
end
5558

5659
def user_verified=(verified)
57-
bridge.user_verified verified, @id
60+
@bridge.user_verified verified, @id
61+
end
62+
63+
def remove!
64+
@bridge.remove_virtual_authenticator(@id)
65+
@valid = false
66+
end
67+
68+
def valid?
69+
@valid
5870
end
5971
end # VirtualAuthenticator
6072
end # WebDriver

rb/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,33 @@ class VirtualAuthenticatorOptions
2929
PROTOCOL = {ctap2: "ctap2", u2f: "ctap1/u2f"}.freeze
3030
TRANSPORT = {ble: "ble", usb: "usb", nfc: "nfc", internal: "internal"}.freeze
3131

32-
attr_accessor :protocol, :transport, :has_resident_key, :has_user_verification, :is_user_consenting,
33-
:is_user_verified
34-
35-
def initialize(protocol: PROTOCOL[:ctap2], transport: TRANSPORT[:usb], has_resident_key: false,
36-
has_user_verification: false, is_user_consenting: true, is_user_verified: false)
32+
attr_accessor :protocol, :transport, :resident_key, :user_verification, :user_consenting, :user_verified
33+
alias_method :resident_key?, :resident_key
34+
alias_method :user_verification?, :user_verification
35+
alias_method :user_consenting?, :user_consenting
36+
alias_method :user_verified?, :user_verified
37+
38+
def initialize(protocol: :ctap2, transport: :usb, resident_key: false,
39+
user_verification: false, user_consenting: true, user_verified: false)
3740
@protocol = protocol
3841
@transport = transport
39-
@has_resident_key = has_resident_key
40-
@has_user_verification = has_user_verification
41-
@is_user_consenting = is_user_consenting
42-
@is_user_verified = is_user_verified
42+
@resident_key = resident_key
43+
@user_verification = user_verification
44+
@user_consenting = user_consenting
45+
@user_verified = user_verified
4346
end
4447

4548
#
4649
# @api private
4750
#
4851

4952
def as_json(*)
50-
{
51-
protocol: @protocol,
52-
transport: @transport,
53-
hasResidentKey: @has_resident_key,
54-
hasUserVerification: @has_user_verification,
55-
isUserConsenting: @is_user_consenting,
56-
isUserVerified: @is_user_verified
57-
}
53+
{'protocol' => PROTOCOL[protocol],
54+
'transport' => TRANSPORT[transport],
55+
'hasResidentKey' => resident_key?,
56+
'hasUserVerification' => user_verification?,
57+
'isUserConsenting' => user_consenting?,
58+
'isUserVerified' => user_verified?}
5859
end
5960
end # VirtualAuthenticatorOptions
6061
end # WebDriver

rb/lib/selenium/webdriver/remote/bridge.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -574,31 +574,31 @@ def shadow_root(element)
574574

575575
def add_virtual_authenticator(options)
576576
authenticator_id = execute :add_virtual_authenticator, {}, options.as_json
577-
VirtualAuthenticator.new(self, authenticator_id)
577+
VirtualAuthenticator.new(self, authenticator_id, options)
578578
end
579579

580-
def remove_virtual_authenticator(authenticator)
581-
execute :remove_virtual_authenticator, {}, {authenticatorId: authenticator.id}
580+
def remove_virtual_authenticator(id)
581+
execute :remove_virtual_authenticator, {authenticatorId: id}
582582
end
583583

584-
def add_credential(credential)
585-
execute :add_credential, {}, credential
584+
def add_credential(credential, id)
585+
execute :add_credential, {authenticatorId: id}, credential
586586
end
587587

588588
def credentials(authenticator_id)
589589
execute :get_credentials, {}, {authenticatorId: authenticator_id}
590590
end
591591

592592
def remove_credential(credential_id, authenticator_id)
593-
execute :remove_credential, {}, {credentialId: credential_id, authenticatorId: authenticator_id}
593+
execute :remove_credential, {credentialId: credential_id, authenticatorId: authenticator_id}
594594
end
595595

596596
def remove_all_credentials(authenticator_id)
597-
execute :remove_all_credentials, {}, {authenticatorId: authenticator_id}
597+
execute :remove_all_credentials, {authenticatorId: authenticator_id}
598598
end
599599

600600
def user_verified(verified, authenticator_id)
601-
execute :set_user_verified, {}, {authenticatorId: authenticator_id, isUserVerified: verified}
601+
execute :set_user_verified, {authenticatorId: authenticator_id}, {isUserVerified: verified}
602602
end
603603

604604
private

rb/lib/selenium/webdriver/remote/commands.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ class Bridge
159159
remove_virtual_authenticator: [:delete, 'session/:session_id/webauthn/authenticator/:authenticatorId'],
160160
add_credential: [:post, 'session/:session_id/webauthn/authenticator/:authenticatorId/credential'],
161161
get_credentials: [:get, 'session/:session_id/webauthn/authenticator/:authenticatorId/credentials'],
162-
remove_credential: [:delete, 'session/:session_id/webauthn/authenticator/:authenticatorId/credentials/:credentialId'],
162+
remove_credential: [:delete,
163+
'session/:session_id/webauthn/authenticator/:authenticatorId/credentials/:credentialId'],
163164
remove_all_credentials: [:delete, 'session/:session_id/webauthn/authenticator/:authenticatorId/credentials'],
164165
set_user_verified: [:post, 'session/:session_id/webauthn/authenticator/:authenticatorId/uv']
165166

0 commit comments

Comments
 (0)