function ipv6short(e){"use strict";if(null===(e=(e=(e=e.replace(/^(0{4}:)+/g,"::")).replace(/(?::?0{4})+(\/\d+)?$/g,"::$1")).replace(/(:|^)(0{1,3})(?=[^0])/g,"$1")).match("::")){var t=e.match(/(:0{4})+/g);if(!t)return e;var n=t.reduce(((e,t)=>e.length>t.length?e:t));e=e.replace(n,":")}return e.replace(/(?!:)(0{4})/g,"0")}define("app/services/api_tokens",["angular","lodash","cjt/util/locale","cjt/io/whm-v1-request","cjt/util/parse","cjt/io/api","cjt/io/whm-v1","cjt/services/APIService"],(function(e,t,n,i,r){"use strict";e.module("whm.apiTokens.apiCallService",[]).factory("Tokens",["$q","APIService",function(o,a){var s=function(){};s.prototype=new a;var l=function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0},c=function(e,t){if(void 0!==t)for(var n=0,i=t.length;n<i;n++)e.addArgument("acl-"+n,t[n])},d={},u={};return e.extend(s.prototype,{getTokens:function(e){if(e||l(d)){var t=new i.Class;return t.initialize("","api_token_list"),this.deferred(t).promise.then((function(e){return d=e.data.tokens})).catch((function(e){return o.reject(e)}))}return o.when(d)},createToken:function(e,t,n,r){var a=new i.Class;return a.initialize("","api_token_create"),a.addArgument("token_name",e),n&&a.addArgument("expires_at",n),r&&r.length&&r.forEach((function(e,t){a.addArgument("whitelist_ip-"+t,e)})),c(a,t),this.deferred(a).promise.then((function(e){return e})).catch((function(e){return o.reject(e)}))},updateToken:function(e,t,n,r,a){var s=new i.Class;return s.initialize("","api_token_update"),s.addArgument("token_name",e),r&&s.addArgument("expires_at",r),a&&a.length&&a.forEach((function(e,t){s.addArgument("whitelist_ip-"+t,e)})),a&&!a.length&&s.addArgument("whitelist_ip","any"),t!==e&&s.addArgument("new_name",t),c(s,n),this.deferred(s).promise.then((function(e){return e})).catch((function(e){return o.reject(e)}))},revokeToken:function(e){var t=new i.Class;if(t.initialize("","api_token_revoke"),"string"==typeof e)t.addArgument("token_name",e);else if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)t.addArgument("token_name-"+n,e[n]);return this.deferred(t).promise.then((function(e){return e})).catch((function(e){return o.reject(e)}))},getPrivileges:function(e){if(e||l(u)){var t=new i.Class;return t.initialize("","myprivs"),this.deferred(t).promise.then((function(e){var t={},n=!1;if(e.data&&null!=(t=e.data[0])){n=Object.prototype.hasOwnProperty.call(t,"all")&&1===t.all,delete t.demo;for(var i=Object.keys(t),r=0,o=i.length;r<o;r++)"all"===i[r]||!n&&1!==t[i[r]]||(u[i[r]]=!0);n&&(u.all=!1)}return u})).catch((function(e){return o.reject(e)}))}return o.when(u)},getDetailsFor:function(e){return this.getTokens(!1).then((function(i){if(null!=i&&Object.prototype.hasOwnProperty.call(i,e)){if(i[e]&&Object.prototype.hasOwnProperty.call(i[e],"acls")){var a=i[e].acls;for(var s in delete a.demo,a)Object.prototype.hasOwnProperty.call(a,s)&&(a[s]=r.parsePerlBoolean(a[s]))}return i[e]}return o.reject(n.maketext("The [asis,API] token “[_1]” does not exist.",t.escape(e)))}))}}),new s}])})),define("app/filters",["angular"],(function(e){"use strict";var t=e.module("whm.apiTokens.filters",[]);return t.filter("ipv6short",(function(){return ipv6short})),t})),define("app/views/home",["angular","cjt/util/locale","cjt/util/table","uiBootstrap","cjt/decorators/growlDecorator","cjt/decorators/paginationDecorator","cjt/directives/actionButtonDirective","cjt/directives/searchDirective","cjt/directives/pageSizeDirective","cjt/directives/alertList","cjt/directives/toggleSortDirective","cjt/services/viewNavigationApi","cjt/directives/autoFocus"],(function(e,t,n){"use strict";return e.module("whm.apiTokens").controller("homeController",["$q","growl","Tokens","$uibModal","viewNavigationApi","PAGE",function(e,i,r,o,a,s){var l=this;l.loading=!1,l.showFormToggleBtn=!0,l.tokenAdded=!1,l.loadingError=!1,l.loadingErrorMessage="",l.allChecked=!1,l.checkedCount=0,l.paginationMessage="",l.showChildAccountsExistWarning=s.childAccountsExist,l.childAccountsExistWarning="",l.childAccountsExistWarning+=t.maketext("There are accounts on this server controlled by a parent node."),l.childAccountsExistWarning+=" ",l.childAccountsExistWarning+=t.maketext("Do not delete [asis,API] tokens a parent node uses to communicate with this server.");var c=new n;function d(e,n){var o,a=this,s=0;a.cancel=function(){e.dismiss("cancel")},a.buildTokenNameList=function(){s=n.length;var e=0,t=[];for(e=0;e<s;e++)t.push(n[e].name);return t},Array.isArray(n)&&n.length===l.allTokens.length?(a.prompt=t.maketext("Are you certain that you want to revoke all of your [asis,API] tokens?"),o=a.buildTokenNameList()):Array.isArray(n)?(a.prompt=t.maketext("Are you certain that you want to revoke [numf,_1] [asis,API] [numerate,_1,token,tokens]?",n.length),o=a.buildTokenNameList()):(a.prompt=t.maketext("Are you certain that you want to revoke the [asis,API] token, “[_1]”?",n.name),o=n.name),a.confirm=function(){return r.revokeToken(o).then((function(){if(Array.isArray(n))if(n.length===l.allTokens.length)i.success(t.maketext("You successfully revoked all of your [asis,API] tokens.")),c.clear(),l.allTokens=[];else{i.success(t.maketext("You successfully revoked [numf,_1] [asis,API] [numerate,_1,token,tokens].",n.length));for(var e=0;e<s;e++)c.remove(n[e])}else i.success(t.maketext("You successfully revoked the [asis,API] token “[_1]”.",n.name)),c.remove(n);l.render()})).catch((function(e){i.error(e)})).finally((function(){e.close()}))}}function u(){l.loading=!0;var n=new Date;n=n.getTime()/1e3;return e.all([r.getTokens(!0),r.getPrivileges(!0)]).then((function(e){var i=[],r=e[0];if(null!=r){for(var o in r)if(r.hasOwnProperty(o)){if(r[o].checked=!1,r[o].create_time_friendly=t.local_datetime(r[o].create_time,"datetime_format_medium"),r[o].expiresAtFriendly="",r[o].expires_at){var a=parseInt(r[o].expires_at,10);a<=n?r[o].expired=!0:a-n<86400&&(r[o].expiresSoon=!0),r[o].expiresAtFriendly=t.local_datetime(r[o].expires_at,"datetime_format_medium")}i.push(r[o])}c.load(i),l.allTokens=i,l.render()}})).catch((function(e){l.loadingError=!0,l.loadingErrorMessage=e})).finally((function(){l.loading=!1}))}c.setSearchFunction((function(e,t){return-1!==e.name.toLowerCase().indexOf(t.toLowerCase())})),c.setSort("create_time,name","desc"),l.meta=c.getMetadata(),l.filteredList=c.getList(),l.allTokens=[],l.render=function(){l.resetCheckAll(),l.filteredList=c.update(),l.paginationMessage=c.paginationMessage()},l.sortList=function(){l.render()},l.selectPage=function(){l.render()},l.selectPageSize=function(){l.render()},l.searchList=function(){l.render()},l.resetCheckAll=function(){l.allChecked=!1,l.toggleCheckAll(),l.checkedCount=0},l.getIndeterminateState=function(){return l.checkedCount>0&&!l.allChecked},l.toggleCheckAll=function(){if(0!==l.filteredList.length){for(var e=0,t=l.filteredList.length;e<t;e++)l.filteredList[e].checked=l.allChecked;l.allChecked?l.checkedCount=t:l.checkedCount=0}},l.syncCheckAll=function(e){e.checked?l.checkedCount++:l.checkedCount--,l.allChecked=l.checkedCount===l.filteredList.length},l.checkAll=function(){l.allChecked=!0,l.toggleCheckAll()},l.editToken=function(e){void 0===e?a.loadView("/edit"):a.loadView("/edit/"+e.name)},l.getSelectedTokens=function(){for(var e=[],t=0;t<l.filteredList.length;t++)l.filteredList[t].checked&&e.push(l.filteredList[t]);return e},l.getHumanReadableTime=function(e){return t.local_datetime(e,"datetime_format_medium")},d.$inject=["$uibModalInstance","token"],l.confirmRevokeToken=function(e){o.open({templateUrl:"confirm_token_revocation.html",controller:d,controllerAs:"ctrl",resolve:{token:function(){return e}}})},l.refreshList=function(){return l.filteredList=[],l.allTokens=[],u()},u()}])})),define("app/views/edit",["angular","lodash","cjt/util/locale","cjt/util/parse","cjt/validator/ip-validators","cjt/validator/validator-utils","cjt/util/table","uiBootstrap","cjt/decorators/growlDecorator","cjt/directives/alertList","cjt/directives/autoFocus","cjt/directives/triStateCheckbox","cjt/directives/timePicker","cjt/directives/datePicker","cjt/services/viewNavigationApi","cjt/directives/validationContainerDirective","cjt/directives/validationItemDirective"],(function(e,t,n,i,r,o){"use strict";function a(e){var t,i=/:/.test(e)?"ipv6":"ipv4";return/[/]/.test(e)?(t="ipv4"===i?r.methods.cidr4(e):function(e){var t=e.split("/"),i=t[1],o=t[0],a=r.methods.ipv6(o);return i||(a.isValid=!1,a.add("cidr",n.maketext("The [asis,IP] address prefix must include a ‘/’ followed by the prefix length."))),(i<1||i>128||!i)&&(a.isValid=!1,a.add("cidr",n.maketext("You must specify a valid prefix length between 1 and 128."))),a}(e)).isValid||(t.lookup.cidr?t.lookup.cidr.message=e+" - "+t.lookup.cidr.message:t.lookup["cidr-details"]&&(t.lookup["cidr-details"].message=e+" - "+t.lookup["cidr-details"].message),t.lookup[i]&&(t.lookup[i].message=e+" - "+t.lookup[i].message)):(t="ipv4"===i?r.methods.ipv4(e):r.methods.ipv6(e)).isValid||(t.lookup[i].message=e+" - "+t.lookup[i].message),t}var s=e.module("whm.apiTokens");return s.directive("ipv4OrCidr4List",(function(){return{restrict:"A",require:"ngModel",link:function(i,r,s,l){var c=r.controller("form");o.initializeExtendedReporting(l,c),l.$parsers.push((function(e){return(n=e)?n.split(/\r?\n|,|\s+/).map((function(e){return t.trim(e)})).filter((function(e){return!!e})):[];var n})),l.$formatters.push((function(e){return e.join("\r\n")})),l.$isEmpty=function(t){return e.isUndefined(t)||""===t||null===t||t!=t||t.length&&0===t.length},l.$validators.ipv4OrCidr4=function(e,t){if(["ipv6","ipv4","cidr","cidr-details","size-exceeded"].forEach((function(e){delete l.$error[e]})),l.$error_details.clear(),l.$isEmpty(e))return!0;if(e.length>100){var i=o.initializeValidationResult();return i.isValid=!1,i.add("size-exceeded",n.maketext("You have exceeded the limit of 100 whitelisted [asis,IP] addresses per token.")),l.$error["size-exceeded"]=!0,o.updateExtendedReportingList(l,c,["size-exceeded"],i),!1}for(var r=0,s=e.length;r<s;r++){var d=a(e[r]);if(!d.isValid){var u=["ipv6","ipv4","cidr","cidr-details"];return u.forEach((function(e){!!d.lookup[e]?l.$error[e]=!0:delete l.$error[e]})),o.updateExtendedReportingList(l,c,u,d),!1}}return!0},i.$watch(s.ngModel,(function(e){l.$validate()}))}}})),s.controller("editController",["$routeParams","growl","Tokens","viewNavigationApi","PAGE","growlMessages",function(e,r,o,a,s,l){var c=this,d=new Date;d.setHours(0),d.setMinutes(0),d.setSeconds(0,0),c.datePickerOptions={minDate:d},c.timePickerOptions={min:d},c.stringify=function(e){return JSON.stringify(e,void 0,2)};var u=new Date(d.getTime());u.setHours(23),u.setMinutes(59),u.setSeconds(59,999),u.setFullYear(u.getFullYear()+1),c.loading=!1,c.loadingError=!1,c.loadingErrorMessage="",c.showExtraHelp=!1,c.onToggleHelp=function(){c.showExtraHelp=!c.showExtraHelp},c.tokenAdded=!1,c.editingToken=!1,c.hasPrivs=!1,c.availableAcls={},c.aclsToEdit=[],c.aclsToSend={},c.newToken={name:"",originalName:"",token:"",acls:[],tokenExpires:!1,expiresAt:u,whitelistIps:[]};var p=i.parsePerlBoolean(s.is_dns_only);function f(e){var t=[],n={},i={},r={},o=0;e=void 0===e?{}:e;for(var a=0,l=s.ordered_categories.length;a<l;a++)if(void 0!==s.categories_metadata[s.ordered_categories[a]].ordered_subcategories)for(var c=0,d=(n={orderedSubcategories:s.categories_metadata[s.ordered_categories[a]].ordered_subcategories,name:s.ordered_categories[a],title:s.categories_metadata[s.ordered_categories[a]].title}).orderedSubcategories.length;c<d;c++){o=0;for(var u=0,f=(i={title:s.subcategories_metadata[n.orderedSubcategories[c]].title,orderedAcls:s.subcategories_metadata[n.orderedSubcategories[c]].ordered_acls,categoryTitle:n.title,categoryName:n.name,name:n.orderedSubcategories[c],acls:[]}).orderedAcls.length,g=0;u<f;u++)Object.prototype.hasOwnProperty.call(e,i.orderedAcls[u])&&(!p||s.acl_metadata[i.orderedAcls[u]]&&s.acl_metadata[i.orderedAcls[u]].dnsonly)&&(o++,r={name:i.orderedAcls[u],title:s.acl_metadata[i.orderedAcls[u]].title},s.acl_metadata[i.orderedAcls[u]].description&&(r.description=s.acl_metadata[i.orderedAcls[u]].description,r.description_is_warning=!!s.acl_metadata[i.orderedAcls[u]].description_is_warning),e[r.name]?(r.selected=!0,g++):r.selected=!1,i.acls.push(r));i.orderedAcls=void 0,i.selected=g===o,o>0&&t.push(i)}return t}c.aclWarningVisible=function(e){return"all"===e.name||(Object.prototype.hasOwnProperty.call(e,"is_warning_visible")||(e.is_warning_visible=!1),e.is_warning_visible)},c.toggleAclWarning=function(e){Object.prototype.hasOwnProperty.call(e,"is_warning_visible")?e.is_warning_visible=!e.is_warning_visible:e.is_warning_visible=!0},c.handleWarningIconKey=function(e,t){"keypress"===t.type&&(32!==t.charCode&&13!==t.charCode||(c.toggleAclWarning(e),t.preventDefault()))},c.toggleAcl=function(e){var t=c.aclsToSend.all&&"all"!==e.name,n="all"===e.name&&e.selected;e.selected?c.aclsToSend[e.name]=!0:delete c.aclsToSend[e.name],t&&!e.selected&&c.removeAllToken(),n&&c.selectAllSubcategories("Everything")},c.updateAclsToSend=function(e){for(var t=0,n=e.acls.length;t<n;t++)c.toggleAcl(e.acls[t])},c.selectAllSubcategories=function(e){for(var t=c.aclsToEdit,n=0,i=t.length;n<i;n++)if(t[n].title!==e)for(var r=0,o=t[n].acls.length;r<o;r++)t[n].acls[r].selected=!0,c.aclsToSend[t[n].acls[r].name]=!0},c.hasSelectedPrivs=function(){return c.hasPrivs&&Object.keys(c.aclsToSend).length>0},c.disableSave=function(e){return c.newToken.tokenExpires&&c.datePickerOptions.minDate>c.newToken.expiresAt||e.$pristine||e.$invalid||!c.hasSelectedPrivs()},c.dateValidator=function(e){c.newToken.tokenExpires&&c.newToken.expiresAt&&(c.newToken.expiresAt.setHours(23),c.newToken.expiresAt.setMinutes(59),c.newToken.expiresAt.setSeconds(59,999)),c.newToken.tokenExpires&&c.datePickerOptions.minDate>c.newToken.expiresAt&&(e.$invalid=!0,e.$valid=!1)},c.resetDate=function(){c.newToken.tokenExpires&&(c.newToken.expiresAt=u)},c.goHome=function(){a.loadView("/home")},c.newTokenExpiresMessage=function(e){var t=n.local_datetime(e.expiresAt,"datetime_format_medium");return n.maketext("This [asis,API] token will expire on [_1][comment,Bareword is a date].",t)},c.minimumIpRows=function(){return this.newToken.whitelistIps.length?this.newToken.whitelistIps.length:4},c.saveToken=function(e){if(!e.$invalid){c.newToken.acls=Object.keys(c.aclsToSend),c.newToken.tokenExpires&&(c.newToken.expiresAt.setHours(23),c.newToken.expiresAt.setMinutes(59),c.newToken.expiresAt.setSeconds(59,999));var i=c.newToken.tokenExpires?Math.floor(c.newToken.expiresAt/1e3):"0";return l.destroyAllMessages(),c.editingToken?o.updateToken(c.newToken.originalName,c.newToken.name,c.newToken.acls,i,c.newToken.whitelistIps).then((function(e){r.success(n.maketext("You successfully updated the [asis,API] token, “[_1]”.",e.data.name)),a.loadView("/home")})).catch((function(e){r.error(t.escape(e))})):o.createToken(c.newToken.name,c.newToken.acls,i,c.newToken.whitelistIps).then((function(e){c.newToken.token=e.data.token,c.tokenAdded=!0})).catch((function(e){r.error(t.escape(e))}))}},c.getAvailableAcls=function(){return o.getPrivileges(!1).then((function(e){null!=e&&(c.availableAcls=e)})).catch((function(e){r.error(t.escape(e))}))},c.removeAllToken=function(){c.aclsToEdit[c.aclsToEdit.length-1].acls[0].selected=!1,delete c.aclsToSend.all,r.info(n.maketext("The system deselected the “all” privilege."))},function(){c.loading=!0;var t=new Date;t=t.getTime()/1e3,Object.prototype.hasOwnProperty.call(e,"name")?o.getDetailsFor(e.name).then((function(i){if(c.newToken.name=e.name,c.newToken.originalName=e.name,c.editingToken=!0,c.newToken.expiresAtFriendly="",i.expires_at){c.newToken.expiresAt=new Date(1e3*i.expires_at),c.newToken.tokenExpires=!0;var r=parseInt(i.expires_at,10);r<=t?c.newToken.expired=!0:r-t<86400&&(c.newToken.expiresSoon=!0),c.newToken.expiresAtFriendly=n.local_datetime(r,"datetime_format_medium")}for(var o in c.newToken.whitelistIps=i.whitelist_ips||[],i.acls)if(i.acls[o]){if(p&&(!s.acl_metadata[o]||!s.acl_metadata[o].dnsonly))continue;c.aclsToSend[o]=!0}c.aclsToEdit=f(i.acls),c.hasPrivs=c.aclsToEdit.length>0})).catch((function(e){c.loadingError=!0,c.loadingErrorMessage=e})).finally((function(){c.loading=!1})):o.getPrivileges(!1).then((function(e){if(null!=e){for(var t in e)if(e[t]){if(p&&!s.acl_metadata[t].dnsonly)continue;c.aclsToSend[t]=!0}c.aclsToEdit=f(e),c.hasPrivs=c.aclsToEdit.length>0}})).catch((function(e){c.loadingError=!0,c.loadingErrorMessage=e})).finally((function(){c.loading=!1}))}()}])})),define("app/index",["angular","jquery","cjt/core","cjt/modules","ngRoute","ngAnimate","ngAria","uiBootstrap","app/services/api_tokens","app/filters"],(function(e){"use strict";return function(){return e.module("whm.apiTokens",["cjt2.config.whm.configProvider","ngRoute","ngAnimate","ngAria","ui.bootstrap","angular-growl","cjt2.whm","whm.apiTokens.apiCallService","whm.apiTokens.filters"]),require(["cjt/bootstrap","app/views/home","app/views/edit"],(function(t){var n=e.module("whm.apiTokens");n.value("PAGE",PAGE),n.config(["$routeProvider",function(e){e.when("/home",{controller:"homeController",controllerAs:"home",templateUrl:"api_tokens/views/home.ptt"}),e.when("/edit/:name?",{controller:"editController",controllerAs:"edit",templateUrl:"api_tokens/views/edit.ptt"}),e.otherwise({redirectTo:"/home"})}]),t(document,"whm.apiTokens")}))}}));