3572582dd2
1. According to the spec, either we have a single challenge with a number of `signRequests`, or a number of `signRequests`, each with it's own challenge. 2. Previously, we had both these - per-request challenges, as well as a single extra challenge. 3. This commit changes this so that the per-request challenges are removed, leaving only a single challenge, as per the v1.1 U2F API. 4. The existing implementation didn't work in Firefox, because the Firefox (extension) implementation is less flexible with regard to the inputs. 5. Fix teaspoon specs. 6. References: https://fidoalliance.org/specs/fido-u2f-v1.0-nfc-bt-amendment-20150514/fido-u2f-javascript-api.html#h2_background
36 lines
907 B
Ruby
36 lines
907 B
Ruby
class FakeU2fDevice
|
|
def initialize(page)
|
|
@page = page
|
|
end
|
|
|
|
def respond_to_u2f_registration
|
|
app_id = @page.evaluate_script('gon.u2f.app_id')
|
|
challenges = @page.evaluate_script('gon.u2f.challenges')
|
|
|
|
json_response = u2f_device(app_id).register_response(challenges[0])
|
|
|
|
@page.execute_script("
|
|
u2f.register = function(appId, registerRequests, signRequests, callback) {
|
|
callback(#{json_response});
|
|
};
|
|
")
|
|
end
|
|
|
|
def respond_to_u2f_authentication
|
|
app_id = @page.evaluate_script('gon.u2f.app_id')
|
|
challenge = @page.evaluate_script('gon.u2f.challenge')
|
|
json_response = u2f_device(app_id).sign_response(challenge)
|
|
|
|
@page.execute_script("
|
|
u2f.sign = function(appId, challenges, signRequests, callback) {
|
|
callback(#{json_response});
|
|
};
|
|
")
|
|
end
|
|
|
|
private
|
|
|
|
def u2f_device(app_id)
|
|
@u2f_device ||= U2F::FakeU2F.new(app_id)
|
|
end
|
|
end
|