diff options
| author | Fatih Acet <acetfatih@gmail.com> | 2016-06-06 18:58:24 +0300 |
|---|---|---|
| committer | Fatih Acet <acetfatih@gmail.com> | 2016-06-06 18:58:24 +0300 |
| commit | 3f2db9d971dd92b446e2a615ed758090079a8c64 (patch) | |
| tree | c3034fc5bde8c3d0d2516de01e67d44c0c796fa1 /app/assets/javascripts/u2f/authenticate.js.coffee | |
| parent | 5b43eeee97f8e06a4ada4b173cb972c20d58d8ed (diff) | |
| parent | ac4e3e8cf016f2c2b3dcf3997673310a5df658a9 (diff) | |
| download | gitlab-ce-button-focus-state.tar.gz | |
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce into button-focus-statebutton-focus-state
Diffstat (limited to 'app/assets/javascripts/u2f/authenticate.js.coffee')
| -rw-r--r-- | app/assets/javascripts/u2f/authenticate.js.coffee | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/app/assets/javascripts/u2f/authenticate.js.coffee b/app/assets/javascripts/u2f/authenticate.js.coffee new file mode 100644 index 00000000000..6deb902c8de --- /dev/null +++ b/app/assets/javascripts/u2f/authenticate.js.coffee @@ -0,0 +1,63 @@ +# Authenticate U2F (universal 2nd factor) devices for users to authenticate with. +# +# State Flow #1: setup -> in_progress -> authenticated -> POST to server +# State Flow #2: setup -> in_progress -> error -> setup + +class @U2FAuthenticate + constructor: (@container, u2fParams) -> + @appId = u2fParams.app_id + @challenges = u2fParams.challenges + @signRequests = u2fParams.sign_requests + + start: () => + if U2FUtil.isU2FSupported() + @renderSetup() + else + @renderNotSupported() + + authenticate: () => + u2f.sign(@appId, @challenges, @signRequests, (response) => + if response.errorCode + error = new U2FError(response.errorCode) + @renderError(error); + else + @renderAuthenticated(JSON.stringify(response)) + , 10) + + ############# + # Rendering # + ############# + + templates: { + "notSupported": "#js-authenticate-u2f-not-supported", + "setup": '#js-authenticate-u2f-setup', + "inProgress": '#js-authenticate-u2f-in-progress', + "error": '#js-authenticate-u2f-error', + "authenticated": '#js-authenticate-u2f-authenticated' + } + + renderTemplate: (name, params) => + templateString = $(@templates[name]).html() + template = _.template(templateString) + @container.html(template(params)) + + renderSetup: () => + @renderTemplate('setup') + @container.find('#js-login-u2f-device').on('click', @renderInProgress) + + renderInProgress: () => + @renderTemplate('inProgress') + @authenticate() + + renderError: (error) => + @renderTemplate('error', {error_message: error.message()}) + @container.find('#js-u2f-try-again').on('click', @renderSetup) + + renderAuthenticated: (deviceResponse) => + @renderTemplate('authenticated') + # Prefer to do this instead of interpolating using Underscore templates + # because of JSON escaping issues. + @container.find("#js-device-response").val(deviceResponse) + + renderNotSupported: () => + @renderTemplate('notSupported') |
