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

90 lines
2.4 KiB
CoffeeScript
Raw Normal View History

###
LemonLDAP::NG TOTP registration script
###
setMsg = (msg, level) ->
$('#msg').attr 'trspan', msg
$('#msg').html window.translate msg
2018-04-10 11:06:06 +02:00
$('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger'
$('#color').addClass "message-#{level}"
level = 'success' if level == 'positive'
$('#color').addClass "alert-#{level}"
$('#msg').attr 'role', (if level == 'danger' then 'alert' else 'status')
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'
token=''
2021-06-14 17:16:16 +02:00
getKey = () ->
2018-04-10 11:06:06 +02:00
setMsg 'yourTotpKey', 'warning'
$.ajax
type: "POST",
url: "#{portal}/2fregisters/totp/getkey"
dataType: 'json'
error: displayError
# Display key and QR code
success: (data) ->
2018-03-18 14:26:45 +01:00
if data.error
2018-05-07 19:26:39 +02:00
if data.error.match /totpExistingKey/
$("#divToHide").hide()
2018-03-18 14:26:45 +01:00
return setMsg data.error, 'warning'
unless data.portal and data.user and data.secret
2018-03-18 14:26:45 +01:00
return setMsg('PE24', 'danger')
# Generate OTP url
2018-05-07 19:26:39 +02:00
$("#divToHide").show()
s = "otpauth://totp/#{escape(data.portal)}:#{escape(data.user)}?secret=#{data.secret}&issuer=#{escape(data.portal)}"
2018-02-21 22:07:12 +01:00
if data.digits != 6
s += "&digits=#{data.digits}"
if data.interval != 30
s += "&period=#{data.interval}"
# Generate QR code
qr = new QRious
element: document.getElementById('qr'),
value: s
size:150
# Display serialized key
secret = data.secret || ""
$('#secret').text(secret.toUpperCase().replace(/(.{4})/g, '$1 ').trim())
# Show message (warning level if key is new)
if data.newkey
setMsg 'yourNewTotpKey', 'warning'
else
setMsg 'yourTotpKey', 'success'
token = data.token
verify = ->
val = $('#code').val()
unless val
setMsg 'totpMissingCode', 'warning'
$("#code").focus()
else
$.ajax
type: "POST",
url: "#{portal}/2fregisters/totp/verify"
dataType: 'json'
data:
token: token
code: val
TOTPName: $('#TOTPName').val()
error: displayError
success: (data) ->
if data.error
2018-09-02 11:23:01 +02:00
if data.error.match /bad(Code|Name)/
setMsg data.error, 'warning'
else
setMsg data.error, 'danger'
else
2022-06-03 14:47:37 +02:00
$(document).trigger "mfaAdded", [ { "type": "totp" } ]
setMsg 'yourKeyIsRegistered', 'success'
$(document).ready ->
2021-06-14 17:16:16 +02:00
getKey()
2020-02-16 22:42:10 +01:00
$('#verify').on 'click', () -> verify()