1/* 2 * CWLogin - v0.5.1 - 2024.06.13 11:17 3 * Copyright © 2024 cambio Mobilitätsservice GmbH & Co KG 4 */ 5angular.module("CWLogin",["CWLogin.directives","CWLogin.resources","ui.router","ui.bootstrap","pascalprecht.translate","CWLogin.templates","uri-template"]).constant("CONF",{LANGUAGE_FROM_ENVIRONMENT:!1,STORAGE_UID_KEY:"storageUID",REST_URL:CWL.restURL||"http://login-test.cambio.intra/login",REQUEST_TIMEOUT:CWL.requestTimeout||"10000",FATAL_ERROR_URL:CWL.fatalErrorURL||"fatal.html",CLIENT_ID:CWL.client_id||"cwMobil",CLIENT_SECRET:CWL.client_secret,ALL_RELATIONS:CWL.allRelations||!1,API_CONSUMER_KEY:CWL.apiConsumerKey||"1",CONSUMER_CONTEXT_KEY:CWL.consumerContextKey||"hier",SUBSCRIBER_ID:CWL.subscriberID||"CWMobil",GFXPATH:CWL.gfxPath||"gfx/",DEFAULT_CULTURE:CWL.defaultCulture||"tlh",LANGUAGE_FROM_LOGIN_ALWAYS:void 0===CWL.languageFromLoginAlways?!0:CWL.languageFromLoginAlways,RESOURCE_SERVER_URL:CWL.resourceServerURL||"https://cwws.cambio.intra/cw-api/resource/text/cwmobile/",PROSPECTIVE_TERMINAL_URL:CWL.prospectiveTerminalurl||"http://www.cambio-carsharing.de",REDIRECT_PROSPECT:null!=CWL.redirectProspect?CWL.redirectProspect:!0,TERMINAL_URL:CWL.terminalurl||"https://cwws.cambio.intra/",TERMINAL_URL_USE_GET:CWL.terminalUseGET||!1,PRIVACY_URL:CWL.privacyURL||"/",SUPPRESS_PRIVACY:CWL.suppressPrivacy||!1,SUPPRESS_CLOSE:CWL.suppressClose||!1,HOWTO_URL:CWL.howtoURL||"/",SUPPRESS_HOWTO:CWL.suppressHowto||!1,SHOW_REMEMBER_TOKEN:CWL.showRememberToken||!1,REMEMBER_TOKEN_DEFAULT:void 0===CWL.rememberTokenDefault?!1:CWL.rememberTokenDefault,PIN_LOGIN:void 0===CWL.pinlogin?!0:CWL.pinlogin,SUBMIT_SESSION_INFO:void 0===CWL.dontSubmitSessionInfo?!0:!CWL.dontSubmitSessionInfo,FILTER_615:void 0===CWL.filter615?!0:CWL.filter615,NOSKIP:void 0===CWL.noskip?!1:CWL.noskip,REQUIRE_LOGIN:void 0===CWL.requireLogin?!1:CWL.requireLogin,SHOW_INTRO:void 0===CWL.showIntro?!1:CWL.showIntro}).config(["$qProvider",function(a){"use strict";a.errorOnUnhandledRejections&&a.errorOnUnhandledRejections(!1)}]).config(["$httpProvider",function(a){"use strict";a.interceptors.push("setAccessToken"),a.interceptors.push("ccHttpinterceptor"),a.interceptors.push("setBusinessContextInterceptor")}]).config(["$logProvider",function(a){"use strict";var b=void 0===CWL.debug?!1:CWL.debug;a.debugEnabled(b)}]).config(["$locationProvider","$stateProvider",function(a,b){"use strict";a.html5Mode(!1),a.hashPrefix(""),b.state("sleep",{views:{panel:{templateUrl:"templates/sleep.html",controller:"sleepCtrl"}},onEnter:["dialog",function(a){a.hide()}]}).state("nocookie",{views:{main:{templateUrl:"templates/nocookie.html",controller:"noCookieCtrl"}},onEnter:["dialog",function(a){a.show()}]}).state("login",{"abstract":!0,views:{main:{templateUrl:"templates/login.html"}},resolve:{storageAvailable:["$q","storage",function(a,b){return b.storageAvailable()?b.storageAvailable():a.reject("nocookie")}],language:["storageAvailable","cwllib",function(a,b){return a?b.usePromise.promise:void 0}]},onEnter:["dialog",function(a){a.show()}]}).state("login.default",{params:{alreadyConverted:null},views:{panel:{templateUrl:"templates/loginDefault.html",controller:"loginCtrl"}},onEnter:["util",function(a){a.scrollToTop(),a.clearDoneHandler()}]}).state("login.legacy",{params:{customerNumber:null},views:{panel:{templateUrl:"templates/loginLegacy.html",controller:"loginCtrl"}},onEnter:["util",function(a){a.scrollToTop(),a.clearDoneHandler()}]}).state("login.legacyf",{params:{customerNumber:null,onlylegacy:!0,returnUrl:null},views:{panel:{templateUrl:"templates/loginLegacy.html",controller:"loginCtrl"}},onEnter:["util",function(a){a.scrollToTop(),a.clearDoneHandler()}]}).state("login.create",{params:{noskip:null,requireLogin:null},views:{panel:{templateUrl:"templates/loginCreate.html",controller:"loginCreateCtrl"}},resolve:{ident:["ccMessageBox","msgWindow","$state","$q","Ident","$log","$translate","util",function(a,b,c,d,e,f,g,h){var i=d.defer();return e.get().$promise.then(function(d){d.data.eMail?i.resolve(d.$promise):(f.debug("state.loginCreate.resolve.skipLoginConvert"),a.clear(),h.done(),i.reject(),b.showInfo(g.instant("login.create.SKIP_NO_MAIL"),"",function(){return c.go("login.identRelation")}))},function(a){i.reject(a)}),i.promise}]},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.edit",{views:{panel:{templateUrl:"templates/loginEdit.html",controller:"loginEditCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.pwdrecovery",{views:{panel:{templateUrl:"templates/pwdRecovery.html",controller:"pwdRecoveryCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.loginchange",{views:{panel:{templateUrl:"templates/loginChange.html",controller:"loginChangeCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.pwdchange",{views:{panel:{templateUrl:"templates/pwdChange.html",controller:"pwdChangeCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.message",{views:{panel:{templateUrl:"templates/msgWindow.html",controller:"msgWindowCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.moreMail",{views:{panel:{templateUrl:"templates/msgMoreMail.html",controller:"msgMoreMailCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.help",{params:{nocancel:null,returnUrl:null},views:{panel:{templateUrl:"templates/help.html",controller:"helpCtrl"}},onEnter:["util",function(a){a.scrollToTop(),a.clearDoneHandler()}]}).state("login.fuzzy",{views:{panel:{templateUrl:"templates/fuzzy.html",controller:"fuzzyCtrl"}},onEnter:["util",function(a){a.scrollToTop(),a.clearDoneHandler()}]}).state("login.loginLost",{params:{nocancel:null},views:{panel:{templateUrl:"templates/loginLost.html",controller:"loginLostCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.pwdLost",{params:{nocancel:null},views:{panel:{templateUrl:"templates/pwdLost.html",controller:"loginLostCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.error",{views:{panel:{templateUrl:"templates/loginerror.html",controller:"loginErrorCtrl"}},onEnter:["util",function(a){a.clearDoneHandler()}]}).state("login.identRelation",{views:{panel:{templateUrl:"templates/identRelation.html",controller:"identRelationCtrl"}},resolve:{idents:["resolveIdents",function(a){return a()}]},onEnter:["util",function(a){a.clearDoneHandler()}]})}]).config(["$translateProvider","CONF",function(a,b){"use strict";a.addInterpolation("$translateMessageFormatInterpolation"),CWL.debug===!0&&/debuglanguage/.test(window.location.href)?a.useUrlLoader("/cms/cwlogin/empty_translation.json"):a.useLoader("$translateStaticFilesLoader",{prefix:b.RESOURCE_SERVER_URL+"login.",suffix:".json"}
5),a.useSanitizeValueStrategy("escaped"),a.addInterpolation("$translateMessageFormatInterpolation"),a.preferredLanguage(b.DEFAULT_CULTURE)}]).run(["$log","$rootScope","$state","$window","cwllib","CONF",function(a,b,c,d,e,f){"use strict";a.info("--- CWLogin v0.5.1 13.06.2024 - 11:17 c524990"),b.enableClose=!f.SUPPRESS_CLOSE,e.setup(),b.$on("$stateChangeError",function(b,d,e,f,g,h){a.debug('$stateChangeSuccess "'+f.name+'" -> "'+d.name+'"'),"nocookie"===h&&c.go("nocookie")}),b.$on("$stateChangeSuccess",function(c,d,e,f){b.previousState=f,b.currentState=d,b.globalError=!1,a.debug('$stateChangeSuccess "'+f.name+'" -> "'+d.name+'"')}),b.$on("$translateLoadingError",function(){c.go("login.error")}),b.$on("$translateLoadingSuccess",function(b,c){a.debug("$translateLoadingSuccess "+c.language)}),b.quit=function(){a.debug("$rootScope.quit()"),c.go("sleep"),d.location.hash=""},c.go("sleep"),/[?&#/]token=[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/.exec(d.location.href)&&(a.debug("found token in URL"),e.setLanguage($("html").attr("lang")||"de-DE").then(function(){c.go("login.pwdrecovery")}))}]); 6angular.module("CWLogin.directives",[]).constant("ccFormGroupLink",function(a,b,c,d,e){"use strict";e(a,function(a,c){b.find(".trans").append(a),c.id=b.find("input").attr("id")})}).constant("ccFormGroupTemplate",'<div class="form-group form-group-sm" ng-class="{\'has-error\': valid == false}" ><label for="{{ id }}" class="col-sm-3 col-xs-12 control-label">{{ label }}</label>').constant("ccFormGroupTemplateClose",'<div class="col-sm-9 col-xs-12 trans"></div></div>').constant("ccFormGroupTemplateInfoClose",'<div class="col-sm-8 col-xs-11 trans"></div><div class="col-sm-1 col-xs-1" cc-info="{{ info }}"></div></div>').directive("ccButtons",[function(){"use strict";return{restrict:"E",scope:{rightLabel:"@",rightClick:"&",rightDisabled:"=",leftLabel:"@",leftClick:"&"},link:function(a,b,c){a.isPrimary=!("rightNotPrimary"in c)},templateUrl:"templates/buttons.html"}}]).directive("ccLoginModal",["$rootScope","$log",function(a,b){"use strict";return{restrict:"A",link:function(a,c){b.debug("ccLoginModal.link()"),a.dialogVisible=!1,a.$watch("dialogVisible",function(a){b.debug("dialogVisible: "+a),a===!0?c.modal():a===!1&&c.modal("hide")})}}}]).directive("ccFocusFirst",["$timeout",function(a){"use strict";return{restrict:"A",link:function(b){b.$last&&a(function(){$("#btn"+b.identRelations[0].relationID).focus()})}}}]).directive("ccInfo",[function(){"use strict";var a=function(a){a.placement=$(document).width()<1100?"left":"right"},b=function(b,c,d){b.content=d.ccInfo,a(b),$(window).on("resize",function(){a(b)})};return{restrict:"A",link:b,scope:{},template:'<div class="info" uib-popover="{{ content }}" popover-placement="{{ placement }}" popover-trigger="\'mouseenter\'"></div>'}}]).directive("ccFormGroupInfo",["ccFormGroupLink","ccFormGroupTemplate","ccFormGroupTemplateInfoClose",function(a,b,c){"use strict";return{restrict:"E",transclude:!0,link:a,template:b+c}}]).directive("ccFormGroup",["ccFormGroupLink","ccFormGroupTemplate","ccFormGroupTemplateClose",function(a,b,c){"use strict";return{restrict:"E",transclude:!0,link:a,template:b+c}}]).directive("ccSmallDeviceClass",["$document",function(a){"use strict";return{restrict:"A",link:function(b,c,d){var e=d.ccSmallDeviceClass;a.width()<768&&("-"===e[0]?c.removeClass(e.substr(1)):c.addClass(e.substr(1)))}}}]).directive("ccLoginSwitch",[function(){"use strict";return{restrict:"E",scope:{header:"@",buttonLabel:"@",targetState:"@",info:"@"},link:{},template:function(a,b){var c=[];return c=['<div class="cc-loginNav panel">','<div class="panel-heading">',"<h4>"+b.header,"</h4>","</div>",'<div class="panel-body">','<div class="row">','<div style="padding-bottom:5px;" class="col-xs-12 col-sm-9 col-sm-offset-3">','<a href="#" ui-sref="',b.targetState,'" class="btn btn-block btn-primary">',b.buttonLabel,"</a>","</div> </div> </div></div>"],c.join("")}}}]).directive("ccText",["util",function(a){"use strict";return{restrict:"E",scope:{label:"@",model:"=",valid:"=",required:"=",readonly:"=",placeholder:"@",info:"@"},link:function(b,c,d){"ccAutofocus"in d&&a.onDone(function(){c.find("input").get(0).focus()})},template:function(a,b){var c,d=[],e="text",f="",g="",h="",i="on";if("name"in b&&(g='name="'+b.name+'"'),f="readonly"in b?b.readonly:!1,"placeholder"in b&&(h='placeholder="{{ placeholder }}" '),"type"in b)switch(b.type){case"date":case"password":e=b.type}return"autocomplete"in b&&(i=b.autocomplete),c="cc_"+b.label.toLowerCase().replace(/\./g,"_").replace(/[^a-z0-9_-]/gi,"").replace("translate",""),d=['<input ng-model="model" ','id="',c,'" ','name="',c,'" ','class="form-control cc-form-control" ','type="',e,'" ','autocomplete="',i,'" ','spellcheck="false" ','autocapitalize="off" ','autocorrect="off" ','ng-disabled="!$parent.ready" ','ng-required="required" ','ng-readonly="readonly" ',g,h,">"],"info"in b&&$(document).width()>640?(d.unshift('<cc-form-group-info valid="valid">'),d.push("</cc-form-group-info>")):(d.unshift("<cc-form-group>"),d.push("</cc-form-group>")),d.join("")}}}]).directive("ccAutofocus",["$timeout",function(a){"use strict";return{restrict:"A",link:function(b,c){a(function(){c.focus()})}}}]).directive("ccSelect",["util",function(a){"use strict";return{restrict:"E",scope:{label:"@",required:"=",model:"=",options:"="},link:function(b,c,d){"ccAutofocus"in d&&a.onDone(function(){c.find("select").get(0).focus()})},template:function(a,b){var c,d;return d="cc-"+b.label.toLowerCase().replace(/\./g,"-").replace(/[^a-z0-9_-]/gi,"").replace("translate",""),c=['<select ng-model="model" ','id="',d,'" ','ng-disabled="!$parent.ready" ','ng-required="required" ','class="form-control cc-form-control" ','ng-options="a as a.displayName for a in options" ',"></select>"],c.unshift("<cc-form-group>"),c.push("</cc-form-group>"),c.join("")}}}]).directive("ccIndicator",["$timeout","CONF",function(a,b){"use strict";
6var c=function(a,c){var d=$("<div>"),e=$("<div>");e.css("position","absolute"),e.css("top",0),e.css("right",0),e.css("bottom",0),e.css("left",0),e.css("cursor","wait"),e.hide(),d.css("background-image","url("+b.GFXPATH+"cambio-loader.png)"),d.css("background-position",a.currentPosition+" top"),d.css("background-repeat","no-repeat"),d.css("width",a.size),d.css("height",a.size),d.css("position","absolute"),d.css("top","50%"),d.css("left","50%"),d.css("margin-top",a.size/-2+"px"),d.css("margin-left",a.size/-2+"px"),e.append(d),a.div=e,a.loader=d,c.css("position","relative"),c.append(a.div)},d=function(b){b.currentPosition-=b.size,b.currentPosition/b.size===-16&&(b.currentPosition=0),b.loader.css("background-position",b.currentPosition+"px top"),b.handle=a(function(){d(b)},b.speed)},e=function(b,e,f){b.speed=f.ccIndicatorSpeed||100,b.size=32,b.currentPosition=0,c(b,e),b.$watch("active",function(){b.active?(b.currentPosition=0,b.div.show(),d(b)):(b.div.hide(),a.cancel(b.handle))})};return{restrict:"A",link:e,scope:{active:"=ccIndicator"}}}]).directive("ccMessagebox",["$log","ccMessageBox",function(a,b){"use strict";var c=function(c){a.debug("ccMessagebox.link()"),c.data=b.data,c.panelType=""};return{restrict:"E",replace:!0,templateUrl:"templates/messagebox.html",scope:{},link:c}}]),angular.module("CWLogin").controller("fuzzyCtrl",["$scope","$log","$state","storage","ccOauth","$rootScope","$translate","cancel","ccMessageBox","dialog","util",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=this;l.handleLoginState=function(c){var d,e=c.headers("x-cwapi-loginstate");switch(e&&(e=e.replace(/[\n\r]/gm,"")),b.debug("fuzzyCtrl.handleLoginState() - "+c.status+" - "+e),e){case"Logout":d=a.fuzzy.date&&a.fuzzy.email?g.instant("login.fuzzy.COULD_NOT_IDENTIFY"):g.instant("login.fuzzy.MULTIPLE"),i.set(g.instant("login.fuzzy.MULTIPLE_HEADER"),d,"warning");break;case"Ambiguous":i.set(g.instant("login.login.ERROR"),k.splitAndDecode(c.headers("X-CWAPI-NOTIFICATION")));break;default:k.handleLoginState(e,c)}},l.handleError=function(a){b.debug("fuzzyCtrl.handleError()"),b.debug(a),b.warn(a.status+" - "+a.statusText),f.indicateWait=!1,a.headers("X-CWAPI-NOTIFICATION")&&k.splitAndDecode(a.headers("X-CWAPI-NOTIFICATION")),l.handleLoginState(a)},l.validate=function(){var c=!0,d=[];return b.debug("fuzzyCtrl.validate()"),a.fuzzy.givenname||(c=!1,d.push(g.instant("login.fuzzy.GIVENNAME_IS_REQUIRED"))),a.fuzzy.familyname||(c=!1,d.push(g.instant("login.fuzzy.FAMILYNAME_IS_REQUIRED"))),a.fuzzy.date||a.fuzzy.email||(c=!1,d.push(g.instant("login.fuzzy.ENTE
6R_DATE_OR_EMAIL"))),{valid:c,messages:d}},l.success=function(a){b.debug("fuzzyCtrl.success()"),a.data.access_token&&(e.setAccessToken(a.data.access_token),c.go("login.create"))},l.done=function(){b.debug("fuzzyCtrl.done()"),f.indicateWait=!1},l.submit=function(){b.debug("fuzzyCtrl.submit()");var c=l.validate(),g={};k.scrollToTop(),i.clear(),c.valid?(g.customerNumber=d.get("customerNumber"),g.pin=d.get("pin"),g.madaId=d.get("madaID"),g.givenName=a.fuzzy.givenname,g.familyName=a.fuzzy.familyname,g.dateOfBirth=a.fuzzy.date,g.eMail=a.fuzzy.email,f.indicateWait=!0,e.fuzzyLogin(g).then(l.success)["catch"](l.handleError)["finally"](l.done)):i.set("",c.messages,"warning")},l.init=function(){b.debug("fuzzyCtrl.init()"),a.submit=l.submit,a.cancel=h.toLogin,j.setTitle(g.instant("login.fuzzy.WINDOW_TITLE")),a.fuzzy={},a.rightLabel=g.instant("login.common.LOGIN"),a.leftLabel=g.instant("login.common.CANCEL")},l.init()}]),angular.module("CWLogin").controller("helpCtrl",["$scope","$rootScope","$log","$translate","$state","$stateParams","msgWindow","cancel","dialog","ccMessageBox","util","storage",function(a,b,c,d,e,f,g,h,i,j,k,l){"use strict";var m=this,n="loginlost",o="pwdlost",p="nomail",q=[{value:n,label:d.instant("login.passwd.LOST_LOGIN")},{value:o,label:d.instant("login.passwd.LOST_PASSWORD")},{value:p,label:d.instant("login.passwd.NO_MAIL")}];m["continue"]=function(){var b=null;switch(c.debug("helpCtrl.cont() - "+a.problem),k.scrollToTop(),a.problem){case n:f.nocancel===!0&&(b={nocancel:!0}),e.go("login.loginLost",b),j.clear();break;case o:f.nocancel===!0&&(b={nocancel:!0}),e.go("login.pwdLost",b),j.clear();break;case p:g.noButtons(),g.showInfo(d.instant("login.passwd.NO_EMAIL__PLEASE_CONTACT_OFFICE"),d.instant("login.passwd.PLEASE_NOTE"),f.nocancel===!0),j.clear()}},m.init=function(){c.debug("helpCtrl.init()"),j.clear(),j.append(d.instant("login.passwd.HEADERTEXT")),a.PROBLEMS=q,a.problem=a.PROBLEMS[0].value,a["continue"]=m["continue"],a.cancel=h.toLogin,a.rightLabel=d.instant("login.common.CONTINUE"),null!=f.returnUrl&&l.set("returnUrl",f.returnUrl),f.nocancel===!0?a.leftLabel=void 0:a.leftLabel=d.instant("login.common.CANCEL"),i.setTitle(d.instant("login.passwd.WINDOW_TITLE")),b.ready=!0},m.init()}]),angular.module("CWLogin").controller("identRelationCtrl",["$scope","$log","$state","ccOauth","storage","util","idents","$translate","ccMessageBox","cancel","dialog",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=this;l.identRelClick=function(a){b.debug("Ausgewählt: "+a.relationModeID+" "+a.mandatorName),f.scrollToTop(),d.setIdentRelation(a.relationID).then(function(){f.transmit(a.relationID)})["catch"](l.handleError)},l.setCurrentUser=function(){e.get("loginName")?a.currentUser=e.get("loginName"):a.currentUser=e.get("givenName")+" "+e.get("familyName")+", "+h.instant("login.login.CUSTOMER_ID")+": "+e.get("customerNumber")},l.handleError=function(a){b.debug("identRelationCtrl.handleError()"),401===a.status?c.go("login.default"):(b.error(a),a.headers("X-CWAPI-NOTIFICATION")?i.set(void 0,f.splitAndDecode(a.headers("X-CWAPI-NOTIFICATION")),"warning"):i.set(h.instant("login.login.ERROR"),h.instant("login.login.SERVER_ERROR"),"warning"))},l.init=function(){var d,f,m,n;if(b.debug("identRelationCtrl.init()"),a.rightLabel=h.instant("login.common.CANCEL"),k.setTitle(h.instant("login.identRelations.WINDOW_TITLE")),i.set("",h.instant("login.identRelations.INSTRUCTIONS"),"info"),e.get("accessToken")){for(a.identRelations=g,a.identLabels=[],d=0,f=g.length;f>d;d+=1)n="login.identRelations.POST_"+g[d].relationMode,g[d].relationModeFlavour&&(n+="_"+g[d].relationModeFlavour),m=h.instant("login.identRelations.PRE_"+g[d].relationMode)+" "+h.instant(n),a.identLabels[g[d].id]=m;a.cancel=j.andLogout,a.identRelClick=l.identRelClick,a.identRelationTypes={610:h.instant("login.common.REL_CUSTOMER"),611:h.instant("login.common.REL_DRIVER"),615:h.instant("login.common.REL_PROSPECTS"),618:h.instant("login.common.REL_USER")},l.setCurrentUser()}else c.go("login.default")}
6,l.init()}]),angular.module("CWLogin").controller("loginChangeCtrl",["CONF","$rootScope","$scope","$log","storage","util","ccOauth","$state","validate","$translate","msgWindow","ccMessageBox","dialog",function(a,b,c,d,e,f,g,h,i,j,k,l,m){"use strict";var n=this;n.loadData=function(){return d.debug("loginChangeCtrl.loadData()"),g.getLogin(c.loginName).then(n.loadSuccess)["catch"](n.loadError)["finally"](n.done)},n.loadSuccess=function(b){d.debug("loginChangeCtrl.loadSuccess()");var f=b.data.data.storageUID;c.realname=b.data.data.familyName+", "+b.data.data.givenName,c.login=b.data.data,c.oldLoginName=c.login.loginName,c.security.question=b.data.data.passwordQuestion,c.oldSecurityQuestion=c.security.question,f?(c.NoEdit=!1,e.set(a.STORAGE_UID_KEY,f)):(c.NoEdit=!0,l.append(j.instant("login.change.EDITNOTALLOWED")))},n.checkForm=function(){d.debug("loginChangeCtrl.checkForm()"),c.password["new"]?c.showConfirmPassword=!0:(c.password.confirm="",c.showConfirmPassword=!1),c.security.answer?c.showConfirmSecurity=!0:(c.security.confirm="",c.showConfirmSecurity=!1)},n.validate=function(){d.debug("loginChangeCtrl.validate()");var a,b={},e=[],f=!0;return c.password.old||(e.push(j.instant("login.recovery.OLD_PASSWORD_EMPTY")),f=!1),b.OldPassword=c.password.old,b.passwordQuestion=c.security.question,(c.password["new"]||c.password.confirm)&&(a=i.password(c.password["new"],c.password.confirm),a.valid?b.password=c.password["new"]:(e.push(a.message),f=!1)),c.security.question?c.security.question!==c.oldSecurityQuestion?c.security.answer?b.passwordAnswer=c.security.answer:(e.push(j.instant("login.question.NEED_SECURITY_ANSWER")),f=!1):c.security.answer&&(b.passwordAnswer=c.security.answer):(e.push(j.instant("login.question.NEED_SECURITY_QUESTION")),f=!1),f||l.set("",e,"warning"),{isValid:f,data:b}},n.nothingChanged=function(){return!c.password["new"]&&!c.security.answer||!c.security.question},n.success=function(a){d.debug("loginChangeCtrl.success()"),d.debug(a),k.showInfo(j.instant("login.change.CHANGE_SUCCESS__BODY"),j.instant("login.change.CHANGE_SUCCESS__HEADER"),function(){b.quit()})},n.loadError=function(a){a.data.header&&angular.forEach(a.data.header.notifications,function(a){"OAuthTokenExpired"===a.code&&k.showInfo("",a.displayTitle,g.logOut)})},n.error=function(b){var c=[];b.data.storageUID&&e.set(a.STORAGE_UID_KEY,b.data.storageUID),d.debug("loginChangeCtrl.error()"),b.data.header.notifications&&(angular.forEach(b.data.header.notifications,function(a){"OAuthTokenExpired"===a.code?c.push(j.instant("login.common.LOGIN_EXPIRED")):c.push(a.displayTitle)}),l.set("",c,"warning"),f.logNotifications(b.data.header.notifications))},n.done=function(){d.debug("loginChangeCtrl.done()"),b.indicateWait=!1},n.submit=function(){var c;d.debug("loginChangeCtrl.submit()"),f.scrollToTop(),l.clear(),c=n.validate(),d.debug(c),c.isValid&&
6(c.data.password||c.data.passwordAnswer)&&(b.indicateWait=!0,g.changeLogin(c.data,e.get(a.STORAGE_UID_KEY)).then(n.success)["catch"](n.error)["finally"](n.done))},n.cancel=function(){h.go("sleep")},n.init=function(){d.debug("loginChangeCtrl.init()"),l.clear(),c.info=j.instant("login.change.INFOTEXT"),c.password={},c.security={},c.login={},m.setTitle(j.instant("login.change.WINDOW_TITLE")),c.cancel=n.cancel,c.submit=n.submit,c.nothingChanged=n.nothingChanged,c.rightLabel=j.instant("login.common.SAVE"),c.leftLabel=j.instant("login.common.CANCEL"),c.$watch("password",n.checkForm,!0),c.$watch("security",n.checkForm,!0),c.$watch("login",n.checkForm,!0),n.loadData().then(f.done)},n.init()}]),angular.module("CWLogin").controller("loginCreateCtrl",["$scope","$rootScope","$log","util","$state","$translate","msgWindow","storage","ConvertLogin","validate","ccMessageBox","ccOauth","dialog","ident","$stateParams","$window",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){"use strict";var q=this;q.newLogin={},q.handleIdentSuccess=function(b){c.debug("loginCreateCtrl.handleIdentSuccess()"),b.data.givenName&&b.data.familyName&&(h.set("givenName",b.data.givenName),h.set("familyName",b.data.familyName)),b.data&&b.data.eMail?(a.ident=b.data,a.givenName=b.data.givenName,a.familyName=b.data.familyName,a.dateOfBirth=d.parseDate(b.data.dateOfBirth),a.eMail=b.data.eMail,a.madaId=b.data.mandatorID,a.needCode=b.data.codeRequired):q.skipLoginConvert(f.instant("login.create.SKIP_NO_MAIL"))},q.skipLoginConvert=function(a){c.debug("loginCreateCtrl.skipLoginConvert()"),k.clear(),g.showInfo(a,"",function(){return d.useReturnUrl()?void 0:e.go("login.identRelation")})},q.handleIdentError=function(a){c.error("loginCreateCtrl.handleIdentError()",a),g.showWarning(f.instant("login.login.SERVER_ERROR"),f.instant("login.common.UNEXPECTED_ERROR"),function(){return d.useReturnUrl()?void 0:e.go("login.default")})},q.loadIdent=function(){return c.debug("loginCreateCtrl.loadIdent()"),n.$promise.then(q.handleIdentSuccess,q.handleIdentError)},q.validateLogin=function(){var b=0;return a.login?(/@/.test(a.login)&&(b+=1,a.loginValid=!1,k.append(f.instant("login.create.LOGIN_AT_SIGN"))),/#/.test(a.login)&&(b+=1,a.loginValid=!1,k.append(f.instant("login.create.NO_HASH_SIGN"))),a.loginValid=0===b):(b+=1,a.loginValid=!1,k.append(f.instant("login.create.LOGIN_MISSING"))),b},q.validatePassword=function(){var b,c=0;return b=j.password(a.passwordNew,a.passwordConfirm),b.valid?(a.passwordNewValid=!0,a.passwordConfirmValid=!0):(k.append(f.instant(b.message)),a.passwordNewValid=!1,a.passwordConfirmValid=!1,c+=1),c},q.validatePasswordQuestion=function(){var b=0;return a.passwordQuestion?a.passwordQuestionValid=!0:(a.passwordQuestionValid=!1,k.append(f.instant("login.create.PASSWORT_QUESTION_MISSING")),b+=1),a.passwordAnswer?a.passwordAnswerValid=!0:(a.passwordAnswerValid=!1,k.append(f.instant("login.create.PASSWORT_QUESTION_ANSWER_MISSING")),b+=1),b},q.validateConfimationCode=function(){var b=0;return a.needCode&&(a.confirmationCode?a.confirmationCodeValid=!0:(a.confirmationCodeValid=!1,k.append(f.instant("login.create.CODE_MISSING")),b+=1)),b},q.validate=function(){c.debug("loginCreateCtrl.validate()");var a=0;return k.clear(),a+=q.validateLogin(),a+=q.validatePassword(),a+=q.validatePasswordQuestion(),a+=q.validateConfimationCode(),0===a},q.skip=function(){c.debug("loginCreateCtrl.skip()"),k.clear(),q.skipLoginConvert(f.instant("login.create.SKIP_INFO"))},q.submit=function(){c.debug("loginCreateCtrl.submit()"),d.scrollToTop(),q.validate()&&(b.indicateWait=!0,q.convertLogin())},q.handleConvertSuccess=function(a){c.debug("loginCreateCtrl.handleConvertSuccess()"),c.debug(a),g.showInfo(f.instant("login.create.SUCCESS"),"",function(){return d.useReturnUrl()?void 0:e.go("login.identRelation")})},q.convertLogin=function(){c.debug("loginCreateCtrl.convertLogin()");var b,e,f=new i;e={loginName:a.login,confirmationCode:a.confirmationCode,password:a.passwordNew,passwordAnswer:a.passwordAnswer,passwordQuestion:a.passwordQuestion},f.data=e,h.set("loginName",a.login),h.set("dateOfBirth",a.dateOfBirth),h.set("eMail",a.eMail),f.$save(function(){o.noskip===!0?(c.debug("------ $save noskip"),h.clear(),h.set("loginName",a.login),h.set("loginPassword",a.passwordNew),c.debug("saved login in storage"),d.useReturnUrl()||(b=d.getTerminalUrl({euroCode:void 0}),c.debug("navigate to ",b),p.location=b)):q.setNewToken(e),h.set("loginSource","login")},d.handleError)["finally"](d.done)},q.setNewToken=function(a){l.login(a.loginName,a.password).then(function(){c.debug("New Token has been set."),q.handleConvertSuccess()})["catch"](function(a){c.debug("Could not set new Token: "),c.debug(a)})["finally"](d.done)},q.init=function(){c.debug("loginCreateCtrl.init() - "+b.currentState.name),a.loginHasError="",a.pwHasError="",a.submit=q.submit,a.skip=q.skip,b.indicateWait=!1,a.needCode=!1,a.relationTyp=614,null!=o.returnUrl&&h.set("returnUrl",o.returnUrl),a.rightLabel=f.instant("login.common.CONTINUE"),o.noskip===!0||o.requireLogin===!0?a.left
6Label=void 0:a.leftLabel=f.instant("login.common.SKIP"),m.setTitle(f.instant("login.create.WINDOW_TITLE")),k.set("",f.instant("login.create.INFO"),"info"),q.loadIdent().then(d.done)},q.init()}]),angular.module("CWLogin").controller("loginCtrl",["$rootScope","$scope","$log","$q","$state","$stateParams","$window","util","ccOauth","$translate","storage","dialog","Mandator","ccMessageBox","CONF","UriTemplate",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){"use strict";var q=this;q.loadCities=function(){c.debug("loginCtrl.loadCities()"),b.cities=m.getAll(),b.cities.length>1?(0===b.cities[0].mandatorID&&b.cities.shift(),b.cities.unshift({orgaID:1,mandatorID:0,city:"Stadt",id:17,displayName:j.instant("login.login.SELECT_OPTION_PLEASE_CHOOSE_LABEL")})):c.debug("loginCtrl.loadCities() "+b.cities[0]),b.login.city=b.cities[0]},q.loadData=function(){c.debug("loginCtrl.loadData()"),b.login={},b.login.rememberToken=o.REMEMBER_TOKEN_DEFAULT,/^login.legacy/.test(a.currentState.name)&&q.loadCities()},q.storeUserData=function(){k.set("madaID",b.login.city.id),k.set("customerNumber",b.login.customerNumber),k.set("pin",b.login.pin),k.set("lastState",e.get())},q.handleLoginState=function(a){var b=a.headers("x-cwapi-loginstate");switch(b&&(b=b.replace(/[\n\r]/gm,"")),c.debug("loginCtrl.handleLoginState() - "+a.status+" - "+b),b){case"Logout":n.set(j.instant("login.login.ERROR"),h.splitAndDecode(a.headers("X-CWAPI-NOTIFICATION")));break;case"Ambiguous":e.go("login.fuzzy");break;default:h.handleLoginState(b,a)}},q.handleError=function(d){var e;c.debug("loginCtrl.handleError()"),b.login.password="",b.login.pin="",a.indicateWait=!1,e=d.headers("X-CWAPI-NOTIFICATION"),e&&h.splitAndDecode(e),q.handleLoginState(d)},q.changeState=function(a){"password changed"===a?e.go("login.default"):(k.set("loginName",b.login.name),e.go("login.identRelation"))},q.isLegacyLoginAttempt=function(){return isFinite(b.login.name)&&isFinite(b.login.password)},q.login=function(){c.debug("loginCtrl.login()"),h.scrollToTop(),a.indicateWait=!0,n.clear(),q.showPINLogin&&q.isLegacyLoginAttempt()?(c.debug("Attepmt to Login with PIN. Change state to Legacy."),a.indicateWait=!1,e.go("login.legacy",{customerNumber:b.login.name})):(k.set("loginName",b.login.name),k.set("loginSource","login"),i.login(b.login.name,b.login.password).then(function(){return i.pwdMustChange()}).then(q.changeState)["catch"](q.handleError)["finally"](function(){c.debug("done"),a.indicateWait=!1}))},q.legacyLogin=function(){c.debug("loginCtrl.legacyLogin()"),k.set("madaID",b.login.city.id),k.set("customerNumber",b.login.customerNumber),k.set("pin",b.login.pin),a.indicateWait=!0,n.clear(),i.legacyLogin(b.login.customerNumber,b.login.pin,b.login.city.id).then(q.storeUserData).then(function(){o.REQUIRE_LOGIN?e.go("login.create",{requireLogin:!0}):f.onlylegacy===!0||o.NOSKIP?e.go("login.create",{noskip:!0}):e.go("login.create")})["catch"](q.handleError)},q.privacy=function(a){a.preventDefault();var b={language:i.getCulture().split("-")[0]},c=p.parse(o.PRIVACY_URL).expand(b);g.open(c)},q.init2=function(){c.debug("loginCtrl.init2()"),b.loginDefault=q.login,b.dummy=function(){},b.loginLegacy=q.legacyLogin,b.privacy=q.privacy,n.clear(),f.alreadyConverted===!0?n.set(j.instant("login.login.ERROR"),j.instant("login.login.ALREADY_CONVERTED"),"warning"):"login.default"===a.currentState.name&&o.SHOW_INTRO&&n.set(j.instant("login.common.INFO_HEADING"),j.instant("login.login.INTRO_DESCRIPTION"),"info"),b.returnToDefault=!0,f.onlylegacy===!0&&(b.returnToDefault=!1),f.customerNumber&&(b.login.customerNumber=f.customerNumber,n.set(j.instant("login.login.ERROR"),j.instant("login.login.LEGACY_ATTEMPT"),"warning"))},q.remeberLoginChanged=function(){k.set("rememberToken",b.login.rememberToken)},q.init=function(){c.debug("loginCtrl.init() - "+a.currentState.name),a.ready=!1,a.indicateWait=!1,"cwPartnerClient"===o.CLIENT_ID?l.setTitle(j.instant("login.login.PARTNER_LOGIN")):l.setTitle(j.instant("login.login.CUSTOMER_LOGIN")),null!=f.returnUrl&&k.set("returnUrl",f.returnUrl),b.rightLabel=j.instant("login.common.LOGIN"),b.leftLabel=j.instant("login.login.PRIVACY_INFORMATION"),b.showPINLogin=o.PIN_LOGIN,o.SUPPRESS_PRIVACY&&(b.leftLabel=void 0),b.showHowto=!o.SUPPRESS_HOWTO;var d={language:i.getCulture().split("-")[0]};b.howtoURL=p.parse(o.HOWTO_URL).expand(d),b.culture=i.getCulture(),b.showInfoButton=!1,b.showRememberToken=o.SHOW_REMEMBER_TOKEN,i.logOut(),q.loadData(),b.$watch("login.rememberToken",q.remeberLoginChanged),q.init2(),h.done()},q.init()}]),angular.module("CWLogin").controller("loginErrorCtrl",["$rootScope","$log",function(a,b){"use strict";var c=this;c.init=function(){b.debug("loginErrorCtrl.init()"),a.globalError=!0,a.indicateWait=!1,a.ready=!0},c.init()}]),angular.module("CWLogin").controller("loginLostCtrl",["$scope","$
6window","msgWindow","$log","$state","$stateParams","$rootScope","$translate","ccOauth","cancel","util","storage","ccMessageBox","dialog",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){"use strict";var o=this;o.showVarify=function(){c.noButtons(f.nocancel===!0),c.showMoreMail(h.instant("login.loginlost.MORE_THAN_ONE_ACCOUNT_WITH_THIS_MAIL__BODY"),h.instant("login.loginlost.MORE_THAN_ONE_ACCOUNT_WITH_THIS_MAIL__HEADER"),h.instant("login.loginlost.BUTTON_YES_MOREMAIL"),h.instant("login.loginlost.BUTTON_NO_MOREMAIL"),function(){l.set("moreMail",{verify:!0,message:h.instant("login.loginlost.RETRY_BECAUSE_MOREMAIL"),ident:a.login.ident}),o.resetLogin()},function(){return e.go("login.default")})},o.handleError=function(a){var b=[];if(l.remove("moreMail"),g.indicateWait=!1,d.error(a),a.data)if(1===a.data.header.notifications.length)switch(a.data.header.notifications[0].code){case"10.20.77":o.showVarify();break;case"10.20.84":d.error(a),m.append(a.data.header.notifications[0].displayTitle);break;case"10.10.10":d.error(a),m.append(a.data.header.notifications[0].displayTitle);break;default:d.error(a),c.noButtons(f.nocancel===!0),c.showWarning(a.data.header.notifications[0].displayTitle,h.instant("login.loginlost.WE_TRIED_TO_SEND_AN_EMAIL_BUT_FAILED__HEADER"),function(){return k.useReturnUrl()?void 0:e.go("login.default")})}else angular.forEach(a.data.header.notifications,function(a){b.push(a.displayTitle)}),c.noButtons(f.nocancel===!0),c.showWarning(b,h.instant("login.loginlost.WE_TRIED_TO_SEND_AN_EMAIL_BUT_FAILED__HEADER"),function(){return k.useReturnUrl()?void 0:e.go("login.default")});else c.noButtons(f.nocancel===!0),c.showWarning(h.instant("login.loginlost.EMAIL_SEND_UNKNOWN_PROBLEM"),h.instant("login.loginlost.WE_TRIED_TO_SEND_AN_EMAIL_BUT_FAILED__HEADER"),function(){return k.useReturnUrl()?void 0:e.go("login.default")})},o.validate=function(){return a.login.valid=!0,m.clear(),o.currentState("login.loginLost")?/@/.test(a.login.ident)||(m.append(h.instant("login.loginlost.EMAIL_REQUIRED")),a.login.valid=!1):o.currentState("login.pwdLost")?/@/.test(a.login.ident)&&(m.append(h.instant("login.loginlost.NO_EMAIL_ALLOWED")),a.login.valid=!1):a.login.valid=!1,a.login.valid},o["continue"]=function(){k.scrollToTop(),o.validate()&&o.resetLogin()},o.resetLogin=function(){var b={};g.indicateWait=!0,l.get("moreMail")?(b.account=l.get("moreMail").ident,b.verify=l.get("moreMail").verify,a.moreMessage=l.get("moreMail").message):(b.account=a.login.ident,b.verify=a.verify),i.loginLost(b).then(function(){l.remove("moreMail"),c.noButtons(f.nocancel===!0),c.showInfo(h.instant("login.loginlost.YOU_WILL_RECEIVE_AN_EMAIL__BODY"),h.instant("login.loginlost.YOU_WILL_RECEIVE_AN_EMAIL__HEADER"),function(){return k.useReturnUrl()?void 0:e.go("login.default")})}).then(k.done)["catch"](o.handleError)},o.currentState=function(a){return g.currentState.name===a},o.init=function(){d.debug("loginLostCtrl.init():"+g.currentState.name),"login.loginLost"===g.currentState.name?(a.info=h.instant("login.loginlost.PLEASE_ENTER_EMAIL"),n.setTitle(h.instant("login.passwd.TITLE_LOST_LOGINNAME"))):(a.info=h.instant("login.loginlost.PLEASE_ENTER_USERNAME"),n.setTitle(h.instant("login.passwd.TITLE_LOST_PASSWORD"))),null!=f.returnUrl&&l.set("returnUrl",f.returnUrl),g.indicateWait=!1,a["continue"]=o["continue"],a.cancel=j.toLogin,a.login={ident:""},a.verify=!1,a.returnTo=g.currentState.name,a.currentState=o.currentState,a.moreMessage="",a.rightLabel=h.instant("login.common.CONTINUE"),f.nocancel===!0?a.leftLabel=void 0:a.leftLabel=h.instant("login.common.CANCEL")},o.init()}]),angular.module("CWLogin").controller("msgMoreMailCtrl",["$scope","$log","msgWindow","util",function(a,b,c,d){"use strict";var e=this;e.init=function(){b.debug("msgMoreMailCtrl.init()"),d.scrollToTop(),a.data=c.getMoreMailData(),a.panelType="panel-"+a.data.type,a.yesClick=a.data.yesCall,a.noClick=a.data.noCall},e.init()}]),angular.module("CWLogin").controller("msgWindowCtrl",["$scope","$log","msgWindow","$state","util",function(a,b,c,d,e){"use strict";var f=this;f.okClick=function(){d.go("login.default")},f.init=function(){b.debug("msgWindowCtrl.init()"),e.scrollToTop(),a.data=c.getData(),a.noButtons=a.data.noButtons,c.noButtons(!1),a.panelType="panel-"+a.data.type,a.okClick=a.data.okCall||f.okClick},f.init()}]),angular.module("CWLogin").controller("noCookieCtrl",["$log","$rootScope",function(a,b){"use strict";var c=this;c.init=function(){a.debug("noCookieCtrl.init()"),b.indicateWait=!1,b.ready=!0},c.init()}]),angular.module("CWLogin").controller("pwdChangeCtrl",["$rootScope","$scope","$log","validate","ccOauth","storage","$translate","msgWindow","$state","dialog","cancel","util","ccMessageBox",function(a,b,c,d,e,f,g,h,i,j,k,l,m){"use strict";var n=this;
6n.loadData=function(){return c.debug("pwdChangeCtrl.loadData()"),e.getLogin(b.loginName).then(n.loadDataSuccess)},n.loadDataSuccess=function(a){c.debug("pwdChangeCtrl.loadDataSuccess()"),b.needCode=a.data.confirmationCodeRequired,b.login=a.data.data,n.loginStorageUID=a.data.data.storageUID},n.validate=function(){c.debug("pwdChangeCtrl.validate()");var a=d.password(b.password["new"],b.password.confirm);return a.valid?m.clear():m.set(g.instant(a.message),"","warning"),a.valid},n.success=function(){c.debug("pwdChangeCtrl.success()"),a.indicateWait=!1,h.showInfo(g.instant("login.loginlost.CHANGE_SUCCESS__HEADER"),g.instant("login.loginlost.CHANGE_SUCCESS__BODY"),function(){f.pwdChangeDefer.resolve("password changed")})},n.error=function(b){var d=[];c.debug("pwdChangeCtrl.error()"),c.error(b),a.indicateWait=!1,n.loginStorageUID=b.data.storageUID,angular.forEach(b.data.header.notifications,function(a){d.push(a.displayTitle)}),m.set(g.instant("login.login.ERROR"),d,"warning"),l.logNotifications(b.data.header.notifications)},n.submit=function(){c.debug("pwdChangeCtrl.submit()");var d={};l.scrollToTop(),n.validate()&&(a.indicateWait=!0,d.OldPassword=b.password.old,d.password=b.password["new"],b.needCode&&(d.specialCode=b.login.ConfirmationCode),e.changePwd(d,n.loginStorageUID).then(n.success)["catch"](n.error))},n.checkSubmit=function(){c.debug("pwdChangeCtrl.checkSubmit()"),b.ok2submit=Boolean(b.password["new"])&&Boolean(b.password.confirm)},n.init2=function(){c.debug("pwdChangeCtrl.init2()"),a.indicateWait=!1,b.password={},b.submit=n.submit,b.cancel=k.toLogin,b.ok2submit=!1,j.setTitle(g.instant("login.login.CHANGE_PASSWORD")),m.set(g.instant("login.common.PLEASE_CHANGE_PASSWORD"),"","info"),b.$watch("password",n.checkSubmit,!0),l.done()},n.init=function(){c.debug("pwdChangeCtrl.init()"),a.ready=!1,b.rightLabel=g.instant("login.recovery.CHANGE_PASSWORD"),b.leftLabel=g.instant("login.common.CANCEL"),n.loadData().then(n.init2)},n.init()}]),angular.module("CWLogin").controller("pwdRecoveryCtrl",["$rootScope","$scope","$q","$log","util","$state","$translate","ccOauth","RecoverUser","validate","msgWindow","cancel","dialog","ccMessageBox","$window",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){"use strict";var p=this;p.loadUserData=function(f){d.debug("pwdRecoveryCtrl.loadUserData("+f+")");var j=c.defer();return i.get({token:f}).$promise.then(function(a){a.data&&(a.data.login.locked===!0?(n.set("",g.instant("login.login.LOGIN_LOCKED")+" "+e.formatDateTime(a.data.login.lockedUntil),"warning"),p.locked=!0):(b.login=a.data.login,b.StorageUID=a.data.login.storageUID,b.needCode=a.data.login.confirmationCodeRequired,h.setAccessToken(a.data.token))),j.resolve()})["catch"](function(a){p.handleError(a)?j.resolve():j.reject()})["finally"](function(){d.debug("done"),a.indicateWait=!1}),j.promise},p.submit=function(){d.debug("pwdRecoveryCtrl.submit()");var a={};e.scrollToTop(),p.valide()&&(a.loginName=b.login.loginName,a.password=b.password["new"],a.passwordOLD=b.password.old,a.answer=b.login.passwordAnswer,a.specialCode=b.login.ConfirmationCode,p.reset(a,b.StorageUID))},p.success=function(){k.showInfo(g.instant("login.loginlost.CHANGE_SUCCESS__HEADER"),g.instant("login.loginlost.CHANGE_SUCCESS__BODY"),function(){ 7return f.go("login.default")})},p.reset=function(b,c){d.debug("pwdRecoveryCtrl.reset()"),h.changeLogin(b,c).then(p.success)["catch"](p.handleError)["finally"](function(){d.debug("done"),a.indicateWait=!1})},p.valide=function(){var a;return a=j.password(b.password["new"],b.password.confirm),a.valid?n.clear():n.set(g.instant(a.message),"","warning"),a.valid},p.handleError=function(a){var c=[];d.debug("pwRecoveryCtrl.handleError()"),400===a.status?a.data.header.notifications?(e.logNotifications(a.data.header.notifications),b.StorageUID=a.data.data.storageUID,d.debug(b.StorageUID),angular.forEach(a.data.header.notifications,function(a){c.push(a.displayTitle)}),n.set("",c,"warning")):k.showWarning(g.instant("login.common.UNKNOWN_ERROR_BODY"),g.instant("login.common.UNKNOWN_ERROR_HEADER"),function(){return f.go("login.default")}):401===a.status?f.go("login.default"):500!==a.status&&0!==a.status&&a.status||f.go("login.error"),e.done()},p.checkSubmit=function(){d.debug("pwdRecoveryCtrl.checkSubmit()"),b.ok2submit=!!b.password["new"]&&!!b.password.confirm&&!!b.login.passwordAnswer,b.needCode&&(b.login.ConfirmationCode||(b.ok2submit=!1))},p.init2=function(){d.debug("pwdRecoveryCtrl.init2()"),m.setTitle(g.instant("login.login.CHANGE_PASSWORD")),p.locked||n.append(g.instant("login.recovery.HEADERTEXT")),b.ok2submit=!1,b.password={},b.submit=p.submit,a.indicateWait=!1,b.$watch("password",p.checkSubmit,!0),b.$watch("login",p.checkSubmit,!0),e.done()},p.getToken=function(){d.debug("pwdRecoveryCtrl.getToken()");var a;return a=/[?&#/](token|recoveryToken)=([0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12})/.exec(o.location.href),a?a[2]:void 0},p.init=function(){p.locked=!1,d.debug("pwdRecoveryCtrl.init()"),b.rightLabel=g.instant("login.recovery.CHANGE_PASSWORD"),b.leftLabel=g.instant("login.common.CANCEL"),b.cancel=l.toLogin,p.loadUserData(p.getToken()).then(p.init2)},p.init()}]),angular.module("CWLogin.resources",["ngResource"]),angular.module("CWLogin.resources").config(["$resourceProvider",function(a){"use strict";a.defaults.stripTrailingSlashes=!1}]).factory("Culture",["CONF","$resource",function(a,b){"use strict";var c=b(a.RESOURCE_SERVER_URL+"../../language.json",{},{get:{method:"GET",isArray:!0},query:{method:"GET",isArray:!1}});return c}]).factory("Ident",["CONF","$resource",function(a,b){"use strict";var c=b(a.REST_URL+"/login/self/ident",{},{get:{method:"GET"},update:{method:"PUT"}});return c}]).factory("ConvertLogin",["CONF","$resource","ccOauth","$log",function(a,b){"use strict";return b(a.REST_URL+"/login/self/convert",{})}]).factory("RecoverUser",["CONF","$resource",function(a,b){"use strict";return b(a.REST_URL+"/login/current/resolveRecoverToken",{})}]).factory("IdentRelation",["CONF","$resource",function(a,b){"use strict";return b(a.REST_URL+"/login/self/relation",{},{get:{method:"GET",isArray:!1}})}]),angular.module("CWLogin").service("ccMessageBox",["$log",function(a){"use strict";var b=this;b.data={},b.set=function(c,d,e){a.debug("ccMessageBox.set()"),b.data.header=c,angular.isArray(d)?b.data.body=d:b.data.body=[d],"info"===e?b.data.type="cc-msgBox-info":"warning"===e&&(b.data.type="cc-msgBox-warning"),b.data.visible=!0},b.append=function(c){a.debug("ccMessageBox.append()"),angular.isArray(b.data.body)||(b.data.body=[]),b.data.body.push(c),b.data.visible||(b.data.visible=!0)},b.clear=function(){a.debug("ccMessageBox.clear()"),b.data.body=[],b.data.header="",b.data.type="",b.data.visible=!1}}]).factory("ccHttpinterceptor",["$q","$log","$window","CONF","$injector","$timeout",function(a,b,c,d,e,f){"use strict";var g;return f(function(){g=e.get("ccOauth")}
7),{request:function(a){return a.timeout=d.REQUEST_TIMEOUT,a.headers["Accept-Language"]=g.getCulture(),a},response:function(a){return 0===a.config.url.indexOf(d.REST_URL)&&"object"!=typeof a.data&&(b.error("invalid server response",a),c.location=d.FATAL_ERROR_URL),a}}}]).service("cwllib",["$q","$log","$rootScope","$state","$window","$translate","storage","ccOauth","msgWindow","Mandator","CONF",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=this;l.usePromise=null,l.setLanguage=function(c){return b.debug("lib.setLanguage("+c+")"),k.LANGUAGE_FROM_ENVIRONMENT=!0,l.usePromise=a.defer(),h.setCulture(c).then(function(){b.debug("ccOauth.setCulture() - success")},function(a){b.error("ccOauth.setCulture() - failure: "+a)})["finally"](function(){b.debug("ccOauth.setCulture() - finally"),f.use(h.getCulture()).then(function(){l.usePromise.resolve("language loaded")},function(){l.usePromise.resolve("language not loaded")})}),l.usePromise.promise},l.setup=function(){e.CWL&&(b.debug("cwllib.setup()"),e.CWL.lib={},e.CWL.lib.clearToken=function(){g.clear()},e.CWL.lib.setState=function(a,b){d.go(a,b)},e.CWL.lib.setToken=function(a){h.setAccessToken(a)},e.CWL.lib.setLoginName=function(a){g.set("loginName",a)},e.CWL.lib.setTerminalurl=function(a,b){k.TERMINAL_URL=a,k.TERMINAL_URL_USE_GET=void 0!==b?b:!0},e.CWL.lib.setRedirectProspect=function(a){k.REDIRECT_PROSPECT=a},e.CWL.lib.setMandators=function(a){j.setAll(a)},e.CWL.lib.option=function(a){void 0!==a.close&&(c.enableClose=a.close)},e.CWL.lib.showMessage=function(a,e,f){switch(b.debug("lib.showMessage()"),c.ready=!0,f||(f="warning"),f){default:i.showInfo(e,a,function(){return d.go("login.default")})}},e.CWL.lib.setLanguage=l.setLanguage)}}]).factory("setAccessToken",["storage","CONF",function(a,b){"use strict";return{request:function(c){return 0===c.url.indexOf(b.REST_URL)&&a.get("accessToken")&&(c.headers.Authorization="Bearer "+a.get("accessToken")),c}}}]).factory("setBusinessContextInterceptor",["storage","CONF",function(a,b){"use strict";return{request:function(c){var d;return 0===c.url.indexOf(b.REST_URL)&&(d=angular.toJson({ApiConsumerKey:b.API_CONSUMER_KEY,ConsumerContextKey:b.CONSUMER_CONTEXT_KEY,SubscriberID:b.SUBSCRIBER_ID,PreferredCulture:a.get("culture")}),c.headers["X-CWAPI-BusinessContext"]=d),c}}}]).factory("resolveIdents",["$log","$q","$state","$translate","ccOauth","IdentRelation","msgWindow","util","CONF","storage",function(a,b,c,d,e,f,g,h,i,j){"use strict";var k=function(a){g.showInfo(a,d.instant("login.login.ERROR"),function(){return c.go("login.default")})},l=function(b,c){a.debug("resolveIdents.success()");var f,g,l=[],m=[],n=j.get("wantedRelationID"),o=c.data.items;if(null!=n&&(o=o.filter(function(a){return a.relationID===n})),0===o.length)k(d.instant("login.common.NO_RELATION")),b.reject();else if(1===o.length)e.setIdentRelation(o[0].relationID).then(function(){h.transmit(o[0])})["catch"](function(b){a.error("ccOauth.setIdentRelation.error()",b),k("Problem beim Setzen der Beziehungsart. "+h.splitAndDecode(b.headers("X-CWAPI-NOTIFICATION")))}),b.reject();else if(o.length>1)if(a.debug(o.length+" items, filter615:",i.FILTER_615),i.FILTER_615){for(f=0,g=o.length;g>f;f+=1)615===o[f].relationModeID?l.push(o[f]):m.push(o[f]);m.length?1===m.length?(e.setIdentRelation(m[0].relationID).then(function(){h.transmit(m[0])})["catch"](function(b){a.error("ccOauth.setIdentRelation.error()",b),k("Problem beim Setzen der Beziehungsart. "+h.splitAndDecode(b.headers("X-CWAPI-NOTIFICATION")))}),b.reject()):b.resolve(m):b.resolve(o)}else b.resolve(o)},m=function(a,b){var c,d,e=!1;for(c=0,d=a.length;d>c;c+=1)if(a[c].code===b){e=!0;break}return e},n=function(b){a.error("resolveIdents.error()",b);var e,f,h,i=[];if(h=b.data.header.notifications,400===b.status&&m(h,"10.20.57"))return a.debug(b.status,"Die gewünschte Anmeldung ist für diese Applikation nicht möglich"),void g.showWarning(i,d.instant("login.login.NO_ALLOWED_RELATIONS"),function(){return c.go("login.default")});if(b.data.header.notifications)for(e=0,f=b.data.header.notifications.length;f>e;e+=1)i.push(b.data.header.notifications[e].displayTitle);g.showWarning(i,d.instant("login.common.UNEXPECTED_ERROR"),function(){return c.go("login.default")})};return function(){var a=b.defer();return f.get().$promise.then(function(b){l(a,b)})["catch"](n),a.promise}}]).service("dialog",["$log","$rootScope",function(a,b){"use strict";this.setTitle=function(c){a.debug("dialog.setTitle("+c+")"),b.dialog||(b.dialog={}),b.dialog.title=c},this.show=function(){a.debug("dialog.show()"),b.dialogVisible!==!0&&(b.dialogVisible=!0)},this.hide=function(){a.debug("dialog.hide()"),b.dialogVisible!==!1&&(b.dialogVisible=!1)}}
7]).service("util",["$log","$rootScope","$window","$timeout","$translate","storage","UriTemplate","CONF","$state","ccMessageBox","ccOauth",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=this,m=!1,n=[];l.clearDoneHandler=function(){m=!1,n=[]},l.useReturnUrl=function(){var a=f.get("returnUrl");return a?(f.clear(),c.location=decodeURIComponent(a),!0):!1},l.notificationToString=function(b){var c,d=[];return b.type&&d.push(b.type),b.code&&d.push("["+b.code+"]"),c=b.displayTitle||"unknown error",d.push(c),a.debug(d.join(" ")),c},l.handleLoginState=function(b,c){switch(a.debug("util.handleLoginState("+b+")"),b){case"ExistsAlready":i.go("login.default",{alreadyConverted:!0});break;case"Locked":j.set(e.instant("login.login.ERROR"),l.splitAndDecode(c.headers("X-CWAPI-NOTIFICATION")));break;default:a.warn('unbekannter loginstate: "'+b+'"'),j.set(e.instant("login.common.UNEXPECTED_ERROR"),c.statusText)}},l.handleError=function(b){a.debug("util.handleError()");var c=[];b.data&&b.data.header&&b.data.header.notifications&&(c=c.concat(b.data.header.notifications.map(l.notificationToString))),c.length?j.set(e.instant("login.login.ERROR"),c):j.set(e.instant("login.login.ERROR"),e.instant("login.common.UNEXPECTED_ERROR"))},l.getTerminalUrl=function(a){var b,c;return c={language:k.getCulture(),cms_Feurocode:a.euroCode},b=615===a.relationModeID&&h.REDIRECT_PROSPECT?g.parse(h.PROSPECTIVE_TERMINAL_URL).expand(c):g.parse(h.TERMINAL_URL).expand(c)},l.getTransmissionForm=function(b){a.debug("util.getTransmissionForm("+b+")");var c,d;return c=document.createElement("form"),c.action=l.getTerminalUrl(b),c.method=h.TERMINAL_URL_USE_GET?"GET":"POST",c.encoding="application/x-www-form-urlencoded",d=document.createElement("input"),d.name="l",d.type="hidden",d.value=k.getCulture(),c.appendChild(d),h.SUBMIT_SESSION_INFO&&(d=document.createElement("input"),d.name="token",d.type="hidden",d.value=f.get("accessToken"),c.appendChild(d),d=document.createElement("input"),d.name="issuer",d.type="hidden",d.value=h.REST_URL,c.appendChild(d),f.get("loginName")&&(d=document.createElement("input"),d.name="loginname",d.type="hidden",d.value="self",c.appendChild(d))),c},l.transmit=function(b){a.debug("util.transmit("+b+")");var c=l.getTransmissionForm(b);document.body.appendChild(c),a.debug("goto "+c.action.substr(0,100)+"..."),c.submit()},l.logNotifications=function(b){angular.forEach(b,function(b){a.warn(b.type+" ["+b.code+"] "+(b.displayText?b.displayText:b.displayTitle))})},l.done=function(){a.debug("util.done()"),b.indicateWait=!1,b.ready=!0,b.$broadcast("util.done"),angular.forEach(n,function(a){d(a)}),m=!0},l.onDone=function(a){m?d(a):n.push(a)},l.decode=function(a){return atob(a)},l.splitAndDecode=function(b){var c,d;return b&&b.split&&(c=b.split(","),d=l.decode(c[0]),a.debug(c[1]+" - "+d)),d},l.scrollToTop=function(){l.scrollTo(0,0)},l.scrollTo=function(a,b){window.scrollTo(a,b)},l.parseDate=function(b){if(b){var c,d=moment(b,"DD.MM.YYYY"),e=k.getCulture();if(c="de-DE"===e||"de-DEV"===e||"de"===e?"DD.MM.YYYY":"nl-BE"===e?"MM/DD/YYYY":"YYYY-MM-DD",!d)throw new Error("invalid date format");return d.format(c)}return a.info("Kein Datum vorhanden!"),null},l.formatDateTime=function(a){var b,c=k.getCulture();return b="de-DE"===c||"de-DEV"===c||"de"===c?"DD.MM.YYYY HH:mm":"nl-BE"===c?"MM/DD/YYYY HH:mm":"YYYY-MM-DD HH:mm",moment(a).format(b)}}
7]).factory("requireTranslations",["$translatePartialLoader","$translate",function(a,b){"use strict";return function(){return angular.forEach(arguments,function(b){a.addPart(b)}),b.refresh()}}]).service("msgWindow",["$state",function(a){"use strict";var b,c,d,e,f,g,h,i,j=this,k=!1,l=[],m=Array.prototype.unshift;j.WARNING="warning",j.SUCCESS="success",j.INFO="info",j.DANGER="danger",j.DEFAULT="default",j.MOREMAIL="moreMail",j.showWarning=function(){m.call(arguments,j.WARNING),j._show.apply(j,arguments)},j.showSuccess=function(){m.call(arguments,j.SUCCESS),j._show.apply(j,arguments)},j.showInfo=function(){m.call(arguments,j.INFO),j._show.apply(j,arguments)},j.showDanger=function(){m.call(arguments,j.DANGER),j._show.apply(j,arguments)},j.show=function(){m.call(arguments,j.DEFAULT),j._show.apply(j,arguments)},j.showMoreMail=function(f,g,k,m,n,o){l=angular.isArray(f)?$.map(f,function(a){return{text:a}}):[{text:f}],b=g,c=j.WARNING,d=k,e=m,h=n,i=o,a.go("login.moreMail")},j._show=function(d,e,j,k,m,n,o){l=angular.isArray(e)?$.map(e,function(a){return{text:a}}):[{text:e}],b=j,c=d,f=k,g=m,h=n,i=o,a.go("login.message")},j.reset=function(){l=b=f=g=h=i=null,c=j.DEFAULT},j.noButtons=function(a){null==a&&(a=!0),k=a},j.getData=function(){return{body:l,header:b,type:c,okCall:f,cancelCall:g,yesCall:h,noCall:i,noButtons:k}},j.getMoreMailData=function(){return{body:l,header:b,labelYes:d,labelNo:e,type:c,yesCall:h,noCall:i}}}]).service("cancel",["$state","$window","ccOauth","$rootScope","util",function(a,b,c,d,e){"use strict";this["default"]=function(){e.scrollToTop(),window.alert("pfui, pfui")},this.toLogin=function(){e.useReturnUrl()||(e.scrollToTop(),a.go("login.default"))},this.andLogout=function(){e.scrollToTop(),c.logOut(),d.quit()}}]).service("validate",["$translate",function(a){"use strict";var b=this;b.password=function(b,c){return b?b!==c?{valid:!1,message:a.instant("login.validate.PASSWD_NOT_MATCH")}:{valid:!0}:{valid:!1,message:a.instant("login.validate.PASSWD_EMPTY")}}}]).service("storage",["$window","$log",function(a,b){"use strict";var c,d=!1,e="cc-",f=e.length,g=new RegExp("^"+e);try{c=a.sessionStorage,null!=c&&(d=!0)}catch(h){b.warn(h)}this.storageAvailable=function(){return d},d?this.set=function(a,b){c.setItem(e+a,angular.toJson(b))}:this.set=function(){},d?this.remove=function(a){c.removeItem(e+a)}:this.remove=function(){},d?this.get=function(a){var b;return b=c.getItem(e+a),angular.fromJson(b)}:this.get=function(){},d?this.clear=function(a){angular.isArray(a)||(a=[]),a.push("remeberToken"),a.push("wantedRelationID"),b.debug("storage.clear()");var d;for(d in this)-1===$.inArray(d,a)&&this.hasOwnProperty(d)&&"function"!=typeof this[d]&&(b.debug("storage.delete - this."+d),delete this[d]);for(d in c)-1===$.inArray(d.substr(f),a)&&g.test(d)&&(b.debug("storage.removeItem("+d+")"),c.removeItem(d))}:this.clear=function(){}}]).service("Mandator",["$log",function(a){"use strict";var b=this,c=[];b.getAll=function(){return c},b.setAll=function(b){a.debug("Mandator.setAll() - "+b.length+" Mandanten"),c=b}}]).service("ccOauth",["CONF","$q","$log","$http","$state","$window","storage","Culture",function(a,b,c,d,e,f,g,h){"use strict";var i,j,k,l,m=this;m.setCulture=function(a){var d=h.get(),e=b.defer();return d.$promise.then(function(b){var d,f,h=!1;for(d=0,f=b.length;f>d;d+=1)if(b[d].id===a){i=b[d].id,h=!0;break}h?(g.set("culture",i),e.resolve("ok")):(e.reject("culture "+a+" not found"),c.debug("culture "+a+" not found"))},function(){c.error("ccOauth.setCulture failure"),e.reject('error setting culture "'+a+'"')}),e.promise},m.getCulture=function(){var b=i||a.DEFAULT_CULTURE;return b},m.sendLogin=function(e){c.debug("ccOauth.sendLogin()");var f=b.defer();return d({method:"POST",url:a.REST_URL+"/oauth/token",headers:{"Content-Type":"application/x-www-form-urlencoded"},data:$.param(e)}).then(function(a){m.setAccessToken(a.data.access_token),m.setAccessTokenTTL(a.data.expires_in),m.setRefreshToken(a.data.refresh_token),f.resolve(a)},function(a){a.data&&a.data.error_description&&(a.data.errorDescription=a.data.error_description||a.data,c.error("ccOauth.sendLogin - "+a.data.errorDescription)),f.reject(a)}),f.promise},m.setIdentRelation=function(e){c.debug("ccOauth.setIdentRelation()");var f=b.defer();return d({method:"PUT",url:a.REST_URL+"/oauth/token",headers:{"Content-Type":"application/x-www-form-urlencoded"},data:$.param({relationID:e})}).then(function(a){c.debug("ccOauth.setIdentRelation.success"),m.setAccessToken(a.data.access_token),m.setAccessTokenTTL(a.data.expires_in),m.setRefreshToken(a.data.refresh_token),m.callHooks(a,e).then(function(a){f.resolve(a)})},function(a){c.debug("ccOauth.setIdentRelation.failure");try{a.data&&a.data.error_description&&(a.data.errorDescription=a.data.error_description||a.data,c.error("ccOauth.setIdentRelation Fehler",a.data.errorDescription))}catch(b){c.error("ccOauth.setIdentRelation Fehler",b)}f.reject(a)}),f.promise},m.callHooks=function(a,d){return f.__cwCallbacks&&"function"==typeof f.__cwCallbacks.relationChanged?m.getLogin().then(function(b){var e,h;try{e={accessToken:a.data.access_token,refreshToken:a.data.refresh_token,relationID:d,rememberToken:g.get("rememberToken")},null!=e.rememberToken&&/iPhone/.test(window.navigator.userAgent)&&(e.rememberToken=e.rememberToken?"1":"0")}catch(i){c.error(i)}return b&&b.data&&b.data.data&&(b.data.data.loginName&&(e.loginName=b.data.data.loginName),b.data.data.givenName&&(e.givenName=b.data.data.givenName),b.data.data.familyName&&(e.familyName=b.data.data.familyName),b.data.data.customerNumber&&(e.customerNumber=b.data.data.customerNumber),b.data.data.mandatorID&&(e.mandatorID=b.data.data.mandatorID),b.data.data.euroCode&&(e.euroCode=b.data.data.euroCode)),h=angular.toJson(e),c.debug("call __cwCallbacks.relationChanged()"),f.__cwCallbacks.relationChanged("MYC",h),a}
7,function(b){return c.error("getLogin error ",b),a}):b.when(a)},m.getLogin=function(){return c.debug("ccOauth.getLogin()"),d({method:"GET",url:a.REST_URL+"/login/self",headers:{"Content-Type":"application/form-data"}})},m.loginLost=function(e){c.debug("ccOauth.loginLost()");var f={acceptMultipleRecipients:e.verify},h=b.defer();return d({method:"POST",url:a.REST_URL+"/login/"+e.account+"/recoverpassword/",data:f}).then(function(a){c.debug("loginLost response"),g.loginLostDefer=h,h.resolve(a)},function(a){a.data&&a.data.error_description&&(a.data.errorDescription=a.data.error_description||a.data,c.error(a.data.errorDescription)),g.validate=!1,h.reject(a)}),h.promise},m.recover=function(e){c.debug("loginCtrl.recover()");var f=b.defer();return d({method:"POST",url:a.REST_URL+"/oauth/recover/",headers:{"Content-Type":"application/form-data"},data:e}).then(function(a){c.debug("recover response"),a.ValidationNotifications.contains()||f.resolve(a)},function(a){a.data.errorDescription=a.data.error_description||a.data,c.error(a.data.errorDescription),f.reject(a)}),f.promise},m.login=function(b,d){c.debug("ccOauth.login()");var e={grant_type:"password",client_id:a.CLIENT_ID,login_type:"username",username:b,password:d,culture:m.getCulture(),madaID:null,scope:"foo"};return a.CLIENT_SECRET&&(e.client_secret=a.CLIENT_SECRET,e.clientSecret=a.CLIENT_SECRET),m.sendLogin(e)},m.legacyLogin=function(b,d,e){c.debug("ccOauth.legacyLogin()");var f={grant_type:"password",client_id:a.CLIENT_ID,login_type:"customerNumber",culture:m.getCulture(),username:b,password:d,madaID:e};return a.CLIENT_SECRET&&(f.client_secret=a.CLIENT_SECRET,f.clientSecret=a.CLIENT_SECRET),m.sendLogin(f)},m.fuzzyLogin=function(b){c.debug("ccOauth.fuzzyLogin()");var d={grant_type:"password",client_id:a.CLIENT_ID,login_type:"customerNumber",culture:m.getCulture(),username:b.customerNumber,password:b.pin,madaID:b.madaId,givenName:b.givenName,familyName:b.familyName,dateOfBirth:b.dateOfBirth,eMail:b.eMail};return m.sendLogin(d)},m.createLogin=function(){},m.pwdMustChange=function(){c.debug("ccOauth.pwdMustChange()");var f=b.defer();return d({method:"GET",url:a.REST_URL+"/login/self"}).then(function(b){(a.LANGUAGE_FROM_LOGIN_ALWAYS||!a.LANGUAGE_FROM_ENVIRONMENT)&&b.data.data.culture&&(g.set("culture",b.data.data.culture),CWL.lib.setLanguage(b.data.data.culture)),b.data.data.passwordChangeRequired?(c.debug("Password needs to be changed"),g.pwdChangeDefer=f,e.go("login.pwdchange")):(c.debug("Password does not need to be changed"),f.resolve())},function(a){c.debug("ccOauth.pwdMustChange() - Fehler"),a.data.errorDescription=a.data.error_description||a.data,c.error(a.data.errorDescription),f.reject(a)}),f.promise},m.changePwd=function(b,e){c.debug("ccOauth.changePwd()");var f={};return f.Password=b.password,b.specialCode&&(f.ConfirmationCode=b.specialCode),d({method:"PUT",url:a.REST_URL+"/login/self/secret",headers:{"Content-Type":"application/json"},data:{data:b,storageUID:e}})},m.changeLogin=function(e,f){c.debug("ccOauth.changeLogin("+e+", "+f+")");var g=b.defer();return e.passwordOLD?e={Password:e.password,OldPassword:e.passwordOLD,ConfirmationCode:e.specialCode}:e.answer&&(e={Password:e.password,PasswordAnswer:e.answer,ConfirmationCode:e.specialCode}),d({method:"PUT",url:a.REST_URL+"/login/self/secret",headers:{"Content-Type":"application/json"},data:{data:e,storageUID:f}}).then(function(a){c.debug("ccOauth.changeLogin erfolgreich"),g.resolve(a)},function(a){c.debug("ccOauth.changeLogin fehlgeschlagen:",a.status,a.statusText),m.setStorageUID(a.data.data.storageUID),a.data.errorDescription=a.data.error_description||a.data,g.reject(a)}),g.promise},m.logOut=function(){c.debug("ccOauth.logOut()"),g.clear(["culture"])},m.refreshToken=function(){c.debug("ccOauth.refreshToken()");var b={grant_type:"refresh_token",refresh_token:m.getRefreshToken(),client_id:a.CLIENT_ID};return m.sendLogin(b)},m.setAccessToken=function(a){c.debug("ccOauth.setAccessToken("+a.substring(0,100)+"...)"),j=a,g.set("accessToken",a)},m.getAccessToken=function(){return j},m.setAccessTokenTTL=function(a){c.debug("ccOauth.setAccessTokenTTL("+a+")"),g.set("TTL",a),g.set("timestamp",(new Date).getTime())},m.setRefreshToken=function(a){k=a,g.set("refreshToken",a)},m.getRefreshToken=function(){return k},m.setStorageUID=function(b){c.debug("ccOauth.setStorageUID("+b+")"),l=b,g.set(a.STORAGE_UID_KEY,b)},m.getStorageUID=function(){return l}}]),angular.module("CWLogin").controller("sleepCtrl",["$rootScope","$scope","$log",function(a,b,c){"use strict";var d=this;d.init=function(){c.debug("sleepCtrl.init()")},d.init()}]); 8angular.module("CWLogin.templates",[]).run(["$templateCache",function(a){a.put("templates/buttons.html",'<div class="form-group form-group-sm form-group-xs buttons"> <div style="padding-bottom:5px" class="col-xs-12 col-sm-3 col-sm-offset-1 col-sm-push-8"> <button class="btn btn-block" ng-class="{\'btn-primary\': isPrimary}" ng-disabled="rightDisabled" ng-click="rightClick({$event: $event})">{{ rightLabel }}</button> </div> <div class="col-xs-12 col-sm-5 col-sm-offset-3 col-sm-pull-4" ng-show="leftLabel"> <button class="btn btn-block" ng-click="leftClick({$event: $event})">{{ leftLabel }}</button> </div> </div>'),a.put("templates/fuzzy.html",'<form name="fuzzyform" class="form-horizontal" novalidate> <p data-translate>login.fuzzy.PLEASE_ANSWER_AS_MUCH_AS_POSSIPLE</p> <cc-text model="fuzzy.givenname" required="true" autofocus label="{{ \'login.common.GIVENNAME\' | translate }}" info="{{ \'login.common.GIVENNAME_INFO\' | translate }}"></cc-text> <cc-text model="fuzzy.familyname" required="true" label="{{ \'login.common.FAMILYNAME\' | translate }}" info="{{ \'login.common.FAMILYNAME_INFO\' | translate }}"></cc-text> <cc-text model="fuzzy.date" label="{{ \'login.common.DATE_OF_BIRTH\' | translate }}" info="{{ \'login.common.DATE_OF_BIRTH_INFO\' | translate }}"></cc-text> <cc-text model="fuzzy.email" label="{{ \'login.common.EMAIL\' | translate }}" info="{{ \'login.common.EMAIL_INFO\' | translate }}"></cc-text> <cc-buttons right-label="{{ rightLabel }}" right-click="submit()" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form>'),a.put("templates/help.html",'<div class="cc-panel-body"> <form name="pwdlostform" novalidate> <p ng-repeat="prob in PROBLEMS"> <label> <input type="radio" name="problem" ng-model="$parent.problem" ng-value="prob.value"> {{ prob.label }} </label> </p> <cc-buttons right-label="{{ rightLabel }}" right-click="continue()" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form> </div>'),a.put("templates/identRelation.html",'<div class="row"> <div class="col col-sm-3 col-xs-5 col-sm-offset-1 text-left"> <label data-translate>login.common.LOGIN_AS</label> </div> <div class="col col-sm-8 col-xs-7 cc-identRelationLoginName"> {{ currentUser }} </div> </div> <div class="row cc-identRelations"> <div class="col col-sm-11 col-sm-offset-1"> <div class="panel panel-default"> <ul class="list-group"> <li class="list-group-item" ng-repeat="relation in identRelations | orderBy:\'customerNumber\'" cc-focus-first> <div class="row"> <div class="identLabel col col-xs-12 col-sm-6"> <div class="vertical-center"> {{ identLabels[relation.id] }} </div> </div> <div class="customerNumber col col-xs-2 col-sm-1"> <div class="vertical-center" title="relationID: {{ relation.relationID }}"> {{ relation.customerNumber }} </div> </div> <div class="col col-xs-8 col-sm-4"> <div class="vertical-center" title="relationID: {{ relation.relationID }}"> {{ relation.parentName }} </div> </div> <div class="col col-xs-2 col-sm-1 text-right"> <div class="vertical-center"> <button id="btn{{ relation.relationID }}" class="btn btn-sm btn-primary" ng-click="identRelClick(relation)">â¶</button> </div> </div> </div> </li> </ul> </div> </div> </div> <cc-buttons right-label="{{ rightLabel }}" right-click="cancel()" right-not-primary></cc-buttons>'),a.put("templates/login.html",'<div class="modal-body"> <cc-messagebox control="msgBox"></cc-messagebox> <div class="container-fluid" ui-view="panel"> </div> </div> '),a.put("templates/loginChange.html",'<form class="form-horizontal" name="loginchangeform" novalidate> <p>{{info}}</p> <div class="well well-sm"> <cc-text model="realname" name="realname" readonly="true" label="{{ \'login.common.REALNAME\' | translate }}"></cc-text> <cc-text model="login.loginName" name="username" readonly="true" label="{{ \'login.common.USERNAME\' | translate }}" placeholder="{{ \'login.common.USERNAME\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="password.old" type="password" name="oldpassword" readonly="NoEdit" required="true" cc-autofocus label="{{ \'login.recovery.OLD_PASSWORD\' | translate }}" placeholder="{{ \'login.recovery.OLD_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.recovery.OLD_PASSWORD_INFO\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="password.new" type="password" name="newpassword" readonly="NoEdit" label="{{ \'login.create.NEW_PASSWORD\' | translate }}" placeholder="{{ \'login.create.NEW_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.common.NEW_PASSWORD_POLICY_INFO\' | translate }}"></cc-text> <cc-text model="password.confirm" type="password" name="repeatpassword" readonly="NoEdit" ng-show="showConfirmPassword" label="" placeholder="{{ \'login.create.REPEAT_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.create.REPEAT_PASSWORD_INFO\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="security.question" type="text" name="security_question" readonly="NoEdit" label="{{ \'login.common.SECQUESTION\' | translate }}" placeholder="{{ \'login.create.SECQUESTION_INFO\' | translate }}" info="{{ \'login.create.SECQUESTION_INFO\' | translate }}"></cc-text> <cc-text model="security.answer" type="text" name="security_answer" readonly="NoEdit" autocomplete="off" label="{{ \'login.question.NEW_SECANSWER\' | translate }}" placeholder="{{ \'login.question.NEW_SECANSWER\' | translate }}" info="{{ \'login.create.SECANSWER_INFO\' | translate }}"></cc-text> </div> <div class="well well-sm" ng-show="needCode"> <cc-text model="login.confirmationCode" type="password" name="specialCode" readonly="NoEdit" required="needCode" ng-show="needCode" label="{{ \'login.recovery.SPECIALCODE\' | translate }}" placeholder="{{ \'login.recovery.INSERT_SPECIALCODE\' | translate }}" info="{{ \'login.recovery.INFO_NO_SPECIALCODE\' | translate }}"></cc-text> </div> <cc-buttons right-label="{{ rightLabel }}" right-click="submit()" right-disabled="nothingChanged()" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form>'),a.put("templates/loginCreate.html",'<form class="form-horizontal" name="cc_login_create_form" novalidate> <div class="well well-sm"> <cc-text model="givenName" readonly="true" label="{{ \'login.common.GIVENNAME\' | translate }}"></cc-text> <cc-text model="familyName" readonly="true" label="{{ \'login.common.FAMILYNAME\' | translate }}"></cc-text> <cc-text model="dateOfBirth" type="text" readonly="true" label="{{ \'login.common.DATE_OF_BIRTH\' | translate }}"></cc-text> <cc-text model="eMail" readonly="true" label="{{ \'login.common.EMAIL\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="login" cc-autofocus valid="loginValid" label="{{ \'login.common.USERNAME\' | translate }}" info="{{ \'login.create.USERNAME_INFO\' | translate }}" placeholder="{{ \'login.create.USERNAME_EMPTY\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="passwordNew" type="password" label="{{ \'login.create.NEW_PASSWORD\' | translate }}" valid="passwordNewValid" info="{{ \'login.common.NEW_PASSWORD_POLICY_INFO\' | translate }}" placeholder="{{ \'login.create.NEW_PASSWORD_EMPTY\' | translate }}"></cc-text> <cc-text model="passwordConfirm" type="password" label="" valid="passwordConfirmValid" info="{{ \'login.create.REPEAT_PASSWORD_INFO\' | translate }}" placeholder="{{ \'login.create.REPEAT_PASSWORD_EMPTY\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="passwordQuestion" valid="passwordQuestionValid" label="{{ \'login.common.SECQUESTION\' | translate }}" info="{{ \'login.create.SECQUESTION_INFO\' | translate }}" placeholder="{{ \'login.create.SECQUESTION_EMPTY\' | translate }}"></cc-text> <cc-text model="passwordAnswer" autocomplete="off" valid="passwordAnswerValid" label="{{ \'login.common.SECANSWER\' | translate }}" info="{{ \'login.create.SECANSWER_INFO\' | translate }}" placeholder="{{ \'login.create.SECANSWER_EMPTY\' | translate }}"></cc-text> </div> <div class="well well-sm" ng-show="needCode"> <cc-text model="confirmationCode" type="password" valid="confirmationCodeValid" label="{{ \'login.create.CODE\' | translate }}" info="{{ \'login.create.CODE_INFO\' | translate }}" placeholder="{{ \'login.create.CODE_EMPTY\' | translate }}" ng-show="needCode"></cc-text> </div> <cc-buttons right-label="{{ rightLabel }}" right-click="submit()" left-label="{{ leftLabel }}" left-click="skip()"></cc-buttons> </form> '),a.put("templates/loginDefault.html",'<form name="loginform" ng-submit="loginDefault()" ng-class="{\'not-ready\': !ready}" class="form-horizontal" novalidate="novalidate"> <cc-text model="login.name" cc-autofocus name="username" required="true" label="{{ \'login.common.USERNAME\' | translate }}" info="{{ \'login.common.USERNAME_INFO\' | translate }}"></cc-text> <cc-text model="login.password" type="password" name="password" required="true" label="{{ \'login.common.PASSWORD\' | translate }}" info="{{ \'login.common.PASSWORD_INFO\' | translate }}"></cc-text> <div ng-if="showRememberToken" class="form-group form-group-sm"> <div class="col-sm-3 col-xs-12"></div> <div class="col-sm-8 col-xs-11"> <input ng-model="login.rememberToken" class="form-check-input" id="rememberToken" type="checkbox"> <label for="rememberToken" data-translate>login.login.REMEMBER_TOKEN</label> </div> <div class="col-sm-1 col-xs-1"></div> </div> <div ng-if="showPINLogin" class="form-group form-group-sm legacyswitch"> <div class="col-sm-12"> <span data-translate>login.login.SWITCH_TO_PIN</span> >>> <a data-translate ui-sref="login.legacy">login.login.NO_NEW_LOGIN</a> </div> </div> <cc-buttons right-label="{{ rightLabel }}
8" right-click="dummy()" right-disabled="loginform.$invalid" left-label="{{ leftLabel }}" left-click="privacy($event)"></cc-buttons> <div class="form-group form-group-sm"> <div class="col-sm-12 text-right"> <a href="#" ui-sref="login.help" data-translate>login.login.NEED_HELP</a> </div> </div> </form> '),a.put("templates/loginLegacy.html",'<div ng-if="returnToDefault"> <cc-login-switch header="{{ \'login.login.SWITCH_TO_NEW_LOGIN\' | translate }}" button-label="{{ \'login.login.NEW_LOGIN\' | translate }}" target-state="login.default" info="{{ \'login.login.SWITCH_TO_NEW_LOGIN_INFO\' | translate }}"></cc-login-switch> </div> <h4 class="login-header"> {{ \'login.login.LEGACY_LOGIN_HEADING\' | translate }} </h4> <form name="loginform" class="form-horizontal" novalidate="novalidate"> <cc-select model="login.city" options="cities" ng-if="cities.length > 1" required="true" cc-autofocus label="{{ \'login.login.CITY\' | translate }}"></cc-select> <cc-text model="login.customerNumber" name="custnr" required="true" label="{{ \'login.login.CUSTOMER_ID\' | translate }}" info="{{ \'login.login.CUSTOMER_ID_INFO\' | translate }}"></cc-text> <cc-text model="login.pin" type="password" name="pin" required="true" label="{{ \'login.login.PIN\' | translate }}" info="{{ \'login.login.PIN_INFO\' | translate }}"></cc-text> <cc-buttons right-label="{{ rightLabel }}" right-click="loginLegacy()" right-disabled="loginform.$invalid" left-label="{{ leftLabel }}" left-click="privacy($event)"></cc-buttons> <div ng-hide="currentState.name == \'login.legacy\'" class="form-group form-group-sm"> <div class="col-sm-12 text-right"> <a href="#" ui-sref="login.help" data-translate>login.login.NEED_HELP</a> </div> </div> <div class="form-group form-group-sm" ng-if="showHowto"> <div class="col-sm-12 text-right"> <a ng-href="{{ howtoURL }}" data-translate>login.login.HOW_TO_LINK</a> </div> </div> </form>'),a.put("templates/loginLost.html",'<form name="loginlostform" class="form-horizontal" novalidate="novalidate"> <p>{{info}}</p> <cc-text model="login.ident" required="true" cc-autofocus valid="login.valid" type="email" label="{{ \'login.common.EMAIL\' | translate }}" info="{{ \'login.common.EMAIL_INFO\' | translate }}"></cc-text> <cc-buttons right-label="{{ rightLabel }}" right-click="continue()" right-disabled="loginlostform.$invalid" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form>'),a.put("templates/loginerror.html",'<div class="cc-panel-body"> <ul> <li>Ãbersetzungsserver zurzeit nicht verfügbar. Bitte versuchen Sie es später erneut.</li> <li>Language processor not available. Try again later and in a different browser.</li> <li>Le service de traduction nâest pas accessible. Réessayez plus tard et dans un autre navigateur.</li> <li>Taalprocessor is tijdelijk niet beschikbaar. Probeer later opnieuw en in een andere browser.</li> </ul> </div>'),a.put("templates/messagebox.html",'<div class="cc-msgBox panel" ng-class="data.type" ng-show="data.visible"> <div class="panel-heading" ng-hide="!data.header"> <h4 class="panel-title">{{ data.header }}</h4> </div> <div class="panel-body"> <div ng-repeat="item in data.body"> {{ item }} </div> </div> </div>'),a.put("templates/msgMoreMail.html",'<div id="cc-login-box"> <div class="cc-panel cc-panel-primary"> <div class="cc-panel-heading"> <h4 class="cc-panel-title">{{ data.header }}</h4> </div> <div class="cc-panel-body"> <div class="cc-panel" ng-class="panelType"> <div id="cc-msgbox-textarea" class="cc-scrollable panel-body"> <div ng-repeat="item in data.body"> {{ item.text }} </div> </div> </div> <form novalidate> <button class="btn-lg btn-primary btn-block" ng-click="data.yesCall()" ng-hide="!data.yesCall">{{ data.labelYes }}</button> <button class="btn-lg btn-primary btn-block" ng-click="data.noCall()" ng-hide="!data.noCall">{{ data.labelNo }}</button> </form> </div> </div> </div>'),a.put("templates/msgWindow.html",'<div id="cc-login-box"> <div class="cc-panel cc-panel-primary"> <div class="cc-panel-heading"> <h4 class="cc-panel-title">{{ data.header }}</h4> </div> <div class="cc-panel-body"> <div class="cc-panel" ng-class="panelType"> <div id="cc-msgbox-textarea" class="cc-scrollable panel-body"> <div ng-repeat="item in data.body"> {{ item.text }} </div> </div> </div> <form novalidate ng-if="!noButtons"> <button class="btn-lg btn-primary btn-block" ng-click="data.yesCall()" ng-hide="!data.yesCall" data-translate>login.msgwindow.BUTTON_YES</button> <button class="btn-lg btn-primary btn-block" ng-click="data.noCall()" ng-hide="!data.noCall" data-translate>login.msgwindow.BUTTON_NO</button> <button class="btn-lg btn-primary btn-block" ng-click="data.cancelCall()" ng-hide="!data.cancelCall" data-translate>login.msgwindow.BUTTON_CANCEL</button> <button class="btn-lg btn-primary btn-block" ng-click="okClick()" cc-autofocus data-translate>login.msgwindow.BUTTON_OK</button> </form> </div> </div> </div>'),a.put("templates/nocookie.html",'<div class="modal-body"> <cc-messagebox control="msgBox"></cc-messagebox> <div class="container-fluid"> <div class="well well-sm"> {{ \'login.login.NO_COOKIE\' | translate }} </div> </div> </div> '),a.put("templates/pwdChange.html",'<form class="form-horizontal" name="secquestform" novalidate> <cc-text model="login.loginName" name="username" readonly="true" label="{{ \'login.common.USERNAME\' | translate }}"></cc-text> <cc-text model="password.old" type="password" name="oldpassword" required="true" cc-autofocus label="{{ \'login.recovery.OLD_PASSWORD\' | translate }}" placeholder="{{ \'login.recovery.OLD_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.recovery.OLD_PASSWORD_INFO\' | translate }}"></cc-text> <cc-text model="password.new" type="password" name="newpassword" required="true" label="{{ \'login.create.NEW_PASSWORD\' | translate }}" placeholder="{{ \'login.create.NEW_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.create.NEW_PASSWORD_INFO\' | translate }}"></cc-text> <cc-text model="password.confirm" type="password" name="repeatpassword" required="true" label="{{ \'login.create.REPEAT_PASSWORD\' | translate }}" placeholder="{{ \'login.create.REPEAT_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.create.REPEAT_PASSWORD_INFO\' | translate }}"></cc-text> <cc-text model="login.ConfirmationCode" type="password" name="specialCode" required="needCode" ng-show="needCode" label="{{ \'login.recovery.SPECIALCODE\' | translate }}" placeholder="{{ \'login.recovery.INSERT_SPECIALCODE\' | translate }}" info="{{ \'login.recovery.INFO_NO_SPECIALCODE\' | translate }}"></cc-text> <cc-buttons right-label="{{ rightLabel }}
8" right-disabled="!ok2submit" right-click="submit()" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form>'),a.put("templates/pwdLost.html",'<form name="loginlostform" class="form-horizontal" novalidate="novalidate"> <p>{{info}}</p> <cc-text model="login.ident" required="true" cc-autofocus valid="login.valid" type="text" label="{{ \'login.common.USERNAME\' | translate }}" info="{{ \'login.common.USERNAME_INFO\' | translate }}"></cc-text> <cc-buttons right-label="{{ rightLabel }}" right-click="continue()" right-disabled="loginlostform.$invalid" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form>'),a.put("templates/pwdRecovery.html",'<form class="form-horizontal" name="secquestform" novalidate> <div class="well well-sm"> <cc-text model="login.loginName" name="username" required="true" readonly="true" placeholder="{{ \'login.common.USERNAME\' | translate }}" label="{{ \'login.common.USERNAME\' | translate }}"></cc-text> <cc-text model="login.passwordQuestion" name="securequestion" required="true" readonly="true" placeholder="{{ \'login.common.SECQUESTION\' | translate }}" label="{{ \'login.common.SECQUESTION\' | translate }}"></cc-text> <cc-text model="login.passwordAnswer" name="answer" autocomplete="off" readonly="login.locked" required="true" cc-autofocus label="{{ \'login.common.SECANSWER\' | translate }}" placeholder="{{ \'login.recovery.SECANSWER_EMPTY\' | translate }}" info="{{ \'login.recovery.SECANSWER_INFO\' | translate }}"></cc-text> </div> <div class="well well-sm"> <cc-text model="password.new" type="password" name="newpassword" required="true" readonly="login.locked" label="{{ \'login.create.NEW_PASSWORD\' | translate }}" placeholder="{{ \'login.create.NEW_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.create.NEW_PASSWORD_INFO\' | translate }}"></cc-text> <cc-text model="password.confirm" type="password" name="repeatpassword" required="true" readonly="login.locked" label="" placeholder="{{ \'login.create.REPEAT_PASSWORD_EMPTY\' | translate }}" info="{{ \'login.create.REPEAT_PASSWORD_INFO\' | translate }}"></cc-text> </div> <div class="well well-sm" ng-show="needCode"> <cc-text model="login.ConfirmationCode" type="password" name="specialCode" required="needCode" readonly="login.locked" ng-show="needCode" label="{{ \'login.recovery.SPECIALCODE\' | translate }}" placeholder="{{ \'login.recovery.INSERT_SPECIALCODE\' | translate }}" info="{{ \'login.recovery.INFO_NO_SPECIALCODE\' | translate }}"></cc-text> </div> <cc-buttons right-label="{{ rightLabel }}" right-disabled="!ok2submit" right-click="submit()" left-label="{{ leftLabel }}" left-click="cancel()"></cc-buttons> </form>'),a.put("templates/sleep.html","<p>sleep-state</p> <p>das sollte niemand zu sehen kriegen</p>")}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.