cronapp-framework-mobile-js 2.9.2-SP.11 → 2.9.2-SP.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- (function(){angular.module("custom.controllers",[]),app.controller("LoginController",["$scope","$http","$location","$rootScope","$window","$state","$translate","Notification","ReportService","$ionicLoading","$timeout","$stateParams","$ionicModal","$cookies",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(b){"undefined"!=typeof Storage&&localStorage.setItem("_u",JSON.stringify(b)),f.go("app.home"),a.blockly&&a.blockly.events&&a.blockly.events.onLogin&&a.blockly.events.onLogin instanceof Function&&a.blockly.events.onLogin()}function p(a){let b;if(null!==a&&a.message){let c=JSON.parse(a.message);b=c.exception}else b="string"==typeof a?a:g.instant("General.ErrorNotSpecified");h.error(b)}d.refreshToken=window.refreshToken,app.registerEventsCronapi(a,g,m,j),d.http=b,a.Notification=h,a.params=l,d.getReport=function(a,b,c){i.openReport(a,b,c)};let q=c.search();for(let o in q)q.hasOwnProperty(o)&&(a.params[o]=q[o]);for(let o in app.userEvents)app.userEvents.hasOwnProperty(o)&&(a[o]=app.userEvents[o].bind(a));if(a.redirectToLogin=function(){localStorage.setItem("redir_mob",!0),e.location.href="/login"},a.autoLogin=function(){localStorage.getItem("_u")&&JSON.parse(localStorage.getItem("_u")).token&&window.refreshToken(h,b,function(){f.go("app.home")},function(){localStorage.removeItem("_u")})},a.autoLogin(),n.get("_u")){if(!localStorage.getItem("_u")){var r=decodeURIComponent(n.get("_u"));localStorage.setItem("_u",r)}f.go("app.home")}a.user={username:"",password:""},a.message={},a.login=function(c,d,e){a.message.error=void 0;let f={username:c?c:a.user.username,password:d?d:a.user.password},g={"Content-Type":"application/x-www-form-urlencoded"};e&&(g["X-AUTH-TOKEN"]=e),window.hostApp?b({method:"POST",url:window.hostApp+"auth",data:$.param(f),headers:g}).success(o).error(p):h.error("HostApp is required!")},d.infiniteReached=function(){};try{let b=$controller("AfterLoginController",{$scope:a});app.copyContext(b,this,"AfterLoginController")}catch(a){}k(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterLoginRender&&a.blockly.events.afterLoginRender instanceof Function&&a.blockly.events.afterLoginRender()})}]),app.controller("HomeController",["$scope","$http","$rootScope","$state","$timeout","$translate","Notification","$ionicHistory","$ionicModal","$ionicLoading","$stateParams","$location","$controller","UploadService","ReportService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){app.registerEventsCronapi(a,f,i,j),c.http=b,c.Notification=g,c.UploadService=n,a.params=k,c.getReport=function(a,b,c){o.openReport(a,b,c)};let p=l.search();for(let q in p)p.hasOwnProperty(q)&&(a.params[q]=p[q]);for(let p in app.userEvents)app.userEvents.hasOwnProperty(p)&&(a[p]=app.userEvents[p].bind(a));c.session=localStorage._u?JSON.parse(localStorage._u):null,c.session?c.session.token&&window.refreshToken(g,b,function(){},c.logout):!a.ignoreAuth&&("undefined"!=typeof Storage&&sessionStorage.removeItem("_u"),d.go("login"));try{var q=m("AfterHomeController",{$scope:a});app.copyContext(q,this,"AfterHomeController")}catch(a){}e(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterHomeRender&&a.blockly.events.afterHomeRender instanceof Function&&a.blockly.events.afterHomeRender()})}]),app.controller("PublicController",["$controller","$scope",function(a,b){b.ignoreAuth=!0,angular.extend(this,a("HomeController",{$scope:b}))}]),app.controller("SignupController",["$scope","$translate","$ionicModal","$ionicLoading",function(a,b,c,d){app.registerEventsCronapi(a,b,c,d),a.Notification=Notification,a.cronapi.screen.changeValueOfField("vars.signupEmail",""),a.cronapi.screen.changeValueOfField("vars.signupUsername",""),a.cronapi.screen.changeValueOfField("vars.signupPassword",""),a.cronapi.screen.changeValueOfField("vars.signupConfirmPassword","")}]),app.controller("SignupController",["$scope","$stateParams","Notification","$location","$http","$rootScope","$translate","$ionicModal","$ionicLoading","$timeout","UploadService","ReportService",function(a,b,c,d,e,f,g,h,i,j,k){for(let l in app.registerEventsCronapi(a,g,h,i),f.http=e,f.Notification=c,a.params=b,f.$http=e,f.UploadService=k,a.listCanSwipe=!0,app.userEvents)a[l]=app.userEvents[l].bind(a);a.cronapi.screen.changeValueOfField("vars.signupEmail",""),a.cronapi.screen.changeValueOfField("vars.signupUsername",""),a.cronapi.screen.changeValueOfField("vars.signupPassword",""),a.cronapi.screen.changeValueOfField("vars.signupConfirmPassword","")}]),app.controller("ResetPasswordController",["$scope","$state","$http","Notification","$translate",function(a,b,c,d,e){a.resetPasswordWithOTP=function(a){if(!a||!a.otp||!a.newPassword||!a.newPasswordConfirmation)return void d.error(e.instant("AllFieldsRequired"));const f=a.otp.replaceAll(" ",""),g=a.newPassword,h=a.newPasswordConfirmation,i=localStorage.getItem("otpToken");return i?void(window.hostApp&&g===h?c({method:"POST",url:window.hostApp+"auth/confirm-reset-password",data:$.param({password:g,otp:f}),headers:{"Content-Type":"application/x-www-form-urlencoded","X-AUTH-TOKEN":i}}).success(()=>{a.otp="",a.newPassword="",a.passwordConfirmation="",b.go("login").then(()=>{d.info(e.instant("ResetPasswordSuccess"))})}).error(a=>{d.error(a.message),console.error(a)}):d.error(e.instant("ResetPasswordDoesNotMatch"))):void d.error(e.instant("OTPInvalid"))}}]),app.controller("MenuController",["$scope","$http","$rootScope","$state","$timeout","$translate","Notification","$ionicHistory","$ionicModal","$ionicLoading","$cookies",function(a,b,c,d,e,f,g,h,i,j,k){for(let l in app.registerEventsCronapi(a,f,i,j),c.http=b,a.Notification=g,a.isExtendedFromPublic||(a.folder="logged"),app.userEvents)a[l]=app.userEvents[l].bind(a);a.ignoreAuth||(a.openChangePassword=function(){a.modal.modelEl?a.modal.show():b({url:"views/logged/_changepassword.view.html"}).then(function(b){a.modal=i.fromTemplate($(b.data).last().text(),{scope:a,animation:"slide-in-up"}),a.modal.show()})},a.closeChangePassword=function(){a.modal.hide()},c.logout=function(){const a=a=>{if(c.session={},k.remove("_u",{path:"/"}),"undefined"!=typeof Storage&&localStorage.removeItem("_u"),a&&a.logoutUri){const b=cordova.InAppBrowser.open(a.logoutUri,"_blank","location=no,footer=yes,zoom=no,enableViewportScale=yes,hidenavigationbuttons=yes,clearcache=yes"),c=e=>{e.url===a.appBaseUrl&&(b.removeEventListener("loadstart",c),b.close(),d.go("login"))};b.addEventListener("loadstart",c)}else d.go("login")};b({method:"GET",url:window.hostApp+"logout",headers:{"Content-Type":"application/json"}}).success(a).error(a)}),a.http({method:"GET",url:"views/"+a.folder+"/menu.view.html"}).then(function(b){0<$(b.data).find("ion-nav-bar").length?(a.isOldMenu=!0,0<$(document).find("ion-header-bar").length&&$(document).find("ion-nav-bar").show()):a.isOldMenu=!1})}]),app.controller("PublicMenuController",["$controller","$scope",function(a,b){b.folder="public",b.isExtendedFromPublic=!0,angular.extend(this,a("MenuController",{$scope:b}))}]),app.controller("chatController",["$scope","$state","$ionicPopup","$ionicScrollDelegate","$timeout","$interval","$ionicModal","$translate","$rootScope","$http","Notification",function(a,b,c,d,f,g,h,i,j,k,l){for(let e in app.registerEventsCronapi(a,i,h,$ionicLoading),j.http=k,a.Notification=l,app.userEvents)a[e]=app.userEvents[e].bind(a);let m,n,o,p=JSON.parse(localStorage._u).user.username,q=d.$getByHandle("userMessageScroll");a.enter=function(){f(function(){m=document.body.querySelector(".homeView .bar-footer"),n=document.body.querySelector(".homeView .scroll-content"),o=angular.element(m.querySelector("textarea"))},0)},a.isEnter=function(a){13===a.keyCode?f(function(){a.stopPropagation(),$("#sendButton").trigger("click")},0):null},a.refreshScroll=function(b,c){f(function(){b=b||a.scrollDown,q.resize(),b&&q.scrollBottom(!0),a.checkScroll()},c||1e3)},a.scrollDown=!0,a.checkScroll=function(){return f(function(){let b=q.getScrollPosition().top,c=q.getScrollView().__maxScrollTop;a.scrollDown=b>=c,a.$apply()},0),!0}}]),app.controller("PageController",["$scope","$stateParams","Notification","$location","$http","$rootScope","$translate","$ionicModal","$ionicLoading","$timeout","UploadService","ReportService",function(a,b,c,d,e,f,g,h,i,j,k,l){app.registerEventsCronapi(a,g,h,i),f.http=e,f.Notification=c,a.params=b,f.$http=e,f.UploadService=k,a.listCanSwipe=!0,f.getReport=function(a,b,c){l.openReport(a,b,c)};let m=d.search();for(let n in m)m.hasOwnProperty(n)&&(a.params[n]=m[n]);if(f.session=void 0===localStorage.getItem("_u")?null:JSON.parse(localStorage.getItem("_u")),a.registerComponentScripts=function(){$(".carousel-indicators li").on("click",function(){let a="#"+$(this).parent().parent().parent().attr("id"),b=$(a+" .carousel-indicators li").index(this);$(a+" #carousel-example-generic").carousel(b)})},a.registerComponentScripts(),a.isOldMenu){let b=a.params.name||"home";a.http({method:"GET",url:"views/logged/"+b+".view.html"}).then(function(a){0<$(a.data).find("ion-header-bar").length?$(document).find("ion-nav-bar").hide():0<$(document).find("ion-header-bar").length&&$(document).find("ion-nav-bar").show()})}try{let b=$controller("AfterPageController",{$scope:a});app.copyContext(b,this,"AfterPageController")}catch(a){}j(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterPageRender&&a.blockly.events.afterPageRender instanceof Function&&a.blockly.events.afterPageRender()})}]),app.controller("InitialController",["$scope","$stateParams","$http","Notification","$location","$rootScope","$translate","$ionicModal","$ionicLoading","$ionicPlatform","$controller","$timeout","UploadService","$ionicHistory",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){j.registerBackButtonAction(function(a){let b=n.viewHistory();b.histories&&b.histories&&Object.keys(b.histories).length&&("app.home"===b.currentView.stateName?(a.preventDefault(),a.stopPropagation(),navigator.app.exitApp()):window.history.back())},101),app.registerEventsCronapi(a,g,h,i),f.http=c,f.Notification=d,f.UploadService=m,a.params=b,a.$http=c;let o=e.search();for(let p in o)o.hasOwnProperty(p)&&(a.params[p]=o[p]);a.blockly.js.blockly.auth.Home.change();try{let b=k("AfterHomeController",{$scope:a});app.copyContext(b,this,"AfterHomeController")}catch(a){}l(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterHomeRender&&a.blockly.events.afterHomeRender instanceof Function&&a.blockly.events.afterHomeRender()})}])})(app),window.safeApply=function(a){let b=this.$root.$$phase;"$apply"===b||"$digest"===b?a&&"function"==typeof a&&a():this.$apply(a)};
1
+ (function(){angular.module("custom.controllers",[]),app.controller("LoginController",["$scope","$http","$location","$rootScope","$window","$state","$translate","Notification","ReportService","$ionicLoading","$timeout","$stateParams","$ionicModal","$cookies",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(b){"undefined"!=typeof Storage&&localStorage.setItem("_u",JSON.stringify(b)),f.go("app.home"),a.blockly&&a.blockly.events&&a.blockly.events.onLogin&&a.blockly.events.onLogin instanceof Function&&a.blockly.events.onLogin()}function p(a){let b;if(null!==a&&a.message){let c=JSON.parse(a.message);b=c.exception}else b="string"==typeof a?a:g.instant("General.ErrorNotSpecified");h.error(b)}d.refreshToken=window.refreshToken,app.registerEventsCronapi(a,g,m,j),d.http=b,a.Notification=h,a.params=l,d.getReport=function(a,b,c){i.openReport(a,b,c)};let q=c.search();for(let o in q)q.hasOwnProperty(o)&&(a.params[o]=q[o]);for(let o in app.userEvents)app.userEvents.hasOwnProperty(o)&&(a[o]=app.userEvents[o].bind(a));if(a.redirectToLogin=function(){localStorage.setItem("redir_mob",!0),e.location.href="/login"},a.biometricAuthentication=()=>"true"==(document.querySelector("meta[name=\"biometric-authentication\"]")||{}).content+"",a.autoLogin=function(){const c=localStorage.getItem("_u");c&&JSON.parse(c).token&&(a.biometricAuthentication()?document.addEventListener("deviceready",()=>{window.Fingerprint&&window.Fingerprint.isAvailable(()=>{window.Fingerprint.show(()=>{window.refreshToken(h,b,()=>f.go("app.home"),()=>localStorage.removeItem("_u"))},a=>{"biometric_success"===a?window.refreshToken(h,b,()=>f.go("app.home"),()=>localStorage.removeItem("_u")):p({message:a.message})})},()=>{console.error("Biometric Authentication is not available in this device")})},!1):window.refreshToken(h,b,function(){f.go("app.home")},function(){localStorage.removeItem("_u")}))},a.autoLogin(),n.get("_u")){if(!localStorage.getItem("_u")){var r=decodeURIComponent(n.get("_u"));localStorage.setItem("_u",r)}f.go("app.home")}a.user={username:"",password:""},a.message={},a.login=function(c,d,e){a.message.error=void 0;let f={username:c?c:a.user.username,password:d?d:a.user.password},g={"Content-Type":"application/x-www-form-urlencoded"};e&&(g["X-AUTH-TOKEN"]=e),window.hostApp?b({method:"POST",url:window.hostApp+"auth",data:$.param(f),headers:g}).success(o).error(p):h.error("HostApp is required!")},d.infiniteReached=function(){};try{let b=$controller("AfterLoginController",{$scope:a});app.copyContext(b,this,"AfterLoginController")}catch(a){}k(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterLoginRender&&a.blockly.events.afterLoginRender instanceof Function&&a.blockly.events.afterLoginRender()})}]),app.controller("HomeController",["$scope","$http","$rootScope","$state","$timeout","$translate","Notification","$ionicHistory","$ionicModal","$ionicLoading","$stateParams","$location","$controller","UploadService","ReportService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){app.registerEventsCronapi(a,f,i,j),c.http=b,c.Notification=g,c.UploadService=n,a.params=k,c.getReport=function(a,b,c){o.openReport(a,b,c)};let p=l.search();for(let q in p)p.hasOwnProperty(q)&&(a.params[q]=p[q]);for(let p in app.userEvents)app.userEvents.hasOwnProperty(p)&&(a[p]=app.userEvents[p].bind(a));c.session=localStorage._u?JSON.parse(localStorage._u):null,c.session?c.session.token&&window.refreshToken(g,b,function(){},c.logout):!a.ignoreAuth&&("undefined"!=typeof Storage&&sessionStorage.removeItem("_u"),d.go("login"));try{var q=m("AfterHomeController",{$scope:a});app.copyContext(q,this,"AfterHomeController")}catch(a){}e(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterHomeRender&&a.blockly.events.afterHomeRender instanceof Function&&a.blockly.events.afterHomeRender()})}]),app.controller("PublicController",["$controller","$scope",function(a,b){b.ignoreAuth=!0,angular.extend(this,a("HomeController",{$scope:b}))}]),app.controller("SignupController",["$scope","$translate","$ionicModal","$ionicLoading",function(a,b,c,d){app.registerEventsCronapi(a,b,c,d),a.Notification=Notification,a.cronapi.screen.changeValueOfField("vars.signupEmail",""),a.cronapi.screen.changeValueOfField("vars.signupUsername",""),a.cronapi.screen.changeValueOfField("vars.signupPassword",""),a.cronapi.screen.changeValueOfField("vars.signupConfirmPassword","")}]),app.controller("SignupController",["$scope","$stateParams","Notification","$location","$http","$rootScope","$translate","$ionicModal","$ionicLoading","$timeout","UploadService","ReportService",function(a,b,c,d,e,f,g,h,i,j,k){for(let l in app.registerEventsCronapi(a,g,h,i),f.http=e,f.Notification=c,a.params=b,f.$http=e,f.UploadService=k,a.listCanSwipe=!0,app.userEvents)a[l]=app.userEvents[l].bind(a);a.cronapi.screen.changeValueOfField("vars.signupEmail",""),a.cronapi.screen.changeValueOfField("vars.signupUsername",""),a.cronapi.screen.changeValueOfField("vars.signupPassword",""),a.cronapi.screen.changeValueOfField("vars.signupConfirmPassword","")}]),app.controller("ResetPasswordController",["$scope","$state","$http","Notification","$translate",function(a,b,c,d,e){a.resetPasswordWithOTP=function(a){if(!a||!a.otp||!a.newPassword||!a.newPasswordConfirmation)return void d.error(e.instant("AllFieldsRequired"));const f=a.otp.replaceAll(" ",""),g=a.newPassword,h=a.newPasswordConfirmation,i=localStorage.getItem("otpToken");return i?void(window.hostApp&&g===h?c({method:"POST",url:window.hostApp+"auth/confirm-reset-password",data:$.param({password:g,otp:f}),headers:{"Content-Type":"application/x-www-form-urlencoded","X-AUTH-TOKEN":i}}).success(()=>{a.otp="",a.newPassword="",a.passwordConfirmation="",b.go("login").then(()=>{d.info(e.instant("ResetPasswordSuccess"))})}).error(a=>{d.error(a.message),console.error(a)}):d.error(e.instant("ResetPasswordDoesNotMatch"))):void d.error(e.instant("OTPInvalid"))}}]),app.controller("MenuController",["$scope","$http","$rootScope","$state","$timeout","$translate","Notification","$ionicHistory","$ionicModal","$ionicLoading","$cookies",function(a,b,c,d,e,f,g,h,i,j,k){for(let l in app.registerEventsCronapi(a,f,i,j),c.http=b,a.Notification=g,a.isExtendedFromPublic||(a.folder="logged"),app.userEvents)a[l]=app.userEvents[l].bind(a);a.ignoreAuth||(a.openChangePassword=function(){a.modal.modelEl?a.modal.show():b({url:"views/logged/_changepassword.view.html"}).then(function(b){a.modal=i.fromTemplate($(b.data).last().text(),{scope:a,animation:"slide-in-up"}),a.modal.show()})},a.closeChangePassword=function(){a.modal.hide()},c.logout=function(){const a=a=>{if(c.session={},k.remove("_u",{path:"/"}),"undefined"!=typeof Storage&&localStorage.removeItem("_u"),a&&a.logoutUri){const b=cordova.InAppBrowser.open(a.logoutUri,"_blank","location=no,footer=yes,zoom=no,enableViewportScale=yes,hidenavigationbuttons=yes,clearcache=yes"),c=e=>{e.url===a.appBaseUrl&&(b.removeEventListener("loadstart",c),b.close(),d.go("login"))};b.addEventListener("loadstart",c)}else d.go("login")};b({method:"GET",url:window.hostApp+"logout",headers:{"Content-Type":"application/json"}}).success(a).error(a)}),a.http({method:"GET",url:"views/"+a.folder+"/menu.view.html"}).then(function(b){0<$(b.data).find("ion-nav-bar").length?(a.isOldMenu=!0,0<$(document).find("ion-header-bar").length&&$(document).find("ion-nav-bar").show()):a.isOldMenu=!1})}]),app.controller("PublicMenuController",["$controller","$scope",function(a,b){b.folder="public",b.isExtendedFromPublic=!0,angular.extend(this,a("MenuController",{$scope:b}))}]),app.controller("chatController",["$scope","$state","$ionicPopup","$ionicScrollDelegate","$timeout","$interval","$ionicModal","$translate","$rootScope","$http","Notification",function(a,b,c,d,f,g,h,i,j,k,l){for(let e in app.registerEventsCronapi(a,i,h,$ionicLoading),j.http=k,a.Notification=l,app.userEvents)a[e]=app.userEvents[e].bind(a);let m,n,o,p=JSON.parse(localStorage._u).user.username,q=d.$getByHandle("userMessageScroll");a.enter=function(){f(function(){m=document.body.querySelector(".homeView .bar-footer"),n=document.body.querySelector(".homeView .scroll-content"),o=angular.element(m.querySelector("textarea"))},0)},a.isEnter=function(a){13===a.keyCode?f(function(){a.stopPropagation(),$("#sendButton").trigger("click")},0):null},a.refreshScroll=function(b,c){f(function(){b=b||a.scrollDown,q.resize(),b&&q.scrollBottom(!0),a.checkScroll()},c||1e3)},a.scrollDown=!0,a.checkScroll=function(){return f(function(){let b=q.getScrollPosition().top,c=q.getScrollView().__maxScrollTop;a.scrollDown=b>=c,a.$apply()},0),!0}}]),app.controller("PageController",["$scope","$stateParams","Notification","$location","$http","$rootScope","$translate","$ionicModal","$ionicLoading","$timeout","UploadService","ReportService",function(a,b,c,d,e,f,g,h,i,j,k,l){app.registerEventsCronapi(a,g,h,i),f.http=e,f.Notification=c,a.params=b,f.$http=e,f.UploadService=k,a.listCanSwipe=!0,f.getReport=function(a,b,c){l.openReport(a,b,c)};let m=d.search();for(let n in m)m.hasOwnProperty(n)&&(a.params[n]=m[n]);if(f.session=void 0===localStorage.getItem("_u")?null:JSON.parse(localStorage.getItem("_u")),a.registerComponentScripts=function(){$(".carousel-indicators li").on("click",function(){let a="#"+$(this).parent().parent().parent().attr("id"),b=$(a+" .carousel-indicators li").index(this);$(a+" #carousel-example-generic").carousel(b)})},a.registerComponentScripts(),a.isOldMenu){let b=a.params.name||"home";a.http({method:"GET",url:"views/logged/"+b+".view.html"}).then(function(a){0<$(a.data).find("ion-header-bar").length?$(document).find("ion-nav-bar").hide():0<$(document).find("ion-header-bar").length&&$(document).find("ion-nav-bar").show()})}try{let b=$controller("AfterPageController",{$scope:a});app.copyContext(b,this,"AfterPageController")}catch(a){}j(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterPageRender&&a.blockly.events.afterPageRender instanceof Function&&a.blockly.events.afterPageRender()})}]),app.controller("InitialController",["$scope","$stateParams","$http","Notification","$location","$rootScope","$translate","$ionicModal","$ionicLoading","$ionicPlatform","$controller","$timeout","UploadService","$ionicHistory",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){j.registerBackButtonAction(function(a){let b=n.viewHistory();b.histories&&b.histories&&Object.keys(b.histories).length&&("app.home"===b.currentView.stateName?(a.preventDefault(),a.stopPropagation(),navigator.app.exitApp()):window.history.back())},101),app.registerEventsCronapi(a,g,h,i),f.http=c,f.Notification=d,f.UploadService=m,a.params=b,a.$http=c;let o=e.search();for(let p in o)o.hasOwnProperty(p)&&(a.params[p]=o[p]);a.blockly.js.blockly.auth.Home.change();try{let b=k("AfterHomeController",{$scope:a});app.copyContext(b,this,"AfterHomeController")}catch(a){}l(function(){a.blockly&&a.blockly.events&&a.blockly.events.afterHomeRender&&a.blockly.events.afterHomeRender instanceof Function&&a.blockly.events.afterHomeRender()})}])})(app),window.safeApply=function(a){let b=this.$root.$$phase;"$apply"===b||"$digest"===b?a&&"function"==typeof a&&a():this.$apply(a)};
@@ -50,16 +50,44 @@
50
50
  $window.location.href = '/login';
51
51
  };
52
52
 
53
- $scope.autoLogin = function(){
54
- if(localStorage.getItem('_u') && JSON.parse(localStorage.getItem('_u')).token){
55
- window.refreshToken(Notification, $http, function(){
56
- $state.go("app.home");
57
- }, function(){
58
- localStorage.removeItem('_u');
59
- })
53
+ $scope.biometricAuthentication = () => {
54
+ return String((document.querySelector('meta[name="biometric-authentication"]') || {}).content) == 'true';
55
+ };
56
+
57
+ $scope.autoLogin = function () {
58
+ // Verify if Biometric Authentication is enabled
59
+ const userInfo = localStorage.getItem('_u');
60
+ if (userInfo && JSON.parse(userInfo).token) {
61
+ if (!$scope.biometricAuthentication()) {
62
+ window.refreshToken(Notification, $http, function () {
63
+ $state.go("app.home");
64
+ }, function () {
65
+ localStorage.removeItem('_u');
66
+ });
67
+ } else {
68
+ document.addEventListener("deviceready", () => {
69
+ if (window.Fingerprint) {
70
+ window.Fingerprint.isAvailable(result => {
71
+ window.Fingerprint.show(() => {
72
+ window.refreshToken(Notification, $http, () => $state.go("app.home"), () => localStorage.removeItem('_u'));
73
+ }, error => {
74
+ if (error === 'biometric_success') {
75
+ window.refreshToken(Notification, $http, () => $state.go("app.home"), () => localStorage.removeItem('_u'));
76
+ } else {
77
+ handleError({message: error.message});
78
+ }
79
+ });
80
+ }, error => {
81
+ console.error("Biometric Authentication is not available in this device");
82
+ });
83
+ }
84
+ }, false);
85
+ }
60
86
  }
61
87
  };
88
+
62
89
  $scope.autoLogin();
90
+
63
91
  if ($cookies.get('_u')) {
64
92
  if (!localStorage.getItem('_u')) {
65
93
  var decodedUser = decodeURIComponent($cookies.get('_u'));
@@ -68,6 +96,7 @@
68
96
  // Redirect to home page
69
97
  $state.go("app.home");
70
98
  }
99
+
71
100
  $scope.user = { username : "" , password : "" };
72
101
  $scope.message = {};
73
102
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cronapp-framework-mobile-js",
3
- "version": "2.9.2-SP.11",
3
+ "version": "2.9.2-SP.13",
4
4
  "description": "Javascript library for CronApp's projects",
5
5
  "main": "cronapp.framework.mobile.js",
6
6
  "scripts": {