app/views/devise/fido_usf_registrations/new.html.erb
<h2>Register key</h2>
<p>Please insert the key and press the button within 15 seconds</p>
<p id="waiting">Waiting...</p>
<p id="error" class="d-none"></p>
<%= form_tag send("#{resource_name}_fido_usf_registration_path"), method: 'post' do %>
<%= hidden_field_tag :response %>
<% end %>
<%= javascript_tag nonce: true do -%>
var appId = <%= @app_id.to_json.html_safe %>;
var registerRequests = <%= @registration_requests.to_json.html_safe %>;
var signRequests = <%= @sign_requests.to_json.html_safe %>;
var $waiting = document.getElementById('waiting');
var $error = document.getElementById('error');
var errorMap = {
1: 'Unknown error, try again',
2: "Bad request error, try again" ,
3: "This key isn't supported, please try another one",
4: 'The device is already registered, please login',
5: 'Authentication timed out. Please reload to try again.'
};
var setError = function(code) {
$waiting.className += ' d-none';
$error.className = $error.className.replace(/\bd-none\b/g, '');
$error.innerHTML = errorMap[code];
};
u2f.register(appId, registerRequests, signRequests, function(registerResponse) {
var form, reg;
if (registerResponse.errorCode) {
return setError(registerResponse.errorCode);
}
form = document.forms[0];
response = document.querySelector('[name=response]');
response.value = JSON.stringify(registerResponse);
form.submit();
}, 15);
<% end -%>