lemonldap-ng/lemonldap-ng-portal/site/coffee/u2fregistration.coffee

103 lines
2.8 KiB
CoffeeScript
Raw Normal View History

2017-02-02 22:48:32 +01:00
###
LemonLDAP::NG U2F registration script
###
2017-02-08 19:10:06 +01:00
setMsg = (msg, level) ->
$('#msg').attr 'trspan', msg
2017-02-08 19:10:06 +01:00
$('#msg').html window.translate msg
2018-09-02 11:23:01 +02:00
$('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger'
2017-02-08 19:10:06 +01:00
$('#color').addClass "message-#{level}"
level = 'success' if level == 'positive'
$('#color').addClass "alert-#{level}"
$('#msg').attr 'role', (if level == 'danger' then 'alert' else 'status')
2017-02-08 19:10:06 +01:00
displayError = (j, status, err) ->
console.log 'Error', err
res = JSON.parse j.responseText
if res and res.error
2020-02-16 22:42:10 +01:00
res = res.error.replace(/.* /, '')
console.log 'Returned error', res
setMsg res, 'warning'
2017-10-10 17:23:41 +02:00
# Registration function (launched by "register" button)
2017-02-02 22:48:32 +01:00
register = ->
2017-02-08 19:10:06 +01:00
# 1 get registration token
$.ajax
type: "POST",
url: "#{portal}2fregisters/u/register"
2017-02-08 19:10:06 +01:00
data: {}
dataType: 'json'
error: displayError
2017-02-08 19:10:06 +01:00
success: (ch) ->
# 2 build response
request = [
challenge: ch.challenge
version: ch.version
]
setMsg 'touchU2fDevice', 'positive'
$('#u2fPermission').show()
u2f.register ch.appId, request, [], (data) ->
$('#u2fPermission').hide()
# Handle errors
if data.errorCode
setMsg data.error, 'warning'
2017-02-08 19:10:06 +01:00
else
# 3 send response
$.ajax
type: "POST"
url: "#{portal}2fregisters/u/registration"
data:
2017-02-08 19:10:06 +01:00
registration: JSON.stringify data
2018-03-06 22:50:40 +01:00
challenge: JSON.stringify ch
keyName: $('#keyName').val()
2017-02-08 19:10:06 +01:00
dataType: 'json'
success: (resp) ->
if resp.error
2018-08-31 19:10:35 +02:00
if resp.error.match /badName/
2018-09-02 11:23:01 +02:00
setMsg resp.error, 'warning'
else setMsg 'u2fFailed', 'danger'
2017-02-08 19:10:06 +01:00
else if resp.result
2022-06-03 14:47:37 +02:00
$(document).trigger "mfaAdded", [ { "type": "u" } ]
2018-03-21 07:23:13 +01:00
setMsg 'yourKeyIsRegistered', 'positive'
error: displayError
2017-02-08 19:10:06 +01:00
2017-10-10 17:23:41 +02:00
# Verification function (launched by "verify" button)
2017-02-08 19:10:06 +01:00
verify = ->
# 1 get challenge
$.ajax
type: "POST",
url: "#{portal}2fregisters/u/verify"
2017-02-08 19:10:06 +01:00
data: {}
dataType: 'json'
error: displayError
2017-02-08 19:10:06 +01:00
success: (ch) ->
# 2 build response
setMsg 'touchU2fDevice', 'positive'
2018-04-20 16:15:26 +02:00
u2f.sign ch.appId, ch.challenge, ch.registeredKeys, (data) ->
2017-02-08 19:10:06 +01:00
# Handle errors
if data.errorCode
2018-04-17 22:40:34 +02:00
setMsg 'unableToGetKey', 'warning'
2017-02-08 19:10:06 +01:00
else
# 3 send response
$.ajax
type: "POST"
url: "#{portal}2fregisters/u/signature"
2017-02-08 19:10:06 +01:00
data:
signature: JSON.stringify data
challenge: ch.challenge
2017-02-08 19:10:06 +01:00
dataType: 'json'
success: (resp) ->
if resp.error
2018-09-02 11:23:01 +02:00
setMsg 'u2fFailed', 'danger'
2017-02-08 19:10:06 +01:00
else if resp.result
2018-03-21 07:23:13 +01:00
setMsg 'yourKeyIsVerified', 'positive'
2017-02-08 19:10:06 +01:00
error: (j, status, err) ->
console.log 'error', err
2017-02-02 22:48:32 +01:00
2017-10-10 17:23:41 +02:00
# Register "click" events
2017-02-02 22:48:32 +01:00
$(document).ready ->
2017-02-08 19:10:06 +01:00
$('#u2fPermission').hide()
$('#register').on 'click', register
$('#verify').on 'click', verify
$('#goback').attr 'href', portal