From 806aa5fd87757a610595d3bcaa9d6a44e24375f1 Mon Sep 17 00:00:00 2001 From: Christophe Maudoux Date: Mon, 2 Apr 2018 20:21:51 +0200 Subject: [PATCH] Add deleteDevice function on delete buttons click event (#1386) --- .../site/coffee/2fregistration.coffee | 45 +++++++++++++ .../htdocs/static/common/js/2fregistration.js | 65 +++++++++++++++++++ .../static/common/js/2fregistration.min.js | 1 + .../site/templates/bootstrap/2fregisters.tpl | 16 ++++- 4 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 lemonldap-ng-portal/site/coffee/2fregistration.coffee create mode 100644 lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.js create mode 100644 lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.min.js diff --git a/lemonldap-ng-portal/site/coffee/2fregistration.coffee b/lemonldap-ng-portal/site/coffee/2fregistration.coffee new file mode 100644 index 000000000..a17910cf5 --- /dev/null +++ b/lemonldap-ng-portal/site/coffee/2fregistration.coffee @@ -0,0 +1,45 @@ +### +LemonLDAP::NG 2F registration script +### + +setMsg = (msg, level) -> + $('#msg').html window.translate msg + $('#color').removeClass 'message-positive message-warning alert-success alert-warning' + $('#color').addClass "message-#{level}" + level = 'success' if level == 'positive' + $('#color').addClass "alert-#{level}" + +displayError = (j, status, err) -> + console.log 'Error', err + res = JSON.parse j.responseText + if res and res.error + res = res.error.replace /.* /, '' + console.log 'Returned error', res + setMsg res, 'warning' + +# Unregistration function (launched by "unregister" button) +delete2F = (device) -> + if device == 'U2F' + device = 'u' + else if device == 'UBK' + device = 'yubikey' + else if device == 'TOTP' + device = 'totp' + else setMsg 'u2fFailed', 'warning' + $.ajax + type: "POST" + url: "#{portal}2fregisters/#{device}/delete" + data: {} + dataType: 'json' + error: displayError + success: (resp) -> + if resp.error + setMsg 'u2fFailed', 'warning' + else if resp.result + setMsg 'yourKeyIsUnregistered', 'positive' + error: displayError + +# Register "click" events +$(document).ready -> + $('body').on 'click', '.btn-danger', () -> delete2F ( $(this).attr 'device' ) + $('#goback').attr 'href', portal diff --git a/lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.js b/lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.js new file mode 100644 index 000000000..7b330fd78 --- /dev/null +++ b/lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.js @@ -0,0 +1,65 @@ +// Generated by CoffeeScript 1.9.3 + +/* +LemonLDAP::NG 2F registration script + */ + +(function() { + var delete2F, displayError, setMsg; + + setMsg = function(msg, level) { + $('#msg').html(window.translate(msg)); + $('#color').removeClass('message-positive message-warning alert-success alert-warning'); + $('#color').addClass("message-" + level); + if (level === 'positive') { + level = 'success'; + } + return $('#color').addClass("alert-" + level); + }; + + displayError = function(j, status, err) { + var res; + console.log('Error', err); + res = JSON.parse(j.responseText); + if (res && res.error) { + res = res.error.replace(/.* /, ''); + console.log('Returned error', res); + return setMsg(res, 'warning'); + } + }; + + delete2F = function(device) { + if (device === 'U2F') { + device = 'u'; + } else if (device === 'UBK') { + device = 'yubikey'; + } else if (device === 'TOTP') { + device = 'totp'; + } else { + setMsg('u2fFailed', 'warning'); + } + return $.ajax({ + type: "POST", + url: portal + "2fregisters/" + device + "/delete", + data: {}, + dataType: 'json', + error: displayError, + success: function(resp) { + if (resp.error) { + return setMsg('u2fFailed', 'warning'); + } else if (resp.result) { + return setMsg('yourKeyIsUnregistered', 'positive'); + } + }, + error: displayError + }); + }; + + $(document).ready(function() { + $('body').on('click', '.btn-danger', function() { + return delete2F($(this).attr('device')); + }); + return $('#goback').attr('href', portal); + }); + +}).call(this); diff --git a/lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.min.js b/lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.min.js new file mode 100644 index 000000000..3b6bae196 --- /dev/null +++ b/lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.min.js @@ -0,0 +1 @@ +(function(){var b,a,c;c=function(d,e){$("#msg").html(window.translate(d));$("#color").removeClass("message-positive message-warning alert-success alert-warning");$("#color").addClass("message-"+e);if(e==="positive"){e="success"}return $("#color").addClass("alert-"+e)};a=function(e,d,g){var f;console.log("Error",g);f=JSON.parse(e.responseText);if(f&&f.error){f=f.error.replace(/.* /,"");console.log("Returned error",f);return c(f,"warning")}};b=function(d){if(d==="U2F"){d="u"}else{if(d==="UBK"){d="yubikey"}else{if(d==="TOTP"){d="totp"}else{c("u2fFailed","warning")}}}return $.ajax({type:"POST",url:portal+"2fregisters/"+d+"/delete",data:{},dataType:"json",error:a,success:function(e){if(e.error){return c("u2fFailed","warning")}else{if(e.result){return c("yourKeyIsUnregistered","positive")}}},error:a})};$(document).ready(function(){$("body").on("click",".btn-danger",function(){return b($(this).attr("device"))});return $("#goback").attr("href",portal)})}).call(this); \ No newline at end of file diff --git a/lemonldap-ng-portal/site/templates/bootstrap/2fregisters.tpl b/lemonldap-ng-portal/site/templates/bootstrap/2fregisters.tpl index 69a5835b3..ee64b5f8a 100644 --- a/lemonldap-ng-portal/site/templates/bootstrap/2fregisters.tpl +++ b/lemonldap-ng-portal/site/templates/bootstrap/2fregisters.tpl @@ -1,7 +1,14 @@
+ + +
+ + +
@@ -16,9 +23,9 @@ - +
- +   Unregister @@ -48,5 +55,10 @@ + + +