· 6 years ago · Oct 19, 2019, 09:36 AM
1!function() {
2 angular.module("WVS").run(["$templateCache", function(e) {
3 e.put("/templates/layout/shell.html", '<!DOCTYPE html><ax-error-presenter max-display-errors="5"></ax-error-presenter><div ax-spinner style="bottom:80px" class="fa-3x text-dark"></div><ax-product-activation></ax-product-activation><div ax-overlay="loadingTracker.active()" class="app-header navbar"><div class="navbar-header bg-black"><button ui-toggle-class="show" data-target=".navbar-collapse" class="pull-right visible-xs dk"><i class="fa fa-cog"></i></button><button ui-toggle-class="off-screen" data-target=".app-aside" ui-scroll-to="_top" ui-scroll-to-target=".cell.scrollable" class="pull-right visible-xs"><i class="fa fa-align-justify"></i></button><a ui-sref="app.dash" class="navbar-brand text-lt"><img ng-src="{{\'/images/acunetix-logo-\' + (app.asideFolded ? \'small\' : \'full\') + \'.png\'}}" ng-attr-alt="{{::\'Acunetix logo\'|translate}}"></a></div><div class="collapse pos-rlt navbar-collapse box-shadow bg-black"><div ng-if="licenseWarningMessageHtml" ng-bind-html="licenseWarningMessageHtml" class="navbar-text text-danger text-md"></div><ul class="nav navbar-nav navbar-right ax-user-nav"><li uib-dropdown><a uib-dropdown-toggle><span> {{authUser.displayName}} </span><b class="caret"></b></a><ul uib-dropdown-menu><li><a ui-sref="app.me">Profile</a></li><li class="divider"></li><li><a ng-click="signOut()">Logout</a></li></ul></li><li><a target="_blank" ng-href="{{globalHelpLink || \'http://www.acunetix.com/support\'}}" uib-tooltip="{{::\'Help and Support\'|translate}}"><i class="fa fa-fw fa-question-circle hidden-xs"></i><span class="visible-xs-inline">Help and Support</span></a></li><li uib-dropdown><a uib-dropdown-toggle uib-tooltip="{{notifications.tooltip|translate}}" class="ax-notifications-toggle"><i class="fa fa-fw fa-bell hidden-xs"></i><span class="visible-xs-inline">Notifications</span><span ng-if="notifications.count + manualIntervention.items.length > 0" class="badge badge-sm up bg-danger pull-right-xs">{{(notifications.count + manualIntervention.items.length)|axMaxDigits:2}}</span></a><div uib-dropdown-menu class="w-xl ax-notifications-popup scrollable"><div class="panel bg-white"><div class="panel-heading b-light bg-light"><strong ng-if="(notifications.count + manualIntervention.items.length) === 0">You have no notifications</strong><strong ng-if="(notifications.count + manualIntervention.items.length) > 0">You have notifications</strong><button ng-if="notifications.count > 0" ng-click="consumeAllNotifications()" class="btn btn-default btn-xs clearfix pull-right">Mark All as Read</button></div><div ng-if="notifications.count > 0 || manualIntervention.items.length > 0" class="list-group"><div ng-if="manualIntervention.items.length > 0" ng-repeat="manualItem in manualIntervention.items track by manualItem.uniqueKey" class="list-group-item"><div class="clear block m-b-none"><p class="block"><span class="m-r-xs">Manual Intervention required for</span><span uib-tooltip="{{manualItem.targetDescription}}" tooltip-placement="{{::\'left auto\'}}">{{manualItem.targetAddress}}</span></p><a ng-href="awvs://loginsequence/manual?url={{manualItem.data}}" ng-if="manualItem.data" ng-click="onMarkManualInterventionItem(manualItem)">Resolve this issue</a></div></div><div ng-if="updateInfo.status !== \'none\'" class="list-group-item"><span class="pull-left m-r thumb-sm"><img src="/images/acunetix-logo-small.png" ng-attr-alt="{{::\'Acunetix logo\'|translate}}"></span><span class="clear block m-b-none"><span translate>Version {{updateInfo.versionFull}} is available</span><br><small ng-if="updateInfo.status === \'updating\'" class="text-muted"><i class="fa fa-fw fa-spin fa-spinner m-r-sm"></i><span>The service is being updated...</span></small><small ng-if="updateInfo.status === \'waiting_for_scans\'" class="text-muted">Update is awaiting for scans to finish...</small><button ng-if="updateInfo.status === \'waiting_for_user\'" ng-click="onEnableSystemUpdate()" class="btn btn-danger btn-xs">Update</button><small ng-if="updateInfo.status === \'restarting\'" class="text-muted">The service is restarting...</small></span></div><div ng-repeat="notification in notifications.items track by notification.eventId" class="list-group-item"><div class="clear block m-b-none"><a ax-event-resource-link="notification" class="text-ellipsis m-r-sm"><span class="ax-notification-event-name"><span>{{notification.eventTypeId|axEventName}}</span><span uib-tooltip="{{notification.eventData.workerDecription}}" tooltip-placement="{{::\'left auto\'}}" tooltip-enable="notification.eventData.workerDecription" tooltip-popup-delay="200" ng-if="notification.eventData.workerDecription && (notification.eventTypeId >= 800 && notification.eventTypeId <= 801)" translate class="m-l-xs text-muted">{{notification.eventData.endpoint}}</span><span uib-tooltip="{{notification.eventData.targetDesc.description}}" tooltip-placement="{{::\'left auto\'}}" tooltip-enable="notification.eventData.targetDesc.description" tooltip-popup-delay="200" ng-if="notification.eventData.targetDesc.address && (notification.eventTypeId >= 400 && notification.eventTypeId <= 442)" translate class="m-l-xs text-muted">for {{notification.eventData.targetDesc.address}}</span></span><br><small class="text-muted">{{notification.created|date:\'medium\'}}</small></a></div><button ng-click="consumeNotification(notification)" uib-tooltip="{{::\'Mark as read\'|translate}}" tooltip-placement="{{\'left\'}}" class="btn btn-link btn-icon pos-abt ax-consume-notification"><i class="fa fa-fw"></i></button></div></div></div></div></li></ul></div></div><div class="app-aside hidden-xs bg-black"><div class="aside-wrap"><div class="navi-wrap"><nav ui-nav class="navi clearfix"><ul class="nav"><li class="hidden-xs"><a ng-click="toggleAside()" class="ax-aside-toggle"><i ng-class="app.asideFolded ? \'fa-indent\' : \'fa-dedent\'" class="fa fa-fw"></i><span> </span></a></li></ul><ul class="nav"><li ng-repeat="section in ::app.sections track by section.name" ng-class="{active: currentSection === section.name}"><a ng-click="navigateTo(section.state, section.stateParams)" uib-tooltip="{{::section.title|translate}}" tooltip-placement="{{::\'right\'}}" tooltip-enable="app.asideFolded"><i ng-class="section.icon" class="fa fa-fw"></i><span>{{::section.title|translate}}</span></a></li></ul><ul style="position: absolute; bottom: 0; width: 100%" class="nav"><li><a href="https://www.acunetix.com" target="_blank" class="text-muted">© 2019<span ng-if="!app.asideFolded"> Acunetix Ltd</span><li class="hide"><a href>{{globalHelpLink || \'http://www.acunetix.com/support\'}}</a></li></a></li></ul></nav></div></div></div><div class="app-content"><div ui-view class="app-content-body app-content-full"></div></div><div style="right: 0; top: 180px; bottom: 0; width: 450px; height: auto; overflow-x: hidden; opacity: .8; z-index:31000; pointer-events: none" class="pos-abt debug-user-info hide"><div style="font-size: 11px; white-space: pre-wrap;" class="bg-black-opacity text-white font-fixed">{{currentUser|json:2}}</div></div>'),
4 e.put("/templates/reports/list-reports.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">Status</label><ui-select multiple="multiple" ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.statusList|filter:{text:$select.search}"><span>{{option.text}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Report</label><ui-select ng-model="searchFilters.reportTemplate" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.name|translate}}</ui-select-match><ui-select-choices repeat="option.templateId as option in searchFilters.reportTemplateList"><span>{{option.name}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Report Type</label><ui-select ng-model="searchFilters.reportSource" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in searchFilters.reportSourceList"><span>{{option.text}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Created Between</label><div class="input-group"><span class="input-group-addon w-xxs">Start</span><input type="text" readonly="readonly" ng-model="searchFilters.createdStartDate" uib-datepicker-popup="d MMMM yyyy" popup-placement="auto bottom-right" is-open="searchFilters.createdStartDateCalendarVisible" datepicker-options="createdStartDateDatePickerOptions" show-button-bar="false" class="form-control"><div class="input-group-btn"><button ng-click="searchFilters.createdStartDateCalendarVisible = !searchFilters.createdStartDateCalendarVisible" class="btn btn-default"><i class="fa fa-calendar"></i></button></div></div></div><div class="form-group"><div class="input-group"><span class="input-group-addon w-xxs">End</span><input type="text" readonly="readonly" ng-model="searchFilters.createdEndDate" uib-datepicker-popup="d MMMM yyyy" popup-placement="auto bottom-right" is-open="searchFilters.createdEndDateCalendarVisible" datepicker-options="createdEndDateDatePickerOptions" show-button-bar="false" class="form-control"><div class="input-group-btn"><button ng-click="searchFilters.createdEndDateCalendarVisible = !searchFilters.createdEndDateCalendarVisible" class="btn btn-default"><i class="fa fa-calendar"></i></button></div></div></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-dropdown class="btn-group"><button uib-dropdown-toggle class="btn btn-default"><span class="m-r-xs">New Report</span><i class="caret"></i></button><ul uib-dropdown-menu><li ng-class="{disabled: pageState.noTargetsInSystem}" uib-tooltip="{{::\'No targets configured\'}}" tooltip-enable="pageState.noTargetsInSystem"><a ng-if="!pageState.noTargetsInSystem" ng-click="onGenerateReport(\'all_vulnerabilities\')">All Vulnerabilities Report</a><a ng-href ng-if="pageState.noTargetsInSystem">All Vulnerabilities Report</a></li><li ng-class="{disabled: pageState.noScansInSystem}" uib-tooltip="{{::\'No scans available\'}}" tooltip-enable="pageState.noScansInSystem"><a ng-if="!pageState.noScansInSystem" ui-sref="app.list_scans({gr:1,returnUrl:currentUrl()})">Scan Report</a><a ng-href ng-if="pageState.noScansInSystem">Scan Report</a></li><li ng-class="{disabled: pageState.noTargetsInSystem}" uib-tooltip="{{::\'No targets configured\'}}" tooltip-enable="pageState.noTargetsInSystem"><a ng-if="!pageState.noTargetsInSystem" ui-sref="app.list_targets({gr:1,returnUrl:currentUrl()})">Target Report</a><a ng-href ng-if="pageState.noTargetsInSystem">Target Report</a></li></ul></div><div uib-tooltip="{{::\'Please select at least one report\'|translate}}" tooltip-enable="selectedItems().length === 0" class="btn-group"><button ng-disabled="selectedItems().length === 0" ng-click="onDeleteSelectedReports()" class="btn btn-default">{{\'Delete Selected\'|translate}}</button></div><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="pull-right btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>Filter</span></button><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><p ng-if="pageState.noTargetsInSystem && pageState.noReportsInSystem && !loadingTracker.active()"><strong class="m-r-xs">No Targets created yet.</strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">Create new Target</a></p><div ax-no-animate ng-hide="pageState.noTargetsInSystem && pageState.noReportsInSystem" ui-grid="reportList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid w-full h-full"></div></div></div></div></div></div></div>'),
5 e.put("/templates/account/activity-log/activity-log.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">{{::\'Severity\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.severityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'Event Type\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.eventType" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.groupName + \' \' + $item.typeName|translate}}</ui-select-match><ui-select-choices group-by="\'groupName\'" order-by="\'typeName\'" repeat="option.typeId as option in searchFilters.eventTypeList|filter:{$:$select.search}"><span>{{option.typeName|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'Resource Type\'|translate}}</label><ui-select ng-model="searchFilters.resourceType" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.resourceTypeList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="pull-right btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>{{::\'Filter\'|translate}}</span></button><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full bg-white-only"><ax-events search-query="searchFilters.searchQuery" layout-save-key="list-events" class="w-full h-full"></ax-events></div></div></div></div></div></div>'),
6 e.put("/templates/account/activate-license/activate.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" ng-if="!currentUser.isChildAccount" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><div uib-tooltip="{{saveActionStatusMessage()|translate}}" tooltip-enable="profileForm.$invalid || licenseForm.form.$invalid" class="btn-group"><button ng-disabled="profileForm.$invalid || licenseForm.form.$invalid" ng-click="onActivate()" class="btn btn-default">Activate</button></div><div class="btn-group"><button ng-click="onSetProxy()" class="btn btn-default">Proxy Settings</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper wrapper-lg ax-page-content"><div class="box-container"><div class="panel panel-default m-b-md"><div class="panel-heading"><div class="panel-title clearfix"><span>Profile</span></div></div><div class="panel-body"><form name="profileForm" novalidate class="form-horizontal"><div class="form-group"><label for="profileForm_companyEmail" class="control-label col-md-3">Company Email</label><div class="col-md-6"><input id="profileForm_companyEmail" readonly="readonly" value="{{userProfile.email}}" class="form-control"></div></div><div ng-class="{\'has-error\': profileForm.firstName.$invalid && profileForm.firstName.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_firstName" class="control-label col-md-3">First Name</label><div class="col-md-6"><input id="profileForm_firstName" name="firstName" type="text" ng-model="userProfile.firstName" required class="form-control"><div ng-messages="profileForm.firstName.$error" ng-if="profileForm.firstName.$touched && profileForm.firstName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': profileForm.lastName.$invalid && profileForm.lastName.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_lastName" class="control-label col-md-3">Last Name</label><div class="col-md-6"><input id="profileForm_lastName" name="lastName" type="text" ng-model="userProfile.lastName" required class="form-control"><div ng-messages="profileForm.lastName.$error" ng-if="profileForm.lastName.$touched && profileForm.lastName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="!currentUser.isChildAccount" ng-class="{\'has-error\': profileForm.companyName.$invalid && profileForm.companyName.$touched}" class="form-group"><label for="profileForm_companyName" class="control-label col-md-3">Company Name</label><div class="col-md-6"><input id="profileForm_companyName" type="text" name="companyName" ng-model="userProfile.companyName" required class="form-control"><div ng-messages="profileForm.companyName.$error" ng-if="profileForm.companyName.$touched && profileForm.companyName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="!currentUser.isChildAccount" ng-class="{\'has-error\': profileForm.companyWebsite.$invalid && profileForm.companyWebsite.$touched}" class="form-group"><label for="profileForm_companyWebsite" class="control-label col-md-3">Company Website</label><div class="col-md-6"><input id="profileForm_companyWebsite" type="url" name="companyWebsite" ng-model="userProfile.companyWebsite" required class="form-control"><div ng-messages="profileForm.companyWebsite.$error" ng-if="profileForm.companyWebsite.$touched && profileForm.companyWebsite.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="url">Please enter a valid URL (e.g. http://example.com)</span></div></div></div><div ng-class="{\'has-error\': profileForm.contactPhone.$invalid && profileForm.contactPhone.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_contactPhone" class="control-label col-md-3">Phone</label><div class="col-md-6"><input id="profileForm_contactPhone" type="phone" name="contactPhone" ng-model="userProfile.contactPhone" phone-number="userProfile.contactPhone" required class="form-control"><div ng-messages="profileForm.contactPhone.$error" ng-if="profileForm.contactPhone.$touched && profileForm.contactPhone.$invalid" class="help-block"><span ng-message="phoneNumber">Please enter a valid phone number</span><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': profileForm.countryCode.$invalid && profileForm.countryCode.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_countryCode" class="control-label col-md-3">Country</label><div class="col-md-6"><ui-select id="profileForm_countryCode" name="countryCode" ng-required="true" ng-model="userProfile.countryCode"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="false">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="countryOption.code as countryOption in countries|filter:{name:$select.search} track by countryOption.code"><span>{{countryOption.name}}</span></ui-select-choices></ui-select></div></div><div ng-if="userProfile.role !== \'master\'" class="form-group"><label for="profileForm_role" class="control-label col-md-3">Role</label><div class="col-md-6"><input id="profileForm_role" readonly="readonly" value="{{userProfile.role|axUserRoleName}}" class="form-control"></div></div><div ng-if="!currentUser.isChildAccount" class="form-group"><div class="col-md-6 col-md-offset-3"><label class="checkbox i-checks i-checks-sm"><input type="checkbox" ng-model="userProfile.notifications.monthlyStatus"><i></i>Subscribe to monthly status email</label></div></div></form></div></div><div ng-if="!currentUser.isChildAccount"><div class="panel panel-default"><div class="panel-heading"><div class="panel-title clearfix"><div class="pull-left">License</div></div></div><div class="panel-body"><form name="licenseForm.form" novalidate class="form-horizontal"><div ng-class="{\'has-error\': licenseForm.form.licenseKey.$invalid}" class="form-group"><label for="licenseForm_licensekey" class="control-label col-md-3">License Key</label><div class="col-md-6"><input id="licenseForm_licensekey" name="licenseKey" type="text" ng-model="userProfile.license.licenseKey" required class="form-control"><div ng-messages="licenseForm.form.licenseKey.$error" ng-if="licenseForm.form.licenseKey.$touched && licenseForm.form.licenseKey.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><div class="col-md-6 col-md-offset-3"><label class="checkbox i-checks i-checks-sm"><input type="checkbox" ng-model="userProfile.acumonitor"><i></i>Register with AcuMonitor Service</label></div></div></form></div></div></div></div></div></div></div></div></div></div>'),
7 e.put("/templates/account/confirm-password-reset/confirm-password-reset.html", "<!DOCTYPE html>"),
8 e.put("/templates/account/confirm-change-email/confirm-change-email.html", "<!DOCTYPE html>"),
9 e.put("/templates/account/dash/dash.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><div class="ax-dash-container"><div class="panel no-border ax-dash-item ax-dash-item--3x ax-vulns-by-criticality"><div class="panel-heading b-b hide"><div class="panel-title">{{::\'Vulnerabilities by Severity and Criticality\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.vulnsByCriticality.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div class="ax-vulns-by-criticality__content"><div ng-if="stats.vulnsByCriticality.data" class="ax-vulns-by-criticality__item"><nvd3 options="stats.vulnsByCriticality.options.high" data="stats.vulnsByCriticality.data.high"></nvd3></div><div ng-if="stats.vulnsByCriticality.data" class="ax-vulns-by-criticality__item"><nvd3 options="stats.vulnsByCriticality.options.medium" data="stats.vulnsByCriticality.data.medium"></nvd3></div><div ng-if="stats.vulnsByCriticality.data" class="ax-vulns-by-criticality__item"><nvd3 options="stats.vulnsByCriticality.options.low" data="stats.vulnsByCriticality.data.low"></nvd3></div></div></div></div><div class="panel no-border ax-dash-item ax-dash-item--3x"><div class="panel-body"><div class="ax-general-stats"><div ng-if="stats.general" ng-repeat="item in stats.general track by item.name" ax-no-animate class="ax-general-stats__item"><h4 class="text-muted text-center m-t-none m-b-xm ax-general-stats__name">{{item.name|translate}}</h4><h2 class="text-center m-b-none m-t-none ax-general-stats__value"><a ui-sref="{{item.state}}">{{item.value|number:0}}</a></h2></div></div></div></div><div class="panel no-border ax-dash-item ax-dash-item--2v5x"><div class="panel-heading b-b"><div class="panel-title">{{::\'Most Vulnerable Targets\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.mostVulnTargets.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div ng-if="!loadingIndicator.active() && stats.noTargets"><span class="m-r-sm">{{::\'No targets defined yet\'|translate}}</span><a ng-if="currentUser.permissions.addTarget" ng-click="onCreateTarget()">{{::\'Create\'|translate}}</a></div><div ng-if="!loadingIndicator.active() && stats.mostVulnTargets.data.length === 0 && !stats.noTargets"><span>{{::\'No vulnerable targets identified yet\'|translate}}</span></div><table ng-if="stats.mostVulnTargets.data" class="table table-condensed table-bordered"><tbody><tr ng-repeat="entity in stats.mostVulnTargets.data track by entity.targetId" ax-no-animate><td><div style="width: calc(100% - 40px)" class="text-ellipsis"><span ng-if="!currentUser.permissions.targetConfig">{{entity.address}}</span><a ng-if="currentUser.permissions.targetConfig" ui-sref="app.target_config({targetId: entity.targetId})">{{entity.address}}</a></div></td><td style="width: 40px"><div class="text-right"><ax-vuln-counters target-id="entity.targetId" vulns="entity.vulns" high-severity-only="true" class="m-b-none"></ax-vuln-counters></div></td></tr></tbody></table></div></div><div class="panel no-border ax-dash-item ax-dash-item--2v5x"><div class="panel-heading b-b"><div class="panel-title">{{::\'Top Vulnerabilities\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.topVulns.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div ng-if="!loadingIndicator.active() && stats.noTargets"><span class="m-r-sm">{{::\'No targets defined yet\'|translate}}</span><a ng-if="currentUser.permissions.addTarget" ng-click="onCreateTarget()">{{::\'Create\'|translate}}</a></div><div ng-if="!loadingIndicator.active() && stats.topVulns.data.length === 0 && !stats.noTargets"><span>{{::\'No vulnerabilities identified yet\'|translate}}</span></div><table ng-if="stats.topVulns.data" class="table table-condensed table-bordered"><tbody><tr ng-repeat="entity in stats.topVulns.data track by entity.name" ax-no-animate><td><div style="width: calc(100% - 30px)" class="text-ellipsis ax-top-vulns-address">{{entity.name}}</div></td><td style="width: 30px"><div class="text-right"><a ui-sref="app.list_vulns({type: entity.vulnTypeId, returnUrl: currentUrl()})">{{entity.count|number:0}}</a></div></td></tr></tbody></table></div></div><div style="background: transparent" ng-if="currentUser.features.trending_graphs" class="panel no-border ax-dash-item ax-dash-item--3x"><div style="padding-right: 0" class="panel-heading b-b"><div class="panel-title"><button ng-click="toggleTrends()" class="pull-right btn btn-dark btn-sm"><span ng-if="!stats.showTrends">{{\'Show Trends\'|translate}}</span><span ng-if="stats.showTrends">{{\'Hide Trends\'|translate}}</span></button><div class="clearfix"></div></div></div></div><div ng-if="currentUser.features.trending_graphs && stats.showTrends" class="panel no-border ax-dash-item ax-dash-item--2x"><div class="panel-heading b-b"><div class="panel-title">{{::\'Open vulnerabilities for the past 12 months\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.openVulnsTrend.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div ng-if="stats.openVulnsTrend.data"><nvd3 options="stats.openVulnsTrend.options" data="stats.openVulnsTrend.data"></nvd3></div></div></div><div ng-if="currentUser.features.trending_graphs && stats.showTrends" class="panel no-border ax-dash-item ax-dash-item--2x"><div class="panel-heading b-b"><div class="panel-title">{{::\'Average days to remediate\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.avgRemediationTime.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div ng-if="stats.avgRemediationTime.data"><nvd3 options="stats.avgRemediationTime.options" data="stats.avgRemediationTime.data"></nvd3></div></div></div><div ng-if="currentUser.features.trending_graphs && stats.showTrends" class="panel no-border ax-dash-item ax-dash-item--2x"><div class="panel-heading b-b"><div class="panel-title">{{::\'Vulnerabilities found in the last 12 months\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.newVulnsTrending.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div ng-if="stats.newVulnsTrending.data"><nvd3 options="stats.newVulnsTrending.options" data="stats.newVulnsTrending.data"></nvd3></div></div></div><div ng-if="currentUser.features.trending_graphs && stats.showTrends" class="panel no-border ax-dash-item ax-dash-item--2x"><div class="panel-heading b-b"><div class="panel-title">{{::\'Avg vulnerabilities age\'|translate}}</div></div><div class="panel-body"><div ng-if="stats.avgVulnAgeTrend.data === null"><h5><i class="fa fa-spin fa-spinner m-r-sm"></i>{{::\'Loading...\'|translate}}</h5></div><div ng-if="stats.avgVulnAgeTrend.data"><nvd3 options="stats.avgVulnAgeTrend.options" data="stats.avgVulnAgeTrend.data"></nvd3></div></div></div></div></div></div></div></div></div></div>'),
10 e.put("/templates/account/login/login.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="ax-login-page"><div class="ax-login-page__body b box-shadow"><div class="ax-login-page__top bg-white-only clearfix b"><img src="/images/acunetix-left.png" class="pull-left"><img src="/images/web-application-security.png" class="pull-right hidden-xs"></div><div class="ax-login-page__content bg-white-only wrapper-sm"><div class="ax-login-page__form"><form name="loginForm" novalidate ng-submit="signIn()" class="ax-login-form"><uib-alert type="danger" role="alert" closeable="false" ng-if="loginError"><span ng-if="!accountDisabled">{{loginError}}</span><span ng-if="accountDisabled">Your account has been disabled. Please contact <a href="mailto:support@acunetix.com" target="_blank">support</a>.</span></uib-alert><div class="form-group"><h3 class="m-t-md m-b-lg text-center">Sign In</h3></div><div ng-class="{\'has-error\': loginForm.email.$invalid && loginForm.email.$touched}" class="form-group"><label class="hidden control-label">Email</label><input type="email" name="email" ng-model="credentials.email" required autofocus aria-autocomplete="off" autocomplete="off" placeholder="{{::\'Email\'|translate}}" class="form-control"><div ng-messages="loginForm.email.$error" ng-if="loginForm.email.$touched && loginForm.email.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="email">Please enter a proper email address</span></div></div><div ng-class="{\'has-error\': loginForm.password.$invalid && loginForm.password.$touched}" class="form-group"><label class="hidden control-label">Password</label><input type="password" name="password" ng-model="credentials.password" required aria-autocomplete="off" autocomplete="off" placeholder="{{::\'Password\'|translate}}" class="form-control"><div ng-messages="loginForm.password.$error" ng-if="loginForm.password.$touched && loginForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div><div class="m-t-sm m-b-sm clearfix"><div class="pull-left"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="credentials.rememberMe"><i></i>Keep me signed in</label></div></div><button type="submit" ng-disabled="loginForm.$invalid || loadingTracker.active()" class="btn btn-dark m-t-sm"><span ng-if="loadingTracker.active()" class="m-r-xs"><i class="fa fa-spinner fa-spin"></i></span><span>Login</span></button></form></div></div><div class="ax-login-page__footer"><div class="copyright small">Copyright © 2019 Acunetix Ltd.</div><a href="https://www.acunetix.com/" target="_blank" class="site-link text-white small">www.acunetix.com</a></div></div></div>'),
11 e.put("/templates/account/profile/profile.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" ng-if="!currentUser.isChildAccount" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><div uib-tooltip="{{saveActionStatusMessage()|translate}}" tooltip-enable="!hasChanges() || profileForm.$invalid" class="btn-group"><button ng-disabled="!hasChanges() || profileForm.$invalid || accountLockoutFrom.$invalid" ng-click="onUpdate()" class="btn btn-default">Save</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper wrapper-lg ax-page-content"><div class="box-container"><div class="panel panel-default m-b-md"><div class="panel-heading"><div class="panel-title clearfix"><span>Profile</span></div></div><div class="panel-body"><form name="profileForm" novalidate class="form-horizontal"><div class="form-group"><label for="profileForm_companyEmail" class="control-label col-md-3">Company Email</label><div class="col-md-6"><input id="profileForm_companyEmail" readonly="readonly" value="{{userProfile.email}}" class="form-control"></div></div><div ng-class="{\'has-error\': profileForm.firstName.$invalid && profileForm.firstName.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_firstName" class="control-label col-md-3">First Name</label><div class="col-md-6"><input id="profileForm_firstName" name="firstName" type="text" ng-model="userProfile.firstName" required class="form-control"><div ng-messages="profileForm.firstName.$error" ng-if="profileForm.firstName.$touched && profileForm.firstName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': profileForm.lastName.$invalid && profileForm.lastName.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_lastName" class="control-label col-md-3">Last Name</label><div class="col-md-6"><input id="profileForm_lastName" name="lastName" type="text" ng-model="userProfile.lastName" required class="form-control"><div ng-messages="profileForm.lastName.$error" ng-if="profileForm.lastName.$touched && profileForm.lastName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="!currentUser.isChildAccount" ng-class="{\'has-error\': profileForm.companyName.$invalid && profileForm.companyName.$touched}" class="form-group"><label for="profileForm_companyName" class="control-label col-md-3">Company Name</label><div class="col-md-6"><input id="profileForm_companyName" type="text" name="companyName" ng-model="userProfile.companyName" required class="form-control"><div ng-messages="profileForm.companyName.$error" ng-if="profileForm.companyName.$touched && profileForm.companyName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="!currentUser.isChildAccount" ng-class="{\'has-error\': profileForm.companyWebsite.$invalid && profileForm.companyWebsite.$touched}" class="form-group"><label for="profileForm_companyWebsite" class="control-label col-md-3">Company Website</label><div class="col-md-6"><input id="profileForm_companyWebsite" type="url" name="companyWebsite" ng-model="userProfile.companyWebsite" required class="form-control"><div ng-messages="profileForm.companyWebsite.$error" ng-if="profileForm.companyWebsite.$touched && profileForm.companyWebsite.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="url">Please enter a valid URL (e.g. http://example.com)</span></div></div></div><div ng-class="{\'has-error\': profileForm.contactPhone.$invalid && profileForm.contactPhone.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_contactPhone" class="control-label col-md-3">Phone</label><div class="col-md-6"><input id="profileForm_contactPhone" type="phone" name="contactPhone" ng-model="userProfile.contactPhone" phone-number="userProfile.contactPhone" required class="form-control"><div ng-messages="profileForm.contactPhone.$error" ng-if="profileForm.contactPhone.$touched && profileForm.contactPhone.$invalid" class="help-block"><span ng-message="phoneNumber">Please enter a valid phone number</span><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': profileForm.countryCode.$invalid && profileForm.countryCode.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_countryCode" class="control-label col-md-3">Country</label><div class="col-md-6"><ui-select id="profileForm_countryCode" name="countryCode" ng-required="true" ng-model="userProfile.countryCode"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="false">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="countryOption.code as countryOption in countries|filter:{name:$select.search} track by countryOption.code"><span>{{countryOption.name}}</span></ui-select-choices></ui-select></div></div><div ng-if="userProfile.role !== \'master\'" class="form-group"><label for="profileForm_role" class="control-label col-md-3">Role</label><div class="col-md-6"><input id="profileForm_role" readonly="readonly" value="{{userProfile.role|axUserRoleName}}" class="form-control"></div></div><div ng-if="!currentUser.isChildAccount" class="form-group"><div class="col-md-6 col-md-offset-3"><label class="checkbox i-checks i-checks-sm"><input type="checkbox" ng-model="userProfile.notifications.monthlyStatus"><i></i>Subscribe to monthly status email</label></div></div></form></div></div><div ng-if="!currentUser.isChildAccount"><div ng-if="licenseInfo" class="panel panel-default"><div class="panel-heading"><div class="panel-title clearfix"><div class="pull-left">License</div></div></div><div class="panel-body"><ax-license-info license-info="licenseInfo" on-update-license="onUpdateLicense()" on-toggle-acumonitor="onToggleAcumonitor(event)"></ax-license-info></div></div><div ng-if="currentUser.features.apikey && apiKeyInfo._y" class="panel panel-default"><div class="panel-heading"><div class="panel-title"><span>API Key</span></div></div><div class="panel-body"><div class="form-horizontal"><div ng-if="apiKeyInfo.disabled"><uib-alert type="danger" role="alert" closeable="false" translate><span>Please contact <a target="_blank" href="mailto:support@acunetix.com">support</a> to enable this feature.</span></uib-alert></div><div ng-if="!apiKeyInfo.disabled"><div ng-if="!apiKeyInfo.apiKey"><p>You don\'t have an API key set.</p><div class="m-t-md"><button type="button" ng-click="onGenerateApiKey()" class="btn btn-default m-r-xs">Generate Api Key</button></div></div><div ng-if="apiKeyInfo.apiKey"><div class="form-group"><label class="control-label col-md-3">API Key</label><div class="col-md-6"><div ax-no-animate class="input-group"><input type="text" readonly="readonly" ng-if="!apiKeyInfo.visible" value="{{::\'Hidden for security purposes\'|translate}}" class="form-control"><input type="text" readonly="readonly" ng-model="apiKeyInfo.apiKey" ng-if="apiKeyInfo.visible" class="form-control"><div class="input-group-btn"><button type="button" ngclipboard ngclipboard-success="onClipboardSuccess(e)" ngclipboard-error="onClipboardError(e)" data-clipboard-text="{{apiKeyInfo.apiKey}}" ng-mouseleave="disableClipboardToolTip()" uib-tooltip="{{apiKeyInfo.clipboardTooltipText}}" tooltip-trigger="\'none\'" tooltip-is-open="apiKeyInfo.clipboardTooltipEnabled" class="btn btn-default"><i class="fa fa-clipboard m-r-xs"></i><span>Copy</span></button><button ng-click="onToggleApiKeyVisibility()" class="btn btn-default">{{apiKeyInfo.visible ? \'Hide\' : \'Show\'}}</button></div></div></div></div><div class="form-group"><div class="col-md-6 col-md-offset-3"><button type="button" ng-click="onGenerateApiKey()" class="btn btn-default m-r-xs">Generate New Api Key</button><button type="button" ng-click="onDeleteApiKey()" class="btn btn-danger">Delete</button></div></div><div style="text-align: center;"><a href="https://www.acunetix.com/company/contact/" target="_blank">Contact your Acunetix Sales Representative</a><span> for more information and API documentation</span></div></div></div></div></div></div></div><div class="panel panel-default m-b-md"><div class="panel-heading"><div class="panel-title clearfix"><span>Security Settings</span></div></div><div class="panel-body"><form name="accountSecurityForm" novalidate class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Two Factor Authentication</label><div class="col-md-6"><div class="checkbox"><label ng-class="{\'bg-success\': securitySettings.totpEnabled}" style="padding-left:0" class="i-switch"><input type="checkbox" ng-click="onToggleTOTP($event)" ng-model="securitySettings.totpEnabled"><i></i></label></div></div></div><div ng-if="!currentUser.isChildAccount"><div class="form-group"><label class="control-label col-md-3">Password History</label><div class="col-md-6"><label class="checkbox i-checks i-checks-sm"><input name="passwordHistory" type="checkbox" ng-model="securitySettings.passwordHistory" ng-true-value="{{defaultPasswordHistorySize}}" ng-false-value="{{0}}"><i></i>Prevent last {{defaultPasswordHistorySize}} password to be reused</label></div></div><div class="form-group"><label class="control-label col-md-3">Password Expires</label><div class="col-md-6"><label class="checkbox i-checks i-checks-sm"><input name="passwordMaxAge" type="checkbox" ng-model="securitySettings.passwordMaxAge" ng-true-value="{{defaultPasswordAge}}" ng-false-value="{{0}}"><i></i>Enforce changing of password after {{defaultPasswordAge}} days</label></div></div></div></form><form name="accountLockoutForm" novalidate ng-show="!currentUser.isChildAccount" class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Account Lockout</label><div class="col-md-6"><div class="checkbox"><label ng-class="{\'bg-success\': accountLockoutEnabled}" style="padding-left:0" class="i-switch"><input type="checkbox" ng-model="accountLockoutEnabled"><i></i></label></div></div></div><div ng-if="accountLockoutEnabled"><div ng-class="{\'has-error\': accountLockoutForm.maxConsecutiveLoginFailures.$invalid && accountLockoutForm.maxConsecutiveLoginFailures.$touched}" class="form-group"><label class="control-label col-md-3">Maximum Consecutive Login Failures</label><div class="col-md-3"><input type="number" min="0" max="50" name="maxConsecutiveLoginFailures" ng-model="securitySettings.accountLockout.maxConsecutiveLoginFailures" required class="form-control"><div ng-messages="accountLockoutForm.maxConsecutiveLoginFailures.$error" ng-if="accountLockoutForm.maxConsecutiveLoginFailures.$touched && accountLockoutForm.maxConsecutiveLoginFailures.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 50</span></div></div></div><div ng-class="{\'has-error\': accountLockoutForm.timeWindow.$invalid && accountLockoutForm.timeWindow.$touched}" class="form-group"><label class="control-label col-md-3">Time Window (minutes)</label><div class="col-md-3"><input type="number" min="0" max="60" name="timeWindow" ng-model="securitySettings.accountLockout.timeWindow" required class="form-control"><div ng-messages="accountLockoutForm.timeWindow.$error" ng-if="accountLockoutForm.timeWindow.$touched && accountLockoutForm.timeWindow.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 60</span></div></div></div><div ng-class="{\'has-error\': accountLockoutForm.lockoutTime.$invalid && accountLockoutForm.lockoutTime.$touched}" class="form-group"><label class="control-label col-md-3">Lockout Time (minutes)</label><div class="col-md-3"><input type="number" min="0" max="1440" name="lockoutTime" ng-model="securitySettings.accountLockout.lockoutTime" required class="form-control"><div ng-messages="accountLockoutForm.lockoutTime.$error" ng-if="accountLockoutForm.lockoutTime.$touched && accountLockoutForm.lockoutTime.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 1440</span></div></div></div></div></form></div></div></div></div></div></div></div></div></div>'),
12 e.put("/templates/account/reset-password/reset-password.html", "<!DOCTYPE html>"),
13 e.put("/templates/account/totp-reset/totp-reset.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()" class="axTOTPResetPage"><div class="box-container wrapper"><div class="row"><div class="col-sm-6 col-sm-offset-3"><div class="bg-white"><div class="axTOTPResetPage__header b-b clearfix"><img src="/images/acunetix-left.png" class="pull-left"><img src="/images/web-application-security.png" class="pull-right hidden-xs"></div><div class="wrapper"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span>{{$ctrl.error}}</span></uib-alert><h3 ng-if="!$ctrl.confirmed && !$ctrl.linkExpired" class="m-t-md m-b-lg axTOTPResetPage__title text-center">Disable 2FA</h3><div ng-if="$ctrl.confirmed"><p>Your 2FA has been disabled</p><a ui-sref="login()" ng-if="$ctrl.confirmed" class="btn btn-dark">Continue to login page</a></div><div ng-if="$ctrl.linkExpired"><ul class="list-inline m-b-none"><li><a ui-sref="login()" class="btn btn-dark">Login</a></li></ul></div><fieldset ng-disabled="$ctrl.loadingTracker.active()" ng-if="!$ctrl.confirmed && !$ctrl.linkExpired"><div class="clearfix m-t-md"><button type="button" ng-click="$ctrl.onDisableTOTP($event)" class="pull-left btn btn-dark">Disable 2FA</button><button type="button" ng-click="$ctrl.onNavigateToLoginPage()" class="pull-right btn btn-link">Login</button></div></fieldset></div><div class="axTOTPResetPage__footer clearfix m-t-md"><div class="copyright small pull-left text-white">Copyright © 2019 Acunetix Ltd.</div><a href="https://www.acunetix.com/" target="_blank" class="site-link small pull-right">www.acunetix.com</a></div></div></div></div></div></div>'),
14 e.put("/templates/account/validate-account/validate-account.html", "<!DOCTYPE html>"),
15 e.put("/templates/account/verify/verify.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" ng-if="!currentUser.isChildAccount" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><div uib-tooltip="{{saveActionStatusMessage()|translate}}" tooltip-enable="!hasChanges() || profileForm.$invalid" class="btn-group"><button ng-disabled="!hasChanges() || profileForm.$invalid || accountLockoutFrom.$invalid" ng-click="onUpdate()" class="btn btn-default">Save</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper wrapper-lg ax-page-content"><div class="box-container"><div class="panel panel-default m-b-md"><div class="panel-heading"><div class="panel-title clearfix"><span>Profile</span></div></div><div class="panel-body"><form name="profileForm" novalidate class="form-horizontal"><div class="form-group"><label for="profileForm_companyEmail" class="control-label col-md-3">Company Email</label><div class="col-md-6"><input id="profileForm_companyEmail" readonly="readonly" value="{{userProfile.email}}" class="form-control"></div></div><div ng-class="{\'has-error\': profileForm.firstName.$invalid && profileForm.firstName.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_firstName" class="control-label col-md-3">First Name</label><div class="col-md-6"><input id="profileForm_firstName" name="firstName" type="text" ng-model="userProfile.firstName" required class="form-control"><div ng-messages="profileForm.firstName.$error" ng-if="profileForm.firstName.$touched && profileForm.firstName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': profileForm.lastName.$invalid && profileForm.lastName.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_lastName" class="control-label col-md-3">Last Name</label><div class="col-md-6"><input id="profileForm_lastName" name="lastName" type="text" ng-model="userProfile.lastName" required class="form-control"><div ng-messages="profileForm.lastName.$error" ng-if="profileForm.lastName.$touched && profileForm.lastName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="!currentUser.isChildAccount" ng-class="{\'has-error\': profileForm.companyName.$invalid && profileForm.companyName.$touched}" class="form-group"><label for="profileForm_companyName" class="control-label col-md-3">Company Name</label><div class="col-md-6"><input id="profileForm_companyName" type="text" name="companyName" ng-model="userProfile.companyName" required class="form-control"><div ng-messages="profileForm.companyName.$error" ng-if="profileForm.companyName.$touched && profileForm.companyName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="!currentUser.isChildAccount" ng-class="{\'has-error\': profileForm.companyWebsite.$invalid && profileForm.companyWebsite.$touched}" class="form-group"><label for="profileForm_companyWebsite" class="control-label col-md-3">Company Website</label><div class="col-md-6"><input id="profileForm_companyWebsite" type="url" name="companyWebsite" ng-model="userProfile.companyWebsite" required class="form-control"><div ng-messages="profileForm.companyWebsite.$error" ng-if="profileForm.companyWebsite.$touched && profileForm.companyWebsite.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="url">Please enter a valid URL (e.g. http://example.com)</span></div></div></div><div ng-class="{\'has-error\': profileForm.contactPhone.$invalid && profileForm.contactPhone.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_contactPhone" class="control-label col-md-3">Phone</label><div class="col-md-6"><input id="profileForm_contactPhone" type="phone" name="contactPhone" ng-model="userProfile.contactPhone" phone-number="userProfile.contactPhone" required class="form-control"><div ng-messages="profileForm.contactPhone.$error" ng-if="profileForm.contactPhone.$touched && profileForm.contactPhone.$invalid" class="help-block"><span ng-message="phoneNumber">Please enter a valid phone number</span><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': profileForm.countryCode.$invalid && profileForm.countryCode.$touched}" ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_countryCode" class="control-label col-md-3">Country</label><div class="col-md-6"><ui-select id="profileForm_countryCode" name="countryCode" ng-required="true" ng-model="userProfile.countryCode"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="false">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="countryOption.code as countryOption in countries|filter:{name:$select.search} track by countryOption.code"><span>{{countryOption.name}}</span></ui-select-choices></ui-select></div></div><div ng-if="userProfile.role !== \'master\'" class="form-group"><label for="profileForm_role" class="control-label col-md-3">Role</label><div class="col-md-6"><input id="profileForm_role" readonly="readonly" value="{{userProfile.role|axUserRoleName}}" class="form-control"></div></div><div ng-if="!currentUser.isChildAccount" class="form-group"><div class="col-md-6 col-md-offset-3"><label class="checkbox i-checks i-checks-sm"><input type="checkbox" ng-model="userProfile.notifications.monthlyStatus"><i></i>Subscribe to monthly status email</label></div></div></form></div></div><div ng-if="!currentUser.isChildAccount"></div></div></div></div></div></div></div></div>'),
16 e.put("/templates/components/crawl-breadcrumb/crawl-breadcrumb.component.html", '<!DOCTYPE html><ul class="breadcrumb ax-crawl-breadcrumb"><li><a ng-click="$ctrl.onLocationClick({location: {locId: 0}})" uib-tooltip="{{::\'Back to roots\'}}" ng-class="{\'text-muted\': $ctrl.locations.length === 0}"><i class="fa fa-fw fa-globe"></i></a></li><li ng-repeat="location in $ctrl.locations track by $index" ng-class="{active: $last}"><a ng-if="!$last" ng-click="$ctrl.onLocationClick({location: location})">{{location.name}}</a><span ng-if="$last">{{location.name}}</span></li></ul>'),
17 e.put("/templates/components/error-presenter/error-presenter.component.html", '<!DOCTYPE html><div ng-class="{\'ax-error-presenter--visible\': $ctrl.errors.length}" class="ax-error-presenter md-whiteframe-3dp"><uib-alert type="danger" class="m-b-none"><ul class="list-unstyled m-b-none"><li ng-repeat="error in $ctrl.errors track by $index"><span ng-if="$ctrl.errors.length > 1"><i class="fa fa-caret-right text-danger"></i> </span><span ng-bind-html="error.message" translate class="ax-error-message"></span></li></ul><div class="m-t-sm"><button ng-if="$ctrl.errors.length === 1 && $ctrl.errors[0].onRetry && $ctrl.errors[0].status !== 409" ng-click="$ctrl.errors[0].onRetry()" class="btn btn-sm btn-dark ax-btn-retry m-r-xs">{{::\'Retry\' | translate}}</button><button ng-click="$ctrl.dismiss()" class="btn btn-sm btn-default ax-btn-dismiss">{{::\'Dismiss\' | translate}}</button></div></uib-alert></div>'),
18 e.put("/templates/components/events/events.component.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()" ui-grid="$ctrl.eventList.gridOptions" ui-grid-save-state ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid w-full h-full"></div>'),
19 e.put("/templates/components/exclusion-hours/exclusion-hours.component.html", '<!DOCTYPE html><div ng-class="{\'axExcludedHours--readOnly\': !!$ctrl.readOnly}" class="axExcludedHours"><table class="table-condensed table-bordered"><tbody><tr><td></td><td ng-repeat="label in $ctrl.hourLabels track by $index"><small ng-click="$ctrl.onColumnHeaderClicked($index)" class="axExcludedHours__HourLabel">{{::label}}</small></td></tr><tr ng-repeat="hourItem in $ctrl.hours track by hourItem.dayName"><th ng-click="$ctrl.onRowHeaderClicked(hourItem)" class="axExcludedHours__DayName">{{::hourItem.dayName|translate}}</th><td ng-repeat="hour in hourItem.hours track by $index" ng-class="{\'axExcludedHours__HourInterval--Selected\': hour.selected}" ng-click="$ctrl.onRowCellClicked(hour)" class="axExcludedHours__HourInterval b"></td></tr></tbody></table></div>'),
20 e.put("/templates/components/file-upload/file-upload.component.html", '<!DOCTYPE html><div ng-class="{\'input-group\': !$ctrl.disallowRemove || !$ctrl.disallowChange}" class="pos-rlt"><input type="file" ng-attr-accept="{{$ctrl.accept}}" class="form-control hide"><input type="text" readonly="readonly" value="{{$ctrl.currentFile.name}}" class="form-control"><span ng-if="$ctrl.state === \'uploading\'" class="input-group-addon"><i class="fa fa-spin fa-spinner"></i></span><span ng-if="$ctrl.state === \'incomplete\'" uib-tooltip="{{::\'This file has been partially uploaded (\' + $ctrl.uploadProgress + \'% complete)\'}}" tooltip-placement="{{::\'right auto\'}}" class="input-group-addon"><i class="fa fa-warning text-warning"></i></span><div ng-if="$ctrl.state !== \'uploading\' && (!$ctrl.disallowRemove || !$ctrl.disallowChange || $ctrl.downloadButton)" class="input-group-btn"><button uib-tooltip="{{::\'Download file\'|translate}}" type="button" ng-click="$ctrl.onDownloadFile()" ng-if="$ctrl.downloadButton" class="btn btn-default btn-icon"><i class="fa fa-download"></i></button><button type="button" ng-click="$ctrl.chooseFile()" ng-if="!$ctrl.disallowChange" class="btn btn-default btn-icon"><i class="fa fa-folder-open"></i></button><button type="button" ng-click="$ctrl.removeFile()" ng-if="!$ctrl.disallowRemove" class="btn btn-danger btn-icon"><i class="fa fa-times"></i></button></div><div ng-if="$ctrl.state === \'uploading\'" style="height: 2px;left: 0;bottom: 0;z-index: 2;" ng-style="{width: $ctrl.uploadProgress + \'%\'}" class="pos-abt bg-danger"></div></div>'),
21 e.put("/templates/components/filter-tags/filter-tags.component.html", '<div class="ax-filter-tags"><div ng-repeat="tag in $ctrl.tags" class="ax-filter-tag box-shadow"><div ng-click="$ctrl.toggle($event)" class="inline"><strong class="ax-filter-label">{{tag.label|translate}}</strong><span class="ax-filter-value">{{tag.value}}</span></div><a uib-tooltip="{{::\'Remove filter\'|translate}}" ng-click="$ctrl.removeTag({tag: tag})" class="text-muted ax-filter-close"><i class="fa fa-times"></i></a></div></div>'),
22 e.put("/templates/components/ical/ical.component.html", '<!DOCTYPE html><div class="ax-calendar w-full r box-shadow"><div class="ax-calendar__title bg-white-only text-dark"><h4 class="wrapper-sm padder b-b m-b-none m-t-none">{{::\'Select Repeat Pattern\'|translate}}</h4></div><div class="ax-calendar__body bg-white padder container-fluid"><div class="ax-calendar__frequency wrapper-sm b-b"><span class="m-r-xl">{{::\'Every\'|translate}}</span><input type="number" min="1" max="99" required ng-model="$ctrl.frequencyValue" class="form-control m-r-sm w-xxs"><select ng-model="$ctrl.frequency" ng-options="option.value as option.text for option in $ctrl.frequencyList" class="w-xs"></select></div><div ng-if="$ctrl.frequency === \'week\'" class="ax-calendar__frequency--week wrapper-sm b-b"><ol class="list-inline m-b-none"><li ng-repeat="option in $ctrl.weekDayList track by option.value"><button type="button" ng-model="$ctrl.selectedWeekDays[option.value]" uib-btn-checkbox class="ax-week-day b font-bold text-center small">{{option.text|translate}}</button></li></ol></div><div ng-if="$ctrl.frequency === \'month\'" class="ax-calendar__frequency--month wrapper-sm b-b"><ol class="list-unstyled m-b-none"><li><label class="m-b-none m-t-none"><input type="radio" checked="checked" class="form-control m-r-sm inline"><span>{{::\'On the same day each month\'|translate}}</span></label></li></ol></div><div class="ax-calendar__ends wrapper-sm b-b"><span style="vertical-align: top;" class="m-r-xl">{{::\'Ends\'|translate}}</span><ol class="inline list-unstyled m-b-none"><li><label class="m-b-none m-t-none"><input type="radio" name="ends-option" ng-model="$ctrl.endsOption" value="never" class="form-control m-r-sm inline"><span>{{::\'Never\'|translate}}</span></label></li><li><label class="m-b-none m-t-none"><input type="radio" name="ends-option" ng-model="$ctrl.endsOption" value="date" class="form-control m-r-sm inline"><span>{{::\'On\'|translate}} </span><div class="inline pos-rlt"><input type="text" readonly="readonly" ng-click="$ctrl.toggleEndDateCalendarVisibility()" ng-model="$ctrl.endDate" uib-datepicker-popup="d MMMM yyyy" is-open="$ctrl.endDateCalendarVisible" datepicker-options="$ctrl.endDateDatePickerOptions" show-button-bar="false" popup-placement="auto bottom-right" class="form-control m-l-sm"><div ng-click="$ctrl.toggleEndDateCalendarVisibility()" class="ax-date-picker-toggle text-dark"><i class="fa fa-calendar"></i></div></div></label></li></ol></div><div class="wrapper-sm b-b ax-calendar__frequency m-b-md"><strong>{{$ctrl.getRepeatMessage()}}</strong></div></div></div>'),
23 e.put("/templates/components/license-info/license-info.component.html", '<!DOCTYPE html><div class="form-horizontal"><div ng-if="$ctrl.currentUser.permissions.viewLicenseKey" class="form-group m-b-none"><label class="control-label font-bold col-sm-3">License Key</label><div class="col-sm-6"><div class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.licenseKey}}</div></div></div><div ng-if="$ctrl.currentUser.permissions.viewLicenseKey && $ctrl.licenseInfo.productCode !== \'TRIAL\'" class="form-group"><div class="col-sm-6 col-sm-offset-3"><button type="button" ng-click="$ctrl.onUpdateLicense()" class="btn btn-default m-r-xs">Update License</button></div></div><div class="form-group m-b-none"><label class="control-label font-bold col-sm-3">Edition</label><div class="col-sm-6"><div class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.productCode|axProductEdition}}</div></div></div><div class="form-group m-b-none"><label class="control-label font-bold col-sm-3">Product Status</label><div class="col-sm-6"><div ng-show="$ctrl.licenseInfo.maintenance.expires" ng-class="{\'text-danger font-bold\': $ctrl.licenseInfo.maintenance.expired}" class="form-control-static text-ellipsis"><span ng-if="$ctrl.licenseInfo.maintenance.expired">{{\'Expired on\'|translate}} {{$ctrl.licenseInfo.maintenance.expires|date:\'d MMMM yyyy\'}}</span><span ng-if="!$ctrl.licenseInfo.maintenance.expired">Licensed ({{\'expires on \'|translate}} {{$ctrl.licenseInfo.maintenance.expires|date:\'d MMMM yyyy\'}})</span></div><div ng-show="!$ctrl.licenseInfo.maintenance.expires" ng-class="{\'text-danger font-bold\': $ctrl.licenseInfo.expired}" class="form-control-static text-ellipsis"><span ng-if="$ctrl.licenseInfo.expired">{{\'Expired on\'|translate}} {{$ctrl.licenseInfo.expires|date:\'d MMMM yyyy\'}}</span><span ng-if="!$ctrl.licenseInfo.expired"> <span ng-if="$ctrl.licenseInfo.productCode !== \'TRIAL\'">Licensed </span><span ng-if="$ctrl.licenseInfo.productCode === \'TRIAL\'">Trial </span><span>({{\'expires on \'|translate}} {{$ctrl.licenseInfo.expires|date:\'d MMMM yyyy\'}})</span></span></div></div></div><div class="form-group m-b-none"><label class="control-label font-bold col-sm-3">Licensed Targets</label><div class="col-sm-6"><div class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.limits.maxTargets}} ({{$ctrl.licenseInfo.extra.uniqueStdTargetCount}} used)</div></div></div><div class="form-group m-b-none"><label class="control-label font-bold col-sm-3">Licensed Users</label><div class="col-sm-6"><div ng-if="$ctrl.licenseInfo.limits.maxUsers !== undefined" class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.limits.maxUsers}} ({{$ctrl.licenseInfo.extra.userCount}} used)</div><div ng-if="$ctrl.licenseInfo.limits.maxUsers === undefined" class="form-control-static text-ellipsis">Unlimited</div></div></div><div ng-if="$ctrl.licenseInfo.limits.maxScansPerEngine" class="form-group m-b-none"><label class="control-label font-bold col-sm-3">Max Concurrent Scans</label><div class="col-sm-6"><div class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.limits.maxScansPerEngine}}</div></div></div><div ng-if="$ctrl.licenseInfo.limits.maxEngines" class="form-group m-b-none"><label class="control-label font-bold col-sm-3">Max Scanning Engines</label><div class="col-sm-6"><div class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.limits.maxEngines}}</div></div></div><div ng-if="$ctrl.licenseInfo.productCode !== \'TRIAL\'"><div class="col-sm-12 pb-3"><hr></div><div class="form-group"><label class="control-label font-bold col-sm-3">AcuMonitor Service</label><div class="col-md-6"><div class="checkbox"><label ng-class="{\'bg-success\': $ctrl.currentUser.acumonitor}" style="padding-left:0" class="i-switch"><input type="checkbox" ng-click="$ctrl.onToggleAcumonitor({event: $event})" ng-checked="$ctrl.currentUser.acumonitor"><i></i></label></div></div></div></div></div><div ng-if="$ctrl.licenseInfo.productCode === \'TRIAL\'"><hr><p translate>The Acunetix Web Vulnerability Scanner <strong>Trial Edition</strong> allows you to scan the\nfollowing Acunetix test websites, which provide access to all the\nvulnerability information detected:\n</p><ul class="list-unstyled padder-md"><li ng-repeat="site in $ctrl.testWebsites track by $index" ax-no-animate><a target="_blank" ng-href="{{site.url}}">{{site.url}}</a></li></ul><p translate>During the Trial, you can also scan any website that you control with the\nfollowing limitations:\n</p><ul style="list-style-type: bullet" class="padder-md m-l-md"><li>The details of the vulnerabilities discovered cannot be accessed.</li></ul><p>For more information on how to buy Acunetix Web Vulnerability Scanner, please visit:\n<a target="_blank" href="http://www.acunetix.com/ordering/">http://www.acunetix.com/ordering/</a></p></div>'),
24 e.put("/templates/components/scan-status/scan-status.component.html", '<!DOCTYPE html><div class="ax-scan-status"><div ng-if="$ctrl.scanStatus" class="container-fluid m-b-xxl"><div class="row"><div class="col-lg-6"><div style="border-color:transparent; box-shadow:none" class="ax-scan-status__widget pos-rlt"><div class="ax-threat-level"><div class="ax-threat-level__left-panel"><ax-threat-level threat="$ctrl.scanStatus.responsive === true ? $ctrl.scanStatus.threatLevel : -1"></ax-threat-level></div><div class="ax-threat-level__right-panel"><h4 class="ax-threat-level__title">Acunetix Threat Level {{$ctrl.scanStatus.responsive === true && $ctrl.scanStatus.threatLevel !== \'-1\' ? $ctrl.scanStatus.threatLevel : \'\'}}</h4><div class="ax-threat-level__description"><div ng-if="$ctrl.scanStatus.responsive === true"><div ng-switch="$ctrl.scanStatus.threatLevel"><div ng-switch-when="3">One or more high-severity type vulnerabilities have been discovered by the scanner. A malicious user can exploit these vulnerabilities and compromise the backend database and/or deface your website.</div><div ng-switch-when="2">One or more medium-severity type vulnerabilities have been discovered by the scanner. You should investigate each of these vulnerabilities to ensure they will not escalate to more severe problems.</div><div ng-switch-when="1">One or more low-severity type vulnerabilities have been discovered by the scanner.</div><div ng-switch-when="0">No vulnerabilities have been discovered by the scanner.</div><div ng-switch-when="-1"><span ng-if="$ctrl.scanStatus.status === \'processing\' || $ctrl.scanStatus.status === \'aborting\'">Threat level is not available yet.</span><div ng-if="$ctrl.scanStatus.status === \'failed\'" class="text-danger">Threat level could not be determined because the scan failed.</div><div ng-if="$ctrl.scanStatus.status === \'aborted\'" class="text-danger">Threat level could not be determined because the scan was aborted.</div></div></div></div><div ng-if="$ctrl.scanStatus.responsive === false"><div class="text-danger">Threat level could not be determined because the target was not responsive.</div></div></div></div></div><img src="/images/acu-sensor.png" ng-if="$ctrl.scanStatus.wvsScanStats.startingHost && ($ctrl.scanStatus.wvsScanStats.startingHost.sensorDetected === true || $ctrl.scanStatus.wvsScanStats.startingHost.sensorDetected === false)" ng-class="{\'ax-sensor--invalid\': $ctrl.scanStatus.wvsScanStats.startingHost.sensorDetected === false}" uib-tooltip="{{::\'AcuSensor was not detected on this target\'|translate}}" tooltip-enable="$ctrl.scanStatus.wvsScanStats.startingHost.sensorDetected === false" class="pos-abt ax-sensor"></div></div><div class="col-lg-6"><div class="ax-scan-status__widget"><div class="ax-scan-status__activity"><div class="panel m-b-none no-border no-shadow"><div class="panel-heading b-b b-light"><div class="pull-right"><span ng-class="{\'label-danger\': $ctrl.scanHealth === -1, \'label-info\': $ctrl.scanHealth === 1, \'label-default\': $ctrl.scanHealth === 0}" class="label">{{$ctrl.scanStatus.status|axScanStatus}}</span></div><h4 class="m-t-none m-b-none">Activity</h4></div><div class="panel-body clearfix"><div><span class="pull-right text-primary">{{$ctrl.scanStatus.progress}}%</span><span>Overall progress</span><uib-progressbar type="info" value="$ctrl.scanStatus.progress" class="progress-xs m-t-sm"></uib-progressbar></div><div ng-repeat="entry in $ctrl.scanStatus.activity | limitTo:-4 track by $index" ax-no-animate class="ax-scan-status__activity-message"><div class="ax-scan-status__activity-message-wrapper"><div class="text-ellipsis m-r-xs l-h-2x ax-scan-status__activity-message-text"><i ng-class="{\'fa-exclamation text-danger\': entry.level >= 2, \'fa-exclamation text-warning\': entry.level === 1, \'fa-info text-info\': entry.level <= 0}" class="fa fa-fw m-r-xs"></i><span uib-tooltip="{{entry.message|translate}}">{{entry.message|translate}}</span></div><div class="text-right l-h-2x ax-scan-status__activity-message-timestamp">{{entry.timestamp|date:\'medium\'}}</div></div></div></div></div></div></div></div></div><div class="row"><div class="col-lg-12"><div class="ax-scan-status__general b box-shadow"><div class="ax-scan-status__general__item"><h4 class="text-muted text-center m-t-none m-b-xm ax-scan-status__general__item-label">Scan Duration</h4><h2 class="text-center m-b-none m-t-none ax-scan-status__general__item-value"><span ng-if="$ctrl.scanStatus.duration != null">{{$ctrl.scanStatus.duration|axFormatDuration}}</span><span ng-if="$ctrl.scanStatus.duration == null">—</span></h2></div><div class="ax-scan-status__general__item"><h4 class="text-muted text-center m-t-none m-b-xm ax-scan-status__general__item-label">Requests</h4><h2 class="text-center m-b-none m-t-none ax-scan-status__general__item-value"><span ng-if="$ctrl.scanStatus.wvsScanStats.requestCount != null">{{$ctrl.scanStatus.wvsScanStats.requestCount|number:0}}</span><span ng-if="$ctrl.scanStatus.wvsScanStats.requestCount == null">—</span></h2></div><div class="ax-scan-status__general__item"><h4 class="text-muted text-center m-t-none m-b-xm ax-scan-status__general__item-label">Avg. Response Time</h4><h2 class="text-center m-b-none m-t-none ax-scan-status__general__item-value"><span ng-if="$ctrl.scanStatus.wvsScanStats.avgResponseTime != null">{{$ctrl.scanStatus.wvsScanStats.avgResponseTime|number:0}}ms</span><span ng-if="$ctrl.scanStatus.wvsScanStats.avgResponseTime == null">—</span></h2></div><div class="ax-scan-status__general__item"><h4 class="text-muted text-center m-t-none m-b-xm ax-scan-status__general__item-label">Locations</h4><h2 class="text-center m-b-none m-t-none ax-scan-status__general__item-value"><span ng-if="$ctrl.scanStatus.wvsScanStats.locations != null">{{$ctrl.scanStatus.wvsScanStats.locations|number:0}}</span><span ng-if="$ctrl.scanStatus.wvsScanStats.locations == null">—</span></h2></div></div></div></div><div class="row"><div class="col-lg-6"><div class="ax-scan-status__widget"><div class="ax-scan-status__target-info"><div class="panel m-b-none no-border no-shadow"><div class="panel-heading b-b b-light"><h4 class="m-t-none m-b-none">Target Information</h4></div><div class="panel-body"><span ng-if="!$ctrl.scanStatus.wvsScanStats.startingHost"><div ng-if="$ctrl.targetInfo" class="ax-scan-status__target-info-wrapper"><div class="ax-scan-status__target-info-label">Address</div><div class="ax-scan-status__target-info-value"><div ng-if="!$ctrl.currentUser.permissions.targetConfig">{{$ctrl.targetInfo.address}}</div><a ng-if="$ctrl.currentUser.permissions.targetConfig" ui-sref="app.target_config({targetId: $ctrl.targetInfo.targetId, returnUrl: $ctrl.currentUrl()})">{{$ctrl.targetInfo.address}}</a></div></div><div ng-if="!$ctrl.targetInfo">Target information is not available</div></span><div ng-if="$ctrl.scanStatus.wvsScanStats.startingHost" ng-repeat="targetInfo in [$ctrl.scanStatus.wvsScanStats.startingHost] track by $index"><div class="ax-scan-status__target-info-wrapper"><div class="ax-scan-status__target-info-label">Address</div><div class="ax-scan-status__target-info-value"><div ng-if="!$ctrl.currentUser.permissions.targetConfig">{{targetInfo.address}}</div><a ng-if="$ctrl.currentUser.permissions.targetConfig" ui-sref="app.target_config({targetId: targetInfo.targetId, returnUrl: $ctrl.currentUrl()})">{{targetInfo.address}}</a></div></div><div class="ax-scan-status__target-info-wrapper"><div class="ax-scan-status__target-info-label">Server</div><div class="ax-scan-status__target-info-value">{{targetInfo.serverName || \'—\'}}</div></div><div class="ax-scan-status__target-info-wrapper"><div class="ax-scan-status__target-info-label">Operating System</div><div class="ax-scan-status__target-info-value">{{targetInfo.osName || \'—\'}}</div></div><div class="ax-scan-status__target-info-wrapper"><div class="ax-scan-status__target-info-label">Identified Technologies</div><div class="ax-scan-status__target-info-value"><div ng-if="targetInfo.technologies.length > 0">{{targetInfo.technologies|axJoin:\', \'}}</div><div ng-if="targetInfo.technologies.length === 0">—</div></div></div><div class="ax-scan-status__target-info-wrapper"><div class="ax-scan-status__target-info-label">Responsive</div><div class="ax-scan-status__target-info-value"><span ng-if="targetInfo.responsive !== true && targetInfo.responsive !== false">—</span><span ng-if="targetInfo.responsive === true">Yes</span><strong ng-if="targetInfo.responsive === false" class="text-danger">No</strong></div></div></div></div></div></div></div></div><div class="col-lg-6"><div class="ax-scan-status__widget"><div class="ax-scan-status__vulns"><div class="panel m-b-none no-border no-shadow"><div class="panel-heading b-b b-light clearfix"><h4 class="m-t-none m-b-none pull-left">Latest Alerts</h4><div ng-if="$ctrl.scanStatus.severityCounts" class="pull-right"><ax-vuln-counters vulns="$ctrl.scanStatus.severityCounts" scan-id="$ctrl.scanId" return-url="$ctrl.currentUrl()"></ax-vuln-counters></div></div><div class="panel-body"><p ng-if="$ctrl.scanStatus.vulns.length === 0">No vulnerabilities detected</p><div ng-if="$ctrl.scanStatus.vulns.length > 0" ng-repeat="vulnItem in $ctrl.scanStatus.vulns | limitTo:5 track by vulnItem.vulnId" ax-no-animate class="ax-scan-status__vulns-items"><div class="l-h-2x ax-scan-status__vulns-items-wrapper"><ax-severity-indicator severity="{{vulnItem.severity}}" class="m-r-xs"></ax-severity-indicator><a ui-sref="app.result_details({scanId: $ctrl.scanId, resultId: $ctrl.resultId, vulnId: vulnItem.vulnId, returnUrl: $ctrl.currentUrl()})" class="ax-scan-status__vulns-items-name text-ellipsis m-r-xs">{{vulnItem.name|translate}}</a><div class="ax-scan-status__vulns-items-timestamp text-right">{{vulnItem.timestamp|date:\'medium\'}}</div></div></div></div></div></div></div></div></div><div ng-if="$ctrl.scanStatus.wvsScanStats.hosts.length > 1" class="row"><div class="col-lg-12"><div style="max-height: 320px; height: auto" class="ax-scan-status__widget"><div class="ax-scan-status__allowed-hosts"><div class="panel m-b-none no-border no-shadow"><div class="panel-heading b-b b-light"><h4 class="m-t-none m-b-none"><span>Allowed Hosts</span><small class="text-muted m-l-xs">({{$ctrl.scanStatus.wvsScanStats.hosts.length - 1}})</small></h4></div><div class="panel-body"><div style="max-height: 250px" class="scrollable"><div class="table-responsive-vertical"><table class="table table-bordered table-condensed table-middle-align"><colgroup><col style="width:440px;max-width:440px"><col style="width:180px;max-width:180px"><col style="width:180px;max-width:180px"><col style="width:180px;max-width:180px"><col style="width:180px;max-width:180px"><col style="width:140px;max-width:140px"><col></colgroup><thead><tr><th><strong>Address</strong></th><th><div class="text-right"><strong>Avg. Response Time</strong></div></th><th><div class="text-right"><strong>Requests</strong></div></th><th><div class="text-right"><strong>Locations</strong></div></th><th><div class="text-center"><strong>Responsive</strong></div></th><th><div class="text-center"><strong>AcuSensor</strong></div></th><th><strong>Server</strong></th></tr></thead><tbody><tr ng-repeat="target in $ctrl.scanStatus.wvsScanStats.hosts | filter:{isStartingHost:false} track by $index"><td data-title="{{::\'Address\'|translate}}"><a ng-if="target.targetId && $ctrl.currentUser.permissions.targetConfig" ui-sref="app.target_config({targetId: target.targetId, returnUrl: $ctrl.currentUrl()})">{{target.address}}</a><span ng-if="!target.targetId || !$ctrl.currentUser.permissions.targetConfig">{{target.address}}</span></td><td data-title="{{::\'Avg. Response Time\'|translate}}"><div class="text-right">{{target.avgResponseTime|number:0}} {{::\'ms\'|translate}}</div></td><td data-title="{{::\'Requests\'|translate}}"><div class="text-right">{{target.requestCount|number}}</div></td><td data-title="{{::\'Locations\'|translate}}"><div class="text-right">{{target.locations|number}}</div></td><td data-title="{{::\'Responsive\'|translate}}"><span ng-class="{\'text-danger font-bold\': !target.responsive}" class="visible-sm visible-xs">{{target.responsive ? \'Yes\' : \'No\'}}</span><div ng-class="{\'text-danger\': !target.responsive}" class="text-center hidden-sm hidden-xs"><i ng-class="target.responsive ? \'fa-check\' : \'fa-times\'" class="fa fa-fw"></i> </div></td><td data-title="{{::\'AcuSensor\'|translate}}"><div ng-if="target.sensorDetected === null" class="text-center">—</div><div ng-if="target.sensorDetected !== null" class="text-center"><i ng-class="target.sensorDetected ? \'fa-check\' : \'fa-times text-danger\'" class="fa fa-fw"></i> </div></td><td data-title="{{::\'Server\'|translate}}">{{target.serverName || \'—\'}}</td></tr></tbody></table></div></div></div></div></div></div></div></div><div ng-if="$ctrl.scanStatus.wvsScanStats.hosts[0].externalHosts.length > 0" class="row"><div class="col-lg-6"><div class="ax-scan-status__widget"><div class="ax-scan-status__external-hosts"><div class="panel m-b-none no-border no-shadow"><div class="panel-heading b-b b-light"><h4 class="m-t-none m-b-none"><span>Discovered Hosts</span><small class="text-muted m-l-xs">({{$ctrl.scanStatus.wvsScanStats.hosts[0].externalHosts.length}})</small></h4></div><div class="panel-body"><div style="max-height: 160px" class="scrollable hover"><div ng-repeat="host in $ctrl.scanStatus.wvsScanStats.hosts[0].externalHosts track by $index" style="display: flex; flex-wrap: no-wrap; align-items: center;" class="l-h-2x"><span style="flex: 1;" class="text-ellipsis m-r-sm">{{host}}</span><a ng-if="$ctrl.currentUser.permissions.addTarget" ng-click="$ctrl.onCreateScanTarget(host)" style="flex-basis: auto;">Create Target</a></div></div></div></div></div></div></div></div></div><div ng-if="$ctrl.scanStatus === null" class="container-fluid m-b-xl m-t-xl"><i class="fa fa-warning text-warning m-r-xs"></i><strong>The information for this scan could not be retrieved.</strong></div><div ng-if="$ctrl.scanStatus === undefined" class="container-fluid m-b-xl m-t-xl"><i class="fa fa-spin fa-spinner m-r-xs"></i><span>Loading...</span></div></div>'),
25 e.put("/templates/components/site-structure/site-structure.component.html", '<!DOCTYPE html><treecontrol ax-overlay="$ctrl.loadingTracker.active()" ax-no-animate tree-model="$ctrl.siteStructure" options="$ctrl.treeOptions" selected-node="$ctrl.selectedLocation" expanded-nodes="$ctrl.expandedNodes" on-selection="$ctrl.onNodeSelected(node, selected)" on-node-toggle="$ctrl.onNodeToggle(node, expanded)" class="tree-classic ax-site-structure-treecontrol w-full h-full">{{node.name}}</treecontrol>'),
26 e.put("/templates/components/site-structure/treecontrol.tpl.html", '<!DOCTYPE html><ul {{options.ulclass}}>\n <li ng-repeat="node in node.{{options.nodeChildren}} | filter:filterExpression:filterComparator {{options.orderBy}}" ng-class="headClass(node) + \' \' + (node.excluded ? \'crawl-excluded\' : \'crawl-included\')" {{options.liclass}}set-node-to-data>\n <i class="tree-branch-head" ng-class="iBranchClass()" ng-click="selectNodeHead(node)"></i>\n <i class="tree-leaf-head {{options.iLeafClass}}"></i>\n <div class="tree-label {{options.labelClass}}" ng-class="[selectedClass(), unselectableClass()]" ng-click="selectNodeLabel(node)" tree-transclude></div>\n <treeitem ng-if="nodeExpanded()"></treeitem>\n </li>\n</ul>'),
27 e.put("/templates/components/schedule-editor/schedule-editor.component.html", '<!DOCTYPE html><div class="ax-schedule-editor"><form novalidate name="$ctrl.scheduleEditorForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.scheduleEditorForm.scheduleType.$invalid && $ctrl.scheduleEditorForm.scheduleType.$touched}" class="form-group"><div class="col-xs-12"><ui-select name="scheduleType" ng-disabled="!$ctrl.scheduleTypeEditable" ng-model="$ctrl.scheduleType" search-enabled="false"><ui-select-match allow-clear="false">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::$ctrl.scheduleTypeList"><span>{{option.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="$ctrl.scheduleEditorForm.scheduleType.$error" ng-show="$ctrl.scheduleEditorForm.scheduleType.$touched && $ctrl.scheduleEditorForm.scheduleType.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span></div></div></div><div ng-if="$ctrl.scheduleType === \'future\' || $ctrl.scheduleType === \'recurrent\'" ng-class="{\'has-error\': $ctrl.scheduleEditorForm.scheduleDate.$invalid && $ctrl.scheduleEditorForm.scheduleDate.$touched}" class="form-group"><div class="col-xs-12"><div class="input-group"><input type="text" name="scheduleDate" readonly="readonly" required ng-model="$ctrl.scheduleDateOptions.selectedDate" uib-datepicker-popup="d MMMM yyyy" show-button-bar="false" is-open="$ctrl.scheduleDateOptions.calendarVisible" datepicker-options="$ctrl.scheduleDateOptions.datePickerOptions" popup-placement="auto bottom-right" class="form-control"><div class="input-group-btn"><button type="button" ng-click="$ctrl.scheduleDateOptions.calendarVisible = !$ctrl.scheduleDateOptions.calendarVisible" class="btn btn-default"><i class="fa fa-calendar"></i></button></div></div><div ng-messages="$ctrl.scheduleEditorForm.scheduleDate.$error" ng-show="$ctrl.scheduleEditorForm.scheduleDate.$touched && $ctrl.scheduleEditorForm.scheduleDate.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span></div></div></div><div ng-if="$ctrl.scheduleType === \'recurrent\'"><div class="form-group"><div class="col-xs-12"><ui-select name="recurrenceOption" required ng-model="$ctrl.recurrenceOption" search-enabled="false"><ui-select-match allow-clear="false">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::$ctrl.recurrenceOptionList"><span>{{option.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="$ctrl.scheduleEditorForm.recurrenceOption.$error" ng-show="$ctrl.scheduleEditorForm.recurrenceOption.$touched && $ctrl.scheduleEditorForm.recurrenceOption.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span></div></div></div><div ng-if="$ctrl.recurrenceOption === \'CUSTOM\'" class="form-group"><div class="col-xs-12"><ax-recurrence-picker rrule="$ctrl.rrule" start-date="$ctrl.scheduleDateOptions.selectedDate"></ax-recurrence-picker></div></div></div><div ng-if="$ctrl.scheduleType === \'recurrent\' || $ctrl.scheduleType === \'future\'" class="form-group"><div class="col-xs-12"><label class="i-checks i-checks-sm m-r-md"><input type="checkbox" ng-model="$ctrl.timeSensitiveOptions.enabled"><i></i>{{\'Time sensitive\'|translate}}</label><div ng-if="$ctrl.timeSensitiveOptions.enabled" style="display: inline-block; vertical-align: middle"><uib-timepicker ng-model="$ctrl.timeSensitiveOptions.selectedTime" minute-step="$ctrl.timeSensitiveOptions.pickerOptions.minuteStep" show-meridian="$ctrl.timeSensitiveOptions.pickerOptions.showMeridian" show-spinners="$ctrl.timeSensitiveOptions.pickerOptions.showSpinners"></uib-timepicker></div></div></div></form></div>'),
28 e.put("/templates/components/vuln-counters/vuln-counters.component.html", '<!DOCTYPE html><ul ng-class="{\'ax-vuln-counters--has-links\': $ctrl.hasLinks, \'ax-vuln-counters--disabled\': !$ctrl.vulns}" class="ax-vuln-counters"><li><a ng-click="$ctrl.navigateToVulnerabilitiesPage(3)"><label title="{{$ctrl.vulns.high > 100 ? $ctrl.vulns.high : \'\'}}" class="label label-danger">{{($ctrl.vulns.high || 0) | axMaxDigits:2}}</label></a></li><li><a ng-click="$ctrl.navigateToVulnerabilitiesPage(2)"><label title="{{$ctrl.vulns.medium > 100 ? $ctrl.vulns.medium : \'\'}}" class="label label-warning">{{($ctrl.vulns.medium || 0) | axMaxDigits:2}}</label></a></li><li ng-if="!$ctrl.highSeverityOnly"><a ng-click="$ctrl.navigateToVulnerabilitiesPage(1)"><label title="{{$ctrl.vulns.low > 100 ? $ctrl.vulns.low : \'\'}}" class="label label-info">{{($ctrl.vulns.low || 0) | axMaxDigits:2}}</label></a></li><li ng-if="!$ctrl.highSeverityOnly"><a ng-click="$ctrl.navigateToVulnerabilitiesPage(0)"><label title="{{$ctrl.vulns.info > 100 ? $ctrl.vulns.info : \'\'}}" class="label label-success">{{($ctrl.vulns.info || 0) | axMaxDigits:2}}</label></a></li></ul>'),
29 e.put("/templates/modals/activation/activation.modal.html", '<!DOCTYPE html><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Acunetix</h4></div><div class="modal-body"><p translate>Acunetix is not activated. Use the <a href="awvs://activation">Acunetix Activation</a> application to activate your installation.\n</p></div><div class="modal-footer"><a ui-focus="true" href="awvs://activation" class="btn btn-danger">Activate</a><button type="button" ng-click="$dismiss(\'close\')" class="btn btn-default">Close</button></div>'),
30 e.put("/templates/modals/add-group/add-group.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Add Group</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><span>{{$ctrl.error|translate}}</span></uib-alert><form novalidate name="$ctrl.groupForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.groupForm.name.$invalid && $ctrl.groupForm.name.$touched}" class="form-group"><label class="control-label">Group Name</label><input name="name" type="text" ng-model="$ctrl.group.name" required class="form-control"><div ng-messages="$ctrl.groupForm.name.$error" ng-if="$ctrl.groupForm.name.$touched && $ctrl.groupForm.name.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div><div class="form-group"><label class="control-label">Description</label><input type="text" ng-model="$ctrl.group.description" class="form-control"></div></form></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onAddGroup()" ng-disabled="$ctrl.groupForm.$invalid" class="btn btn-dark">Add Group</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
31 e.put("/templates/modals/add-target/add-target.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Add Target</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span ng-bind-html="$ctrl.error"></span></uib-alert></div><form novalidate name="$ctrl.targetForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.targetForm.address.$invalid && $ctrl.targetForm.address.$touched}" class="form-group"><label for="targetForm_address" class="control-label">Address</label><input id="targetForm_address" name="address" type="url" ng-model="$ctrl.target.address" required host placeholder="http://example.com/" class="form-control"><div ng-messages="$ctrl.targetForm.address.$error" ng-if="$ctrl.targetForm.address.$touched && $ctrl.targetForm.address.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="url">Please enter a valid URL (e.g. http://example.com)</span></div></div><div class="form-group"><label for="targetForm_description" class="control-label">Description</label><input id="targetForm_description" type="text" name="description" ng-model="$ctrl.target.description" class="form-control"></div><div ng-if="currentUser.features.target_business_criticality && appConfig.showBusinessCriticality" class="form-group"><label for="targetForm_criticality" class="control-label">Business Criticality</label><ui-select id="targetForm_criticality" ng-model="$ctrl.target.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in $ctrl.criticalityList"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div></form></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onAddTarget()" ng-disabled="$ctrl.targetForm.$invalid" class="btn btn-dark">Add Target</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
32 e.put("/templates/modals/add-user/add-user.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Add User</h4></div><div class="modal-body"><div class="container-fluid"><div ng-if="$ctrl.featureNA" class="row"><p>The Multi-user feature can be used to delegate vulnerability scanning / reporting tasks. Access to your Scan Targets, including scanning and reporting, can be controlled using 4 different roles and by configuring permissions to Scan Target Groups or specific Scan Targets.</p><p>The Multi-user feature is only available to full subscriptions. <a target="_blank" href="https://www.acunetix.com/support/docs/wvs/configuring-users/">Learn more</a>\n</p></div><div ng-if="$ctrl.maxUsersLimitReached && !$ctrl.featureNA" class="row"><uib-alert type="danger" role="alert" closeable="false"><span>User limit reached. Please <a target="_blank" href="mailto:sales@acunetix.com">upgrade</a> your license in order to add more users.</span></uib-alert></div><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><div ng-bind-html="$ctrl.error"></div></uib-alert></div></div><form novalidate name="$ctrl.addUserForm" ng-if="!$ctrl.maxUsersLimitReached && !$ctrl.featureNA" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.addUserForm.email.$invalid && $ctrl.addUserForm.email.$touched}" class="form-group"><label class="control-label col-sm-3">Email</label><div class="col-sm-9"><input name="email" type="email" ng-model="$ctrl.user.email" required class="form-control"><div ng-messages="$ctrl.addUserForm.email.$error" ng-if="$ctrl.addUserForm.email.$touched && $ctrl.addUserForm.email.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="email">Please enter a proper email address</span></div></div></div><div ng-class="{\'has-error\': $ctrl.addUserForm.firstName.$invalid && $ctrl.addUserForm.firstName.$touched}" class="form-group"><label class="control-label col-sm-3">First Name</label><div class="col-sm-9"><input name="firstName" type="text" ng-model="$ctrl.user.firstName" required class="form-control"><div ng-messages="$ctrl.addUserForm.firstName.$error" ng-if="$ctrl.addUserForm.firstName.$touched && $ctrl.addUserForm.firstName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': $ctrl.addUserForm.lastName.$invalid && $ctrl.addUserForm.lastName.$touched}" class="form-group"><label class="control-label col-sm-3">Last Name</label><div class="col-sm-9"><input name="lastName" type="text" ng-model="$ctrl.user.lastName" required class="form-control"><div ng-messages="$ctrl.addUserForm.lastName.$error" ng-if="$ctrl.addUserForm.lastName.$touched && $ctrl.addUserForm.lastName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': $ctrl.addUserForm.password.$invalid && $ctrl.addUserForm.password.$touched}" class="form-group"><label class="control-label col-sm-3">Password</label><div class="col-sm-9"><input name="password" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.user.password" required password-policy class="form-control"><div ng-messages="$ctrl.addUserForm.password.$error" ng-if="$ctrl.addUserForm.password.$touched && $ctrl.addUserForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="passwordPolicy">Password does not meet the password policy</span></div><div class="help-block"><i class="fa fa-info-circle m-r-xs"></i><span>Minimum 8 characters, containing at least 3 of the following - 1 number, 1 small letter, 1 capital letter and 1 special character e.g. !@#$% etc.</span></div></div></div><div ng-class="{\'has-error\': $ctrl.addUserForm.retypePassword.$invalid && $ctrl.addUserForm.retypePassword.$touched}" class="form-group"><label class="control-label col-sm-3">Retype Password</label><div class="col-sm-9"><input name="retypePassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.user.retypePassword" required equal-to="$ctrl.user.password" class="form-control"><div ng-messages="$ctrl.addUserForm.retypePassword.$error" ng-if="$ctrl.addUserForm.retypePassword.$touched && $ctrl.addUserForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div><div ng-class="{\'has-error\': $ctrl.addUserForm.role.$invalid && $ctrl.addUserForm.role.$touched}" class="form-group"><label class="control-label col-sm-3">Role</label><div class="col-sm-9"><ui-select name="role" ng-model="$ctrl.user.role" search-enabled="false" required><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in $ctrl.roleList"><span>{{option.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="$ctrl.addUserForm.role.$error" ng-if="$ctrl.addUserForm.role.$touched && $ctrl.addUserForm.role.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><div class="col-sm-9 col-sm-offset-3"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="$ctrl.user.accessAllGroups"><i></i>Access All Targets</label></div></div></form></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onAddUser()" ng-if="!$ctrl.maxUsersLimitReached && !$ctrl.featureNA" ng-disabled="$ctrl.addUserForm.$invalid || $ctrl.loadingTracker.active()" class="btn btn-dark">Add User</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
33 e.put("/templates/modals/change-password/change-password.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$ctrl.$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Change Password</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span>{{$ctrl.error|translate}}</span></uib-alert></div></div><form novalidate name="$ctrl.changePasswordForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.changePasswordForm.currentPassword.$invalid && $ctrl.changePasswordForm.currentPassword.$touched}" class="form-group"><label class="control-label col-sm-4">Current Password</label><div class="col-sm-8"><input name="currentPassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.credentials.currentPassword" required class="form-control"><div ng-messages="$ctrl.changePasswordForm.currentPassword.$error" ng-if="$ctrl.changePasswordForm.currentPassword.$touched && $ctrl.changePasswordForm.currentPassword.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': $ctrl.changePasswordForm.newPassword.$invalid && $ctrl.changePasswordForm.newPassword.$touched}" class="form-group"><label class="control-label col-sm-4">New Password</label><div class="col-sm-8"><input name="newPassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.credentials.newPassword" required password-policy class="form-control"><div ng-messages="$ctrl.changePasswordForm.newPassword.$error" ng-if="$ctrl.changePasswordForm.newPassword.$touched && $ctrl.changePasswordForm.newPassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="passwordPolicy">Password does not meet the password policy</span></div><div class="help-block"><i class="fa fa-info-circle m-r-xs"></i><span>Minimum 8 characters, containing at least 3 of the following - 1 number, 1 small letter, 1 capital letter and 1 special character e.g. !@#$% etc.</span></div></div></div><div ng-class="{\'has-error\': $ctrl.changePasswordForm.confirmNewPassword.$invalid && $ctrl.changePasswordForm.confirmNewPassword.$touched}" class="form-group"><label class="control-label col-sm-4">Confirm New Password</label><div class="col-sm-8"><input name="confirmNewPassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.credentials.confirmNewPassword" required equal-to="$ctrl.credentials.newPassword" class="form-control"><div ng-messages="$ctrl.changePasswordForm.confirmNewPassword.$error" ng-if="$ctrl.changePasswordForm.confirmNewPassword.$touched && $ctrl.changePasswordForm.confirmNewPassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></form></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onChangePasword()" ng-disabled="$ctrl.changePasswordForm.$invalid || $ctrl.loadingTracker.active()" class="btn btn-dark">Update</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div></div>'),
34 e.put("/templates/modals/configure-groups/configure-groups.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$ctrl.$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Configure Group Membership</h4></div><div style="min-height: 300px" class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span>{{$ctrl.error|translate}}</span></uib-alert><div ui-grid="$ctrl.groupList.gridOptions" ui-grid-selection ui-grid-infinite-scroll ui-grid-resize-columns class="ax-grid"></div></div></div></div><div class="modal-footer"><button ng-if="$ctrl.currentUser.permissions.addGroup" type="button" ng-click="$ctrl.createGroup()" class="btn btn-default pull-left">Create Group</button><button type="button" ng-click="$ctrl.updateGroupMembership()" ng-disabled="$ctrl.loadingTracker.active() || $ctrl.selectedItemsCount() === 0" class="btn btn-dark">Update</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
35 e.put("/templates/modals/edit-engine/edit-engine.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'}}" class="close">×</button><h4 class="modal-title">Rename Scanning Engine</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><span>{{$ctrl.error|translate}}</span></uib-alert><form novalidate name="$ctrl.engineForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.engineForm.name.$invalid && $ctrl.engineForm.name.$touched}" class="form-group"><label for="engineForm_name" class="control-label">Engine Name</label><input id="engineForm_name" name="name" type="text" ng-model="$ctrl.engine.description" required class="form-control"><div ng-messages="$ctrl.engineForm.description.$error" ng-if="$ctrl.engineForm.description.$touched && $ctrl.engineForm.description.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></form></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onUpdate()" ng-disabled="$ctrl.engineForm.$invalid" class="btn btn-dark">Update</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
36 e.put("/templates/modals/edit-group/edit-group.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'}}" class="close">×</button><h4 class="modal-title">Edit Group</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><span>{{$ctrl.error|translate}}</span></uib-alert><form novalidate name="$ctrl.groupForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.groupForm.name.$invalid && $ctrl.groupForm.name.$touched}" class="form-group"><label for="groupForm_name" class="control-label">Group Name</label><input id="groupForm_name" name="name" type="text" ng-model="$ctrl.group.name" required class="form-control"><div ng-messages="$ctrl.groupForm.name.$error" ng-if="$ctrl.groupForm.name.$touched && $ctrl.groupForm.name.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div><div class="form-group"><label for="groupForm_description" class="control-label">Description</label><input id="groupForm_description" type="text" ng-model="$ctrl.group.description" class="form-control"></div></form></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onUpdateGroup()" ng-disabled="$ctrl.groupForm.$invalid" class="btn btn-dark">Update Group</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
37 e.put("/templates/modals/edit-schedule/edit-schedule.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()" class="ax-edit-schedule-modal"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Edit Schedule</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span>{{$ctrl.error|translate}}</span></uib-alert><form novalidate name="$ctrl.editScheduleForm" class="form-horizontal"><div class="form-group"><label class="control-label col-lg-2">Schedule</label><div class="col-lg-10"><ax-schedule-editor schedule="$ctrl.currentSchedule" on-schedule-changed="$ctrl.onScheduleChanged(schedule)"></ax-schedule-editor></div></div></form></div></div><div class="modal-footer"><div ng-if="$ctrl.currentSchedule.disabled" class="pull-left text-warning m-t-xs"><i class="fa fa-info m-r-xs"></i><span>Schedule will be enabled if you click Update</span></div><button ng-if="!$ctrl.currentSchedule.disabled" type="button" ng-click="$ctrl.onDisableSchedule()" class="btn btn-danger pull-left">Disable Schedule</button><button type="button" ng-click="$ctrl.onUpdateSchedule()" ng-disabled="$ctrl.editScheduleForm.$invalid" class="btn btn-dark">Update</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
38 e.put("/templates/modals/exclusion-hours/exclusion-hours.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()" class="ax-exclusion-hours-modal"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title"><span ng-if="$ctrl.selectedProfile.isNew">Create Excluded Hours Profile</span><span ng-if="!$ctrl.selectedProfile.isNew">Edit Excluded Hours Profile</span></h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span>{{$ctrl.error|translate}}</span></uib-alert><form name="$ctrl.profileForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.profileForm.name.$invalid && $ctrl.profileForm.name.$touched}" class="form-group"><label class="control-label col-md-3">Name</label><div class="col-md-6"><input name="name" type="text" ng-model="$ctrl.selectedProfile.name" maxlength="256" required ng-readonly="!$ctrl.currentUser.permissions.manageExcludedHours" class="form-control"><div ng-messages="$ctrl.profileForm.name.$error" ng-if="$ctrl.profileForm.name.$touched && $ctrl.profileForm.name.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="maxlength">Please enter no more than undefined characters</span></div></div></div><div class="form-group"><div class="col-md-6 col-md-offset-3"><div class="axExcludedHours axExcludedHours--readOnly"><table class="table table-condensed"><tbody><tr><td class="axExcludedHours__HourInterval axExcludedHours__HourInterval--Selected b"></td><td>Excluded</td></tr><tr><td class="axExcludedHours__HourInterval b"></td><td>Not Excluded</td></tr></tbody></table></div></div></div><div class="form-group"><div class="col-md-offset-1"><ax-exclusion-hours profile="$ctrl.selectedProfile" read-only="!$ctrl.currentUser.permissions.manageExcludedHours" on-exclusions-changed="$ctrl.onExclusionsChanged(exclusions)"></ax-exclusion-hours></div></div></form></div></div><div class="modal-footer"><button type="button" ng-if="$ctrl.selectedProfile.isNew && $ctrl.currentUser.permissions.manageExcludedHours" ng-click="$ctrl.onCreateProfile()" ng-disabled="$ctrl.profileForm.$invalid" class="btn btn-dark">Create Profile</button><button type="button" ng-if="!$ctrl.selectedProfile.isNew && $ctrl.currentUser.permissions.manageExcludedHours" ng-click="$ctrl.onUpdateProfile()" ng-disabled="$ctrl.profileForm.$invalid" class="btn btn-dark">Update</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default"><span ng-if="$ctrl.currentUser.permissions.manageExcludedHours">Cancel</span><span ng-if="!$ctrl.currentUser.permissions.manageExcludedHours">Close</span></button></div></div>'),
39 e.put("/templates/modals/general/alert.modal.html", '<!DOCTYPE html><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">{{(title || \'Acunetix\') | translate}}</h4></div><div class="modal-body"><div class="container-fluid"><p ng-bind-html="message"></p></div></div><div class="modal-footer"><button type="button" ng-click="$close(\'ok\')" class="btn btn-dark">{{\'OK\' | translate}}</button></div>'),
40 e.put("/templates/modals/general/confirm-action.modal.html", '<!DOCTYPE html><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">{{(title || \'Acunetix\') | translate}}</h4></div><div class="modal-body"><div class="container-fluid"><p ng-bind-html="message"></p></div></div><div class="modal-footer"><button type="button" ng-click="$close(\'yes\')" class="btn btn-dark">{{\'Yes\' | translate}}</button><button type="button" ng-click="$dismiss(\'no\')" class="btn btn-default">{{\'No\' | translate}}</button></div>'),
41 e.put("/templates/modals/import-targets/import-targets.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Import Targets</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="csvFile && !foundTargets"><span>No valid targets were found in the selected file\n</span></uib-alert></div><div class="row"><div class="col-md-12"><p>CSV files must have the following format</p><pre>Address, Description\nhttp://testasp.vulnweb.com, ASP Test Site\nhttp://testphp.vulnweb.com, PHP Test Site</pre></div></div><div class="row"><div class="col-md-6">Browse for CSV file</div></div><div class="row"><div class="col-md-6"><ax-file-upload file="targetImportFile" uploading="targetImportFile.$$uploading" on-file-selected="$ctrl.onFileSelected(file, targetImportFile.uploadId)" disallow-change="false" disallow-remove="true"></ax-file-upload></div><div style="padding-top:7px; padding-left:0px" ng-show="isLoading" class="col-md-6"><i class="fa fa-circle-o-notch fa-spin"></i></div></div></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onImportTargets()" ng-disabled="!csvFile || isLoading || !foundTargets" ng-bind-html="importButtonText" class="btn btn-dark"></button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
42 e.put("/templates/modals/issue-tracker/issue-tracker.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.shouldOverlayContents()"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">{{::\'Configure Issue Tracker\'|translate}}</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><span>{{$ctrl.error|translate}}</span></uib-alert><form name="$ctrl.issueTrackerForm" novalidate class="form-horizontal"><div class="form-group"><label class="control-label col-sm-3">{{::\'Issue Tracker\'|translate}}</label><div class="col-sm-9"><ui-select ng-model="$ctrl.trackerConfig.bugTracker" search-enabled="false" ng-disabled="!$ctrl.newTrackerConfig"><ui-select-match allow-clear="false" placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in $ctrl.bugTrackers track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div></div><div ng-class="{\'has-error\': $ctrl.issueTrackerForm.name.$invalid && $ctrl.issueTrackerForm.name.$touched}" class="form-group"><label class="control-label col-sm-3">{{::\'Name\'|translate}}</label><div class="col-sm-9"><input type="text" name="name" ng-model="$ctrl.trackerConfig.name" required class="form-control"><div ng-messages="$ctrl.issueTrackerForm.name.$error" ng-show="$ctrl.issueTrackerForm.name.$touched && $ctrl.issueTrackerForm.name.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span></div></div></div><div ng-if="$ctrl.trackerConfig.bugTracker"><div ng-if="$ctrl.trackerConfig.bugTracker === \'jira\'" class="form-group"><label class="control-label col-sm-3">{{::\'Authentication\'|translate}}</label><div class="col-sm-9"><ui-select ng-model="$ctrl.trackerConfig.auth.kind" search-enabled="false"><ui-select-match allow-clear="false" placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in $ctrl.authOptions.jira track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div></div><div ng-class="{\'has-error\': $ctrl.issueTrackerForm.trackerUrl.$invalid && $ctrl.issueTrackerForm.trackerUrl.$touched}" class="form-group"><label class="control-label col-sm-3">{{::\'URL\'|translate}}</label><div class="col-sm-9"><input type="url" name="trackerUrl" ng-model="$ctrl.trackerConfig.url" required class="form-control"><div ng-messages="$ctrl.issueTrackerForm.trackerUrl.$error" ng-show="$ctrl.issueTrackerForm.trackerUrl.$touched && $ctrl.issueTrackerForm.trackerUrl.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span><span ng-message="url">{{::\'Please specify a valid URL (e.g. http://example.com/)\'|translate}}</span></div></div></div><div ng-class="{\'has-error\': $ctrl.issueTrackerForm.username.$invalid && $ctrl.issueTrackerForm.username.$touched}" class="form-group"><label class="control-label col-sm-3">{{::\'User\'|translate}}</label><div class="col-sm-9"><input type="text" name="username" ng-model="$ctrl.trackerConfig.auth.username" required class="form-control"><div ng-messages="$ctrl.issueTrackerForm.username.$error" ng-show="$ctrl.issueTrackerForm.username.$touched && $ctrl.issueTrackerForm.username.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span></div></div></div><div ng-class="{\'has-error\': $ctrl.issueTrackerForm.password.$invalid && $ctrl.issueTrackerForm.password.$touched}" class="form-group"><label class="control-label col-sm-3">{{::\'Password\'|translate}}</label><div class="col-sm-9"><input type="password" name="password" ng-model="$ctrl.trackerConfig.auth.password" required class="form-control"><div ng-messages="$ctrl.issueTrackerForm.password.$error" ng-show="$ctrl.issueTrackerForm.password.$touched && $ctrl.issueTrackerForm.password.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required\'|translate}}</span></div></div></div><div class="form-group"><div class="col-sm-9 col-lg-offset-3 col-md-offset-3"><button type="button" ng-click="$ctrl.onTestConnection()" ng-disabled="$ctrl.issueTrackerForm.$invalid || $ctrl.connectionTracker.active()" class="btn btn-dark"><div ax-no-animate ng-if="$ctrl.connectionTracker.active()" ng-class="{\'fa-spin\': $ctrl.connectionTracker.active()}" class="fa fa-fw fa-refresh m-r-xs"></div><span>{{::\'Test Connection\'|translate}}</span></button><p ng-if="$ctrl.noProjects" class="m-t-sm m-b-none"><i class="fa fa-warning text-warning m-r-xs"></i><span>{{::\'No projects are available\'|translate}}</span></p></div></div><div ng-if="$ctrl.projects.length > 0"><div class="form-group"><label class="control-label col-sm-3">{{::\'Project\'|translate}}</label><div class="col-sm-9"><div class="input-group"><ui-select ng-model="$ctrl.trackerConfig.project" search-enabled="true" ng-required="true"><ui-select-match allow-clear="false" placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.projectName|translate}}</ui-select-match><ui-select-choices repeat="project in $ctrl.projects|filter:{projectName: $select.search} track by project.projectId"><span>{{project.projectName}}</span></ui-select-choices></ui-select><div class="input-group-btn"><button type="button" ng-click="$ctrl.onRefreshProjects()" class="btn btn-default btn-icon"><div ng-class="{\'fa-spin\': $ctrl.validationTracker.active() || $ctrl.projectsTracker.active()}" class="fa fa-fw fa-refresh"></div></button></div></div></div></div></div></div></form><form name="$ctrl.issueTypeForm" novalidate ng-if="$ctrl.projects.length > 0" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.issueTypeForm.issueType.$invalid && $ctrl.issueTypeForm.issueType.$touched}" class="form-group"><label class="control-label col-sm-3">{{::\'Issue Type\'|translate}}</label><div class="col-sm-9"><div class="input-group"><ui-select name="issueType" ng-model="$ctrl.trackerConfig.issueType" search-enabled="true" ng-required="$ctrl.trackerConfig.bugTracker === \'jira\' || $ctrl.trackerConfig.bugTracker === \'tfs\'"><ui-select-match allow-clear="true" placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.issueTypeName|translate}}</ui-select-match><ui-select-choices repeat="issueType in $ctrl.issueTypes|filter:{issueTypeName: $select.search} track by issueType.issueTypeId"><span>{{issueType.issueTypeName}}</span></ui-select-choices></ui-select><div class="input-group-btn"><button type="button" ng-click="$ctrl.onRefreshIssueTypes()" ng-disabled="!$ctrl.trackerConfig.project" class="btn btn-default btn-icon"><div ng-class="{\'fa-spin\': $ctrl.validationTracker.active() || $ctrl.issueTypesTracker.active()}" class="fa fa-fw fa-refresh"></div></button></div></div><div ng-messages="$ctrl.issueTypeForm.issueType.$error" ng-show="$ctrl.issueTypeForm.issueType.$touched && $ctrl.issueTypeForm.issueType.$invalid" class="help-block"><span ng-message="required">{{::\'This field is required for the selected issue tracker\'|translate}}</span></div></div></div></form></div></div><div class="modal-footer"><label class="checkbox pull-left m-b-none m-t-xs"><input type="checkbox" ng-model="$ctrl.validateOnClose" style="opacity:0" class="pos-abt"><i ng-class="{\'fa-check-square\': $ctrl.validateOnClose, \'fa-square-o\': !$ctrl.validateOnClose}" class="fa fa-fw fa-check m-r-xs"></i>{{::\'Validate settings on close\'|translate}}</label><button type="button" ng-click="$ctrl.onUpdate()" ng-disabled="$ctrl.noProjects || $ctrl.issueTrackerForm.$invalid || $ctrl.issueTypeForm.$invalid || !$ctrl.trackerConfig.project" class="btn btn-dark"><span ax-no-animate ng-if="$ctrl.validationTracker.active()" class="m-r-xs"><i class="fa fa-spinner fa-spin"></i></span><span>{{::\'OK\'|translate}}</span></button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">{{::\'Close\'|translate}}</button></div></div>'),
43 e.put("/templates/modals/logout-previous/logout-previous.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Acunetix</h4></div><div class="modal-body"><div class="container-fluid"><div ng-if="!$ctrl.furtherInfo"><div class="row"><p>You are already logged in from another location.</p></div></div></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onLogoutPrevious()" ng-disabled="$ctrl.uiState === \'validating\'" class="btn btn-dark">Logout from Other Session</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div></div>'),
44 e.put("/templates/modals/lsr/lsr.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Record Login Sequence</h4></div><div class="modal-body lsr-container"><iframe width="100%" height="100%" style="border:1px solid #b5b5b5;" class="lsr-viewer"></iframe></div></div>'),
45 e.put("/templates/modals/password-expired/password-expired.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$ctrl.$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Password Expired</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.errorMessage"><span>{{$ctrl.errorMessage|translate}}</span></uib-alert></div></div><form novalidate name="$ctrl.changePasswordForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.changePasswordForm.currentPassword.$invalid && $ctrl.changePasswordForm.currentPassword.$touched}" class="form-group"><label class="control-label col-sm-4">Current Password</label><div class="col-sm-8"><input name="currentPassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.credentials.currentPassword" required class="form-control"><div ng-messages="$ctrl.changePasswordForm.currentPassword.$error" ng-if="$ctrl.changePasswordForm.currentPassword.$touched && $ctrl.changePasswordForm.currentPassword.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': $ctrl.changePasswordForm.newPassword.$invalid && $ctrl.changePasswordForm.newPassword.$touched}" class="form-group"><label class="control-label col-sm-4">New Password</label><div class="col-sm-8"><input name="newPassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.credentials.newPassword" required password-policy class="form-control"><div ng-messages="$ctrl.changePasswordForm.newPassword.$error" ng-if="$ctrl.changePasswordForm.newPassword.$touched && $ctrl.changePasswordForm.newPassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="passwordPolicy">Password does not meet the password policy</span></div><div class="help-block"><i class="fa fa-info-circle m-r-xs"></i><span>Minimum 8 characters, containing at least 3 of the following - 1 number, 1 small letter, 1 capital letter and 1 special character e.g. !@#$% etc.</span></div></div></div><div ng-class="{\'has-error\': $ctrl.changePasswordForm.confirmNewPassword.$invalid && $ctrl.changePasswordForm.confirmNewPassword.$touched}" class="form-group"><label class="control-label col-sm-4">Confirm New Password</label><div class="col-sm-8"><input name="confirmNewPassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.credentials.confirmNewPassword" required equal-to="$ctrl.credentials.newPassword" class="form-control"><div ng-messages="$ctrl.changePasswordForm.confirmNewPassword.$error" ng-if="$ctrl.changePasswordForm.confirmNewPassword.$touched && $ctrl.changePasswordForm.confirmNewPassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></form></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onChangePassword()" ng-disabled="$ctrl.changePasswordForm.$invalid || $ctrl.loadingTracker.active()" class="btn btn-dark">Update</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div></div>'),
46 e.put("/templates/modals/poc-expired/poc-expired.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">License Expired</h4></div><div class="modal-body"><div class="container-fluid"><div ng-if="!$ctrl.furtherInfo"><div class="row"><p translate>Your Acunetix Proof of Concept license has expired. Please contact your Acunetix Representative.\n</p></div></div></div></div><div class="modal-footer"><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div></div>'),
47 e.put("/templates/modals/report-options/report-options.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'}}" class="close">×</button><h4 class="modal-title">Generate Report</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><span>{{$ctrl.error|translate}}</span></uib-alert><form novalidate name="$ctrl.reportOptionsForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.reportOptionsForm.template.$invalid && $ctrl.reportOptionsForm.template.$touched}" class="form-group"><label class="control-label">Template</label><ui-select name="template" ng-model="$ctrl.reportOptions.templateId" ng-required="true" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\' | translate}}">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="option.templateId as option in $ctrl.reportOptions.templateList|filter:{name:$select.search}" group-by="\'group\'"><span>{{option.name|translate}}</span></ui-select-choices></ui-select><div ng-messages="$ctrl.reportOptionsForm.template.$error" ng-if="$ctrl.reportOptionsForm.template.$touched && $ctrl.reportOptionsForm.template.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></form></div></div><div class="modal-footer clearfix"><div class="pull-left"><a ng-href="{{::$ctrl.aboutReportTemplatesHelpLink}}" target="_blank" style="position:relative; top:7px" class="text-muted"><i class="fa fa-question-circle m-r-xs"></i><span>About Report Templates</span></a></div><div class="pull-right"><button type="button" ng-click="$ctrl.onGenerateReport()" ng-disabled="$ctrl.reportOptionsForm.$invalid" class="btn btn-dark">Generate Report</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div></div>'),
48 e.put("/templates/modals/scanning-options/scanning-options.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()" class="ax-scanning-options-modal"><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Choose Scanning Options</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><span>{{$ctrl.error|translate}}</span></uib-alert><div class="row"><form novalidate name="$ctrl.scanningOptionsForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.scanningOptionsForm.scanProfile.$invalid && $ctrl.scanningOptionsForm.scanProfile.$touched}" class="form-group"><label class="control-label col-lg-2">Scan Type</label><div class="col-lg-10"><ui-select name="scanProfile" ng-model="$ctrl.scanningOptions.scanProfile" search-enabled="false" required ax-no-animate><ui-select-match data-placeholder="{{\'Choose...\'|translate}}">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="profileOption.profileId as profileOption in $ctrl.scanProfileList|filter:{name:$select.search}" group-by="$ctrl.grouping ? \'group\' : null"><span>{{profileOption.name|translate}}</span></ui-select-choices></ui-select><div ng-messages="$ctrl.scanningOptionsForm.scanProfile.$error" ng-if="$ctrl.scanningOptionsForm.scanProfile.$touched && $ctrl.scanningOptionsForm.scanProfile.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="$ctrl.selectedSchedule.scheduleType !== \'continuous\'" class="form-group"><label class="control-label col-lg-2">Report</label><div class="col-lg-10"><ui-select ng-model="$ctrl.scanningOptions.reportType" search-enabled="false" ax-no-animate><ui-select-match placeholder="{{::\'None\'|translate}}" allow-clear="true">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="option.templateId as option in $ctrl.reportTypeList|filter:{name:$select.search}" group-by="\'group\'"><span>{{option.name|translate}}</span></ui-select-choices></ui-select></div></div><div class="form-group"><label class="control-label col-lg-2">Schedule</label><div class="col-lg-10"><ax-schedule-editor schedule="$ctrl.currentSchedule" on-schedule-changed="$ctrl.onScheduleChanged(schedule)"></ax-schedule-editor></div></div><div ng-if="$ctrl.targetCount" class="form-group"><div translate-plural="{{$ctrl.targetCount}} scans will be created" translate-n="$ctrl.targetCount" translate class="col-lg-12 text-right text-muted">1 scan will be created</div></div></form></div></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onLaunchScan()" ng-disabled="$ctrl.scanningOptionsForm.$invalid" translate translate-n="$ctrl.targetCount" translate-plural="Create Scans" class="btn btn-dark">Create Scan</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div>'),
49 e.put("/templates/modals/sensor-secret/sensor-secret.modal.html", '<!DOCTYPE html><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'}}" class="close">×</button><h4 class="modal-title">Reset AcuSensor Password</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><p>Are you sure you want to reset the AcuSensor password for this Target? AcuSensor will need to be re-installed on the Target.</p></div><div class="row"><form novalidate name="$ctrl.sensorForm" class="form-horizontal"><div class="form-group"><label style="margin-left: 12px" class="checkbox inline"><input type="checkbox" ng-model="$ctrl.secretSection.visible" style="opacity:0" class="pos-abt"><i ng-class="{\'fa-check-square\': $ctrl.secretSection.visible, \'fa-square-o\': !$ctrl.secretSection.visible}" class="fa fa-fw text-dark"></i><span>Use a custom password</span></label></div><div ng-if="$ctrl.secretSection.visible" ng-class="{\'has-error\': $ctrl.sensorForm.password.$invalid && $ctrl.sensorForm.password.$touched}" class="form-group"><label for="sensorForm_password" class="control-label col-md-3">Password</label><div class="col-md-9"><input id="sensorForm_password" type="password" name="password" ng-model="$ctrl.secretSection.secret" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="$ctrl.sensorForm.password.$error" ng-if="$ctrl.sensorForm.password.$touched && $ctrl.sensorForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="$ctrl.secretSection.visible" ng-class="{\'has-error\': $ctrl.sensorForm.retypePassword.$invalid && $ctrl.sensorForm.retypePassword.$touched}" class="form-group"><label for="sensorForm_retypePassword" class="control-label col-md-3">Retype Password</label><div class="col-md-9"><input id="sensorForm_retypePassword" type="password" name="retypePassword" ng-model="$ctrl.secretSection.retypeSecret" equal-to="$ctrl.secretSection.secret" aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="$ctrl.sensorForm.retypePassword.$error" ng-if="$ctrl.sensorForm.retypePassword.$touched && $ctrl.sensorForm.retypePassword.$invalid" class="help-block"><span ng-message="equalTo">Passwords do not match</span></div></div></div></form></div></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onResetSecret()" ng-disabled="$ctrl.sensorForm.$invalid" class="btn btn-dark">Reset Password</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div>'),
50 e.put("/templates/modals/update-license/update-license.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()" ax-no-animate><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'}}" class="close">×</button><h4 class="modal-title">Update License</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><div ng-bind-html="$ctrl.error"></div></uib-alert><fieldset ng-disabled="$ctrl.loadingTracker.active()"><form novalidate name="$ctrl.licenseForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.licenseForm.licenseKey.$invalid && $ctrl.licenseForm.licenseKey.$touched}" class="form-group"><label for="licenseForm_licenseKey" class="control-label">License Key</label><input id="licenseForm_licenseKey" name="licenseKey" type="text" ng-model="$ctrl.licenseKey" required class="form-control"><div ng-messages="$ctrl.licenseForm.licenseKey.$error" ng-if="$ctrl.licenseForm.licenseKey.$touched && $ctrl.licenseForm.licenseKey.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></form></fieldset></div></div><div class="modal-footer"><button ui-focus="true" type="button" ng-click="$ctrl.onUpdateLicense()" ng-disabled="$ctrl.licenseForm.$invalid" class="btn btn-dark"><i ng-if="$ctrl.loadingTracker.active()" class="fa fa-spinner fa-spin m-r-xs"></i>Apply License</button><button type="button" ng-click="$dismiss(\'close\')" class="btn btn-default">Close</button></div></div>'),
51 e.put("/templates/reports/cell/actions.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><div uib-dropdown dropdown-append-to-body="true" ng-if="row.entity.status===\'completed\' && (row.entity.downloadLinkPDF || row.entity.downloadLinkHTML)" class="btn-group b"><a ng-href="{{row.entity.downloadLinkPDF || row.entity.downloadLinkHTML}}" class="btn btn-link btn-xs">Download</a><a type="button" uib-dropdown-toggle class="btn btn-link btn-xs"><i class="fa fa-caret-down"></i></a><ul uib-dropdown-menu class="dropdown-menu"><li ng-class="{\'hide\': !row.entity.downloadLinkPDF}" uib-tooltip-enable="!row.entity.downloadLinkPDF" uib-tooltip="{{::\'The report is not available in this format\'}}" tooltip-enable="!row.entity.downloadLinkPDF"><a ng-href="{{row.entity.downloadLinkPDF}}">PDF Format</a></li><li ng-class="{\'hide\': !row.entity.downloadLinkHTML}" uib-tooltip-enable="!row.entity.downloadLinkHTML" uib-tooltip="{{::\'The report is not available in this format\'}}" tooltip-enable="!row.entity.downloadLinkHTML"><a ng-href="{{row.entity.downloadLinkHTML}}">HTML Format</a></li></ul></div></div>'),
52 e.put("/templates/reports/cell/status.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span ng-class=\"{'text-danger': row.entity.status === 'failed', 'text-info': row.entity.status == 'processing'}\">{{row.entity.status|axReportStatus}}</span></div>"),
53 e.put("/templates/scans/list-scan/list-scans.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">Target</label><ui-select ng-model="searchFilters.target"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.address}}</ui-select-match><ui-select-choices repeat="option.targetId as option in searchFilters.targetList|filter:{address:$select.search} track by option.targetId" refresh="searchTargets($select.search)" refresh-delay="400"><span>{{option.address|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Threat</label><ui-select multiple="multiple" ng-model="searchFilters.threatLevel" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.threatLevelList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_business_criticality" ax-no-animate class="form-group"><label class="control-label">Business Criticality</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.criticalityList|filter:{text: $select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Scan Status</label><ui-select multiple="multiple" ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.statusList|filter:{text:$select.search}"><span>{{option.text}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Scan Type</label><ui-select multiple="multiple" ng-model="searchFilters.profile" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.name|translate}}</ui-select-match><ui-select-choices repeat="profile.profileId as profile in searchFilters.profileList|filter:{name:$select.search}"><span>{{profile.name|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_groups" ax-no-animate class="form-group"><label class="control-label">Group</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.name}}</ui-select-match><ui-select-choices repeat="option.groupId as option in searchFilters.groupList|filter:{name:$select.search}" refresh="searchGroups($select.search)" refresh-delay="400"><span>{{option.name}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><button ng-if="currentUser.permissions.scheduleScan && !generateReportView && !noTargetsInSystem" ui-sref="app.list_targets({returnUrl:currentUrl(),ls:1})" class="btn btn-default">{{::\'New Scan\'|translate}}</button><div ng-if="currentUser.permissions.stopScan" uib-tooltip="{{::\'Please select at least one running scan\'|translate}}" tooltip-enable="selectedItemsCount([\'queued\', \'starting\', \'processing\']) === 0" class="btn-group"><button ng-if="!generateReportView" ng-disabled="selectedItemsCount([\'queued\', \'starting\', \'processing\', \'pausing\']) === 0" ng-click="onStopSelectedScans()" class="btn btn-default">{{::\'Stop Scan\'|translate}}</button></div><div ng-if="currentUser.permissions.removeScan" uib-tooltip="{{::\'Please select at least one scan\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-if="!generateReportView" ng-disabled="selectedItemsCount() === 0" ng-click="onDeleteSelectedScans()" class="btn btn-default">{{::\'Delete Scan\'|translate}}</button></div><div uib-tooltip="{{::\'Please select at least one completed scan (completed, failed or aborted)\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">{{::\'Generate Report\'|translate}}</button></div><div uib-tooltip="{{::\'Please select 2 scans of the same target\'|translate}}" tooltip-enable="!canGenerateComparisonReport()" class="btn-group"><button ng-disabled="!canGenerateComparisonReport()" ng-click="onGenerateComparisonReport()" class="btn btn-default">{{::\'Compare Scans\'|translate}}</button></div><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="pull-right btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>Filter</span></button><div style="line-height: 32px" ng-if="generateReportView" class="pull-left m-l-sm"><i class="fa fa-fw fa-info text-dark"></i><span class="font-bold">{{::\'Select some scans then click generate report\'|translate}}</span></div><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><p ng-if="noTargetsInSystem && noScansInSystem && !loadingTracker.active()"><strong>{{::\'No Targets created yet.\'|translate}} </strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">{{::\'Create new Target\'|translate}}</a></p><p ng-if="!noTargetsInSystem && noScansInSystem && !loadingTracker.active()"><strong>No Target has been scanned. </strong><a ui-sref="app.list_targets({returnUrl:currentUrl(),ls:1})">Scan a Target</a></p><div ax-no-animate ng-hide="noScansInSystem" ui-grid="scanList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid w-full h-full"></div></div></div></div></div></div></div>'),
54 e.put("/templates/scans/scan-details/scan-details-crawl.html", '<!DOCTYPE html><div class="container-fluid h-full"><div ng-if="scan.status === \'failed\'" class="row"><uib-alert type="danger"><span>This scan failed</span><span ng-if="scan.failReason" translate>: {{scan.failReason}}</span></uib-alert></div><div style="height: 56px" class="row"><ax-crawl-breadcrumb locations="locations" on-location-click="changeLocation(location)"></ax-crawl-breadcrumb></div><div ng-style="{height: scan.status === \'failed\' ? \'calc(100% - 117px)\' : \'calc(100% - 47px)\'}" class="row"><ax-site-structure style="padding-left: 0; padding-right: 0" ng-if="scan.scanId && scan.resultId" loc-id="locId" result-id="scan.resultId" scan-id="scan.scanId" target-id="scan.target.targetId" on-location-selected="onCrawLocationDetails(location)" class="b scrollable col-sm-3 h-full"></ax-site-structure><div ng-if="selectedLocation" style="padding-right: 0;word-break: break-all" class="col-sm-9 h-full"><p style="border: 1px solid #efefef;line-height: 40px;padding-left: 20px;font-size: 14px;font-weight: 700;border-radius: 3px;letter-spacing: 0.2px;" class="box-shadow"><strong class="m-r-xs hide">URL:</strong><span>{{selectedLocation.url}}</span></p><div style="height: 23px" ng-if="!loadingTracker.active() && (selectedLocation.severityCounts.high || selectedLocation.severityCounts.medium || selectedLocation.severityCounts.low || selectedLocation.severityCounts.info)" class="m-b-sm text-center"><ax-vuln-counters vulns="selectedLocation.severityCounts"></ax-vuln-counters></div><div style="height: calc(100% - 84px)" class="w-full"><p ng-if="!loadingTracker.active() && !selectedLocation.severityCounts.high && !selectedLocation.severityCounts.medium && !selectedLocation.severityCounts.low && !selectedLocation.severityCounts.info" class="m-t-lg"><i class="fa fa-info m-r-xs"></i>No vulnerabilities detected at this location</p><ax-scan-vulns ng-if="scan.scanId && scan.resultId && (selectedLocation.severityCounts.high || selectedLocation.severityCounts.medium || selectedLocation.severityCounts.low || selectedLocation.severityCounts.info)" scan-id="scan.scanId" result-id="scan.resultId" loc-id="selectedLocation.locId" on-selection-changed="onVulnerabilitiesSelectionChanged(items)"></ax-scan-vulns></div></div></div></div>'),
55 e.put("/templates/scans/scan-details/scan-details-events.html", '<!DOCTYPE html><ax-events ng-if="scan.resultId" search-query="searchFilters.searchQuery" layout-save-key="scan-details-events" class="w-full h-full"></ax-events>'),
56 e.put("/templates/scans/scan-details/scan-details-sessions.html", '<!DOCTYPE html><div ui-grid="sessionList.gridOptions" ui-grid-save-state ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div>'),
57 e.put("/templates/scans/scan-details/scan-details-stats.html", '<!DOCTYPE html><uib-alert ng-if="scan.status === \'failed\'" type="danger"><span>This scan failed</span><span ng-if="scan.failReason" translate>: {{scan.failReason}}</span></uib-alert><uib-alert ng-if="scan.status !== \'failed\' && scan.eventLevel > 1" type="danger"><div>Some errors were generated during this scan. Please check the <a ng-click="navigateToEvents()">events</a>.</div></uib-alert><uib-alert ng-if="scan.status !== \'failed\' && scan.eventLevel == 1" type="danger"><div>Some warnings were generated during this scan. Please check the <a ng-click="navigateToEvents()">events</a>.</div></uib-alert><ax-scan-status ng-if="scanStatus && scan.status !== \'starting\' && scan.status !== \'queued\'" scan-id="scan.scanId" result-id="scan.resultId" scan-status="scanStatus" target-info="scan.target"></ax-scan-status><div ng-if="!scanStatus || scan.status === \'starting\' || scan.status === \'queued\'" ng-switch="scan.status" style="padding-bottom: 20px"><p ng-switch-when="starting">The scan is starting...</p><p ng-switch-when="queued">The scan will start in a few moments...</p><p ng-switch-when="scheduled" translate><span ng-if="!scan.schedule.scheduleDate" translate>The scan will start in a few moments...</span><span ng-if="scan.schedule.scheduleDate && scan.schedule.timeSensitive" translate>The scan is scheduled to start at {{scan.schedule.scheduleDate|date:\'medium\'}}</span><span ng-if="scan.schedule.scheduleDate && !scan.schedule.timeSensitive" translate>The scan is scheduled to start on {{scan.schedule.scheduleDate|date:\'mediumDate\'}}</span></p></div>'),
58 e.put("/templates/scans/scan-details/scan-details-vulns.html", '<!DOCTYPE html><uib-alert ng-if="scan.status === \'failed\'" type="danger"><span>This scan failed</span><span ng-if="scan.failReason" translate>: {{scan.failReason}}</span></uib-alert><ax-scan-vulns ng-if="scan.scanId && scan.resultId" search-query="searchFilters.searchQuery" layout-save-key="scan-details-vulns" scan-id="scan.scanId" result-id="scan.resultId" on-selection-changed="onVulnerabilitiesSelectionChanged(items)"></ax-scan-vulns>'),
59 e.put("/templates/scans/scan-details/scan-details.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" ng-class="{\'ax-scan-details-page--failed-scan\': currentSection === \'vulns\' && scan.status === \'failed\'}" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">Severity</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.severityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Status</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.statusList"><span>{{::option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">CVSS</label><ui-select ng-model="searchFilters.cvss" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.cvssList"><span>{{::option.text|translate}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'The scan is not running\'|translate}}" tooltip-enable="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\' && scan.status !== \'pausing\'" class="btn-group"><button ng-disabled="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\' && scan.status !== \'pausing\'" type="button" ng-click="onStopScan()" class="btn btn-default">Stop Scan</button></div><div uib-tooltip="{{::\'The scan is not running\'|translate}}" tooltip-enable="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" class="btn-group"><button ng-disabled="!canPauseScan()" ng-show="currentUser.hasFeature(\'pause_resume\') && !isResumeVisible()" type="button" ng-click="onPauseScan()" class="btn btn-default">Pause Scan</button></div><div uib-tooltip="{{::\'The scan is not paused\'|translate}}" tooltip-enable="scan.status !== \'paused\'" class="btn-group"><button ng-disabled="!canResumeScan()" ng-show="currentUser.hasFeature(\'pause_resume\') && isResumeVisible()" type="button" ng-click="onResumeScan()" class="btn btn-default">Resume Scan</button></div><div uib-tooltip="{{::\'This scan has not completed yet\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button type="button" ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">Generate Report</button></div><div uib-dropdown uib-tooltip="{{::\'This scan has not completed yet\'|translate}}" tooltip-enable="!canGenerateExport()" class="btn-group"><button uib-dropdown-toggle ng-disabled="!canGenerateExport()" class="btn btn-default"><span class="m-r-xs">WAF Export...</span><i class="caret"></i></button><ul uib-dropdown-menu><li ng-repeat="option in exportTemplateTypeList"><a ng-click="onExport(option.exportTypeId, option.sourceType)">{{option.name|translate}}</a></li></ul></div><div uib-dropdown ng-if="currentSection === \'vulns\'" class="btn-group"><button type="button" uib-dropdown-toggle class="btn btn-default"><span class="m-r-xs">Group By: None</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ui-sref="app.scan_details({scanId: scan.scanId, resultId: scan.resultId, view: currentSection, returnUrl: returnUrl, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss})"><i ui-sref-active="{\'fa-check\': \'app.scan_details({scanId: scan.scanId, view: currentSection})\'}" class="fa fa-fw"></i> {{::\'None\'|translate}}</a></li><li><a ui-sref="app.scan_details_grouped({scanId: scan.scanId, resultId: scan.resultId, groupBy: \'type\', view: currentSection, returnUrl: returnUrl, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss})"><i ui-sref-active="{\'fa-check\': \'app.scan_details_grouped({scanId: scan.scanId, groupBy: "type", view: currentSection})\'}" class="fa fa-fw"></i> {{::\'Vulnerability Type\'|translate}}</a></li></ul></div><div ng-show="currentSection === \'vulns\'" class="btn-group pull-right"><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>Filter</span></button></div><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" ng-if="currentSection === \'vulns\'" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div ng-class="sections.currentIndex!==0?\'h-full\':\'\'" class="wrapper ax-page-content"><uib-tabset active="sections.currentIndex" class="bg-white-only h-full"><uib-tab ng-repeat="tab in sections.items track by $index" heading="{{tab.heading|translate}}" ng-if="tab.visible" class="h-full"><div ng-if="sections.currentIndex === $index" ui-view="{{tab.view}}" ng-class="{\'h-full\': $index !== 0}" style="padding-top: 20px" class="padder-md"></div></uib-tab></uib-tabset></div></div></div></div></div></div>'),
60 e.put("/templates/settings/edit-group-targets/edit-group-targets.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light ax-page-edit-group-targets"><div class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div ng-if="currentUser.permissions.changeGroupMembership" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'Save\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><p class="m-b-md"><i class="fa fa-fw fa-info text-dark"></i> <span translate ng-if="currentUser.permissions.changeGroupMembership">Select Targets to be assigned to Group [{{group.name}}]</span><span translate ng-if="!currentUser.permissions.changeGroupMembership">The selected Targets are assigned to Group [{{group.name}}]</span></p><div ui-grid="targetList.gridOptions" ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state class="ax-grid ax-grid-group-targets w-full"></div></div></div></div></div></div></div>'),
61 e.put("/templates/settings/edit-user/edit-user.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{saveActionStatusMessage()|translate}}" tooltip-enable="profileForm.$invalid || accountLockoutForm.$invalid || !hasChanges()" class="btn-group"><button ng-disabled="profileForm.$invalid || accountLockoutForm.$invalid || !hasChanges()" ng-click="updateProfile()" class="btn btn-default">Save</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content container-fluid"><div class="panel panel-default m-b-md"><div class="panel-heading"><div class="panel-title clearfix"><div class="panel-title clearfix"><div class="pull-left">Profile</div></div></div></div><div class="panel-body"><form name="profileForm" novalidate class="form-horizontal"><div ng-class="{\'has-error\': profileForm.email.$invalid && profileForm.email.$touched}" class="form-group"><label class="control-label col-md-3">Email</label><div class="col-md-5"><input name="email" type="email" ng-model="userProfile.email" required class="form-control"><div ng-messages="profileForm.email.$error" ng-if="profileForm.email.$touched && profileForm.email.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="email">Please enter a proper email address</span></div></div></div><div ng-class="{\'has-error\': profileForm.firstName.$invalid && profileForm.firstName.$touched}" class="form-group"><label class="control-label col-md-3">First Name</label><div class="col-md-5"><input name="firstName" type="text" ng-model="userProfile.firstName" required class="form-control"><div ng-messages="profileForm.firstName.$error" ng-if="profileForm.firstName.$touched && profileForm.firstName.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><label class="control-label col-md-3">Last Name</label><div class="col-md-5"><input name="lastName" type="text" ng-model="userProfile.lastName" class="form-control"></div></div><div ng-class="{\'has-error\': profileForm.password.$invalid && profileForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-5"><input type="password" aria-autocomplete="off" autocomplete="off" name="password" ng-model="userProfile.password" required password-policy class="form-control"><div ng-messages="profileForm.password.$error" ng-if="profileForm.password.$touched && profileForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="passwordPolicy">Password does not meet the password policy</span></div><div class="help-block"><i class="fa fa-info-circle m-r-xs"></i><span>Minimum 8 characters, containing at least 3 of the following - 1 number, 1 small letter, 1 capital letter and 1 special character e.g. !@#$% etc.</span></div></div></div><div ng-class="{\'has-error\': profileForm.retypePassword.$invalid && profileForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-5"><input type="password" aria-autocomplete="off" autocomplete="off" name="retypePassword" ng-model="userProfile.retypePassword" equal-to="userProfile.password" required class="form-control"><div ng-messages="profileForm.retypePassword.$error" ng-if="profileForm.retypePassword.$touched && profileForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div><div ng-class="{\'has-error\': profileForm.role.$invalid && profileForm.role.$touched}" class="form-group"><label class="control-label col-md-3">Role</label><div class="col-md-5"><ui-select name="role" ng-model="userProfile.role" search-enabled="false" required><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.text}}</ui-select-match><ui-select-choices repeat="option.value as option in roleList">{{option.text}}</ui-select-choices></ui-select><div ng-messages="profileForm.role.$error" ng-if="profileForm.role.$touched && profileForm.role.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><div class="col-md-offset-3 col-md-5"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="userProfile.accessAllGroups"><i></i>Access All Targets</label></div></div></form></div></div><div ng-show="currentUser.features.target_groups && !userProfile.accessAllGroups" class="panel panel-default"><div class="panel-heading"><div class="panel-title clearfix"><div class="pull-left">Configure Access</div></div></div><div class="panel-body"><div class="container-fluid"><div class="row"><p class="m-b-md"><i class="fa fa-fw fa-info text-dark m-r-xs"></i><span>User has access to Targets in the following Groups.</span></p></div><div style="height: 250px" class="row m-b-md"><div ax-overlay="loadingTracker.active()" ui-grid="groupList.gridOptions" ui-grid-save-state ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid w-full h-full"></div></div><div class="row"><button ui-sref="app.edit_user_groups({userId: userProfile.userId, returnUrl: currentUrl()})" class="btn btn-default">Add / Edit</button></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><div class="panel-title clearfix"><div class="pull-left">Security Settings</div></div></div><div class="panel-body"><div class="container-fluid"><div class="form-horizontal"><div class="form-group m-b-none"><label class="control-label col-sm-3">Two factor authentication enabled</label><div class="col-sm-6"><div class="checkbox"><label ng-class="{\'bg-success\': totpCheckboxEnabled}" style="padding-left:0" class="i-switch"><input type="checkbox" ng-click="onToggleOTP($event);" ng-model="totpCheckboxEnabled" ng-checked="totpCheckboxEnabled"><i></i></label></div></div></div><div class="form-group"><label class="control-label col-md-3">Password History</label><div class="col-md-6"><label class="checkbox i-checks i-checks-sm"><input name="passwordHistory" type="checkbox" ng-model="accountSecurity.passwordHistory" ng-true-value="{{defaultPasswordHistorySize}}" ng-false-value="{{0}}"><i></i>Prevent last {{defaultPasswordHistorySize}} password to be reused</label></div></div><div class="form-group"><label class="control-label col-md-3">Password Expires</label><div class="col-md-6"><label class="checkbox i-checks i-checks-sm"><input name="passwordMaxAge" type="checkbox" ng-model="accountSecurity.passwordMaxAge" ng-true-value="{{defaultPasswordAge}}" ng-false-value="{{0}}"><i></i>Enforce changing of password after {{defaultPasswordAge}} days</label></div></div><form name="accountLockoutForm" novalidate class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Account Lockout</label><div class="col-md-6"><div class="checkbox"><label ng-class="{\'bg-success\': accountLockoutEnabled}" style="padding-left:0" class="i-switch"><input type="checkbox" ng-model="accountLockoutEnabled"><i></i></label></div></div></div><div ng-if="accountLockoutEnabled"><div ng-class="{\'has-error\': accountLockoutForm.maxConsecutiveLoginFailures.$invalid && accountLockoutForm.maxConsecutiveLoginFailures.$touched}" class="form-group"><label class="control-label col-md-3">Maximum Consecutive Login Failures</label><div class="col-md-1"><input type="number" min="0" max="50" name="maxConsecutiveLoginFailures" ng-model="accountSecurity.accountLockout.maxConsecutiveLoginFailures" required class="form-control"><div ng-messages="accountLockoutForm.maxConsecutiveLoginFailures.$error" ng-if="accountLockoutForm.maxConsecutiveLoginFailures.$touched && accountLockoutForm.maxConsecutiveLoginFailures.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 50</span></div></div></div><div ng-class="{\'has-error\': accountLockoutForm.timeWindow.$invalid && accountLockoutForm.timeWindow.$touched}" class="form-group"><label class="control-label col-md-3">Time Window (minutes)</label><div class="col-md-1"><input type="number" min="0" max="60" name="timeWindow" ng-model="accountSecurity.accountLockout.timeWindow" required class="form-control"><div ng-messages="accountLockoutForm.timeWindow.$error" ng-if="accountLockoutForm.timeWindow.$touched && accountLockoutForm.timeWindow.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 60</span></div></div></div><div ng-class="{\'has-error\': accountLockoutForm.lockoutTime.$invalid && accountLockoutForm.lockoutTime.$touched}" class="form-group"><label class="control-label col-md-3">Lockout Time (minutes)</label><div class="col-md-1"><input type="number" min="0" max="1440" name="lockoutTime" ng-model="accountSecurity.accountLockout.lockoutTime" required class="form-control"><div ng-messages="accountLockoutForm.lockoutTime.$error" ng-if="accountLockoutForm.lockoutTime.$touched && accountLockoutForm.lockoutTime.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 1440</span></div></div></div></div></form></div></div></div></div></div></div></div></div></div></div>'),
62 e.put("/templates/settings/edit-user-groups/edit-user-groups.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><button ng-click="onAddGroup()" class="btn btn-default">{{::\'Add Group\'|translate}}</button><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'Save\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><div class="panel panel-default"><div class="panel-body"><div class="container-fluid"><div class="row"><p class="m-b-md"><i class="fa fa-fw fa-info text-dark"></i> <span translate>Select Groups to be assigned to user [{{userProfile.fullName}}].</span></p></div><div class="row"><div class="well well-sm"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="userProfile.accessAllGroups"><i></i>{{::\'Access all Targets\'|translate}}</label></div></div><div ng-hide="userProfile.accessAllGroups" class="row"><div ui-grid="groupList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid"></div></div></div></div></div></div></div></div></div></div></div>'),
63 e.put("/templates/settings/scanning-profile/scanning-profile.html", '<!DOCTYPE html><div class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><button ng-click="$ctrl.onSave()" ng-disabled="!$ctrl.scanningProfile.name" class="btn btn-default">Save</button><div class="navbar-form navbar-right m-t-none m-b-none"><div class="form-group"><label class="control-label right-spacing">Filter</label><input type="text" placeholder="Filter checks" ng-model="$ctrl.searchTerm" ng-model-options="{debounce:400}" style="width: 240px" class="form-control"></div></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner wrapper"><div class="vbox"><div style="max-width: 620px; width: 620px" class="col b"><div class="h-full w-full bg-white-only scrollable"><div style="height: 80px" class="form-horizontal m-l-xs m-r-xs padder-md b-b"><div class="form-group"><label class="control-label">Name</label><input type="text" ng-model="$ctrl.scanningProfile.name" class="form-control"></div></div><treecontrol ax-overlay="$ctrl.loadingTracker.active()" ax-no-animate filter-expression="$ctrl.searchTerm" tree-model="$ctrl.treeModel" options="$ctrl.treeOptions" selected-node="$ctrl.selectedNode" expanded-nodes="$ctrl.expandedNodes" on-selection="$ctrl.onNodeSelected(node, selected)" style="overflow: hidden; height: calc(100% - 80px)" class="tree-classic ax-site-structure-treecontrol w-full"><i ng-class="{\'fa-check-square-o\': node.isChecked, \'fa-square-o\': !node.isChecked}" ng-click="$ctrl.toggleCheckMark(node, $path())" class="fa fa-fw m-r-xs"></i><span>{{::node.title}}</span></treecontrol></div></div><div class="col padder bg-white-only bn"><div ng-if="$ctrl.selectedNode" style="max-width: 640px" class="clearfix"><h5 class="b-b">Check Description</h5><p>{{$ctrl.selectedNode.description || \'No description available for the selected check\'}}</p></div></div></div></div></div></div></div></div>'),
64 e.put("/templates/settings/system-config/system-config.html", '<!DOCTYPE html><div ui-view="{{sections.current.name}}" class="hbox hbox-auto-xs bg-light"></div>'),
65 e.put("/templates/targets/list-targets/list-targets.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">Target Address / Description</label><input type="text" ng-model="searchFilters.freeText" placeholder="{{::\'Enter an address\'|translate}}" ng-model-options="{debounce:400}" class="form-control"></div><div class="form-group"><label class="control-label">Threat</label><ui-select multiple="multiple" ng-model="searchFilters.threatLevel" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.threatLevelList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_business_criticality" ax-no-animate class="form-group"><label class="control-label">Business Criticality</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.criticalityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Last Scanned</label><ui-select ng-model="searchFilters.lastScannedType" search-enabled="false"><ui-select-match>{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.lastScannedTypeList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select><div ng-if="searchFilters.lastScannedType === \'before_date\'" class="input-group"><input type="text" readonly="readonly" ng-model="searchFilters.lastScannedDate" uib-datepicker-popup="d MMMM yyyy" is-open="searchFilters.lastScannedDateCalendarVisible" datepicker-options="lastScannedDateDatePickerOptions" popup-placement="auto bottom-right" show-button-bar="false" class="form-control"><div class="input-group-btn"><button ng-click="searchFilters.lastScannedDateCalendarVisible = !searchFilters.lastScannedDateCalendarVisible" class="btn btn-default"><i class="fa fa-calendar"></i></button></div></div></div><div ng-if="currentUser.features.target_groups" ax-no-animate class="form-group"><label class="control-label">Group</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.name}}</ui-select-match><ui-select-choices repeat="option.groupId as option in searchFilters.groupList|filter:{name:$select.search}" refresh="searchGroups($select.search)" refresh-delay="400"><span>{{option.name}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div ng-if="currentUser.permissions.scheduleScan && !generateReportView" uib-tooltip="{{::\'Please select at least one target\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-disabled="selectedItemsCount() === 0" ng-click="onScanModal()" class="btn btn-default"><i class="fa fa-fw fa-bullseye m-r-xs"></i><span>Scan</span></button></div><button ng-if="!launchScanView && !generateReportView && currentUser.permissions.addTarget" ng-click="addTargetModal()" class="btn btn-default">Add Target</button><div uib-tooltip="{{::\'Please select at least one target\'|translate}}" tooltip-enable="selectedItemsCount() === 0" ng-if="!launchScanView && !generateReportView && currentUser.permissions.removeTarget" class="btn-group"><button ng-disabled="selectedItemsCount() === 0" ng-click="onDeleteSelectedTargets()" class="btn btn-default">Delete</button></div><div ax-no-animate ng-if="!launchScanView && !generateReportView && currentUser.features.target_groups && currentUser.permissions.addToGroup" uib-tooltip="{{::\'Please select at least one target\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-disabled="selectedItemsCount() === 0" ng-click="updateGroupMembership()" class="btn btn-default">Add to Group</button></div><div ng-if="!launchScanView" uib-tooltip="{{::\'Please select at least one target which has been scanned\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">Generate Report</button></div><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="pull-right btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>Filter</span></button><div style="line-height: 32px" ng-if="launchScanView" class="pull-left m-l-sm"><i class="fa fa-fw fa-info text-dark"></i><span class="font-bold">Select some targets then click scan</span></div><div style="line-height: 32px" ng-if="generateReportView" class="pull-left m-l-sm"><i class="fa fa-fw fa-info text-dark"></i><span class="font-bold">Select some targets then click generate report</span></div><div uib-dropdown ng-if="!launchScanView && !generateReportView && exportTemplateTypeList.length > 0" uib-tooltip="{{::\'Please select at least one target which has been scanned\'|translate}}" tooltip-enable="!canExport()" class="btn-group"><button uib-dropdown-toggle ng-disabled="!canExport()" class="btn btn-default"><span class="m-r-xs">WAF Export...</span><i class="caret"></i></button><ul uib-dropdown-menu><li ng-repeat="option in exportTemplateTypeList"><a ng-click="onExport(option.exportTypeId, option.sourceType)">{{option.name|translate}}</a></li></ul></div><div uib-tooltip="{{::\'Import Targets from CSV File\'|translate}}" ng-if="!launchScanView && !generateReportView && currentUser.permissions.addTarget" class="btn-group"><button ng-click="onImportTargets()" class="btn btn-default">Import CSV</button></div><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner wrapper"><p ng-if="targetList.nextCursor === undefined && !targetList.items.length && !targetList.hasFilters && !loadingTracker.active()"><strong class="m-r-xs">No Targets created yet.</strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">Create new Target</a></p><div ng-show="targetList.hasFilters || targetList.items.length" ui-grid="targetList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></div></div></div>'),
66 e.put("/templates/targets/target-config/target-config.html", '<!DOCTYPE html><div ui-view="{{currentSection}}" class="hbox hbox-auto-xs bg-light"></div>'),
67 e.put("/templates/vulns/list-vulns/list-vulns.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">{{::\'Target\'|translate}}</label><ui-select ng-model="searchFilters.target"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.address}}</ui-select-match><ui-select-choices repeat="option.targetId as option in searchFilters.targetList|filter:{address:$select.search}" refresh="searchTargets($select.search)" refresh-delay="400"><span>{{option.address|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'Severity\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.severityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_business_criticality" ax-no-animate class="form-group"><label class="control-label">{{::\'Business Criticality\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.criticalityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'Status\'|translate}}</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.statusList track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'CVSS\'|translate}}</label><ui-select ng-model="searchFilters.cvss" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.cvssList track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_groups" ax-no-animate class="form-group"><label class="control-label">{{::\'Group\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.name}}</ui-select-match><ui-select-choices repeat="option.groupId as option in searchFilters.groupList|filter:{name:$select.search}" refresh="searchGroups($select.search)" refresh-delay="400"><span>{{option.name}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><!DOCTYPE html><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'Please select at least one vulnerability\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onGenerateReport()" class="btn btn-default">Generate Report</button></div><div uib-dropdown ng-if="!groupBy && exportTemplateTypeList.length > 0" uib-tooltip="{{::\'Please select at least one vulnerability\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button uib-dropdown-toggle ng-disabled="selectedItems.length === 0" class="btn btn-default"><span class="m-r-xs">WAF Export...</span><i class="caret"></i></button><ul uib-dropdown-menu><li ng-repeat="option in exportTemplateTypeList"><a ng-click="onExport(option.exportTypeId, option.sourceType)">{{option.name|translate}}</a></li></ul></div><div uib-dropdown uib-tooltip="{{::\'Please select at least one vulnerability\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" uib-dropdown-toggle class="btn btn-default"><span class="m-r-xs">Mark As</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ng-click="changeVulnStatus(\'open\')">Open</a></li><li><a ng-click="changeVulnStatus(\'fixed\')">Fixed</a></li><li><a ng-click="changeVulnStatus(\'ignored\')">Ignored</a></li><li><a ng-click="changeVulnStatus(\'false_positive\')">False Positive</a></li></ul></div><div ng-if="currentUser.features.vuln_retest" uib-tooltip="{{::\'Please select at least one vulnerability\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onRecheckVulnerability()" class="btn btn-default">Retest</button></div><div ng-if="currentUser.features.bug_tracking_integration && currentUser.permissions.createIssue" uib-dropdown uib-tooltip="{{::\'Please select at least one vulnerability\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onCreateIssues()" class="btn btn-default">Send To Issue Tracker</button></div><div uib-dropdown class="btn-group"><button uib-dropdown-toggle ng-disabled="noTargetsOrScansInSystem" class="btn btn-default"><span class="m-r-xs">{{::\'Group By: \'|translate}}{{::\'None\'|translate}}</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ui-sref="app.list_vulns({target: searchFilters.target, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss, group: searchFilters.group, criticality: searchFilters.criticality, returnUrl: currentUrl()})"><i ui-sref-active="{\'fa-check\': \'app.list_vulns\'}" class="fa fa-fw m-r-xs"></i>None</a></li><li ng-if="currentUser.features.target_business_criticality" ax-no-animate><a ui-sref="app.list_vulns_grouped({groupBy: \'criticality\', target: searchFilters.target, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss, group: searchFilters.group, criticality: searchFilters.criticality, returnUrl: currentUrl()})"><i class="fa fa-fw m-r-xs"></i>Criticality</a></li><li><a ui-sref="app.list_vulns_grouped({groupBy: \'type\', target: searchFilters.target, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss, group: searchFilters.group, criticality: searchFilters.criticality, returnUrl: currentUrl()})"><i class="fa fa-fw m-r-xs"></i>Vulnerability Type</a></li></ul></div><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="pull-right btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>Filter</span></button><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><p ng-if="noTargetsOrScansInSystem && !loadingTracker.active()"><strong>{{::\'No Targets created yet.\'|translate}} </strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">{{::\'Create new Target\'|translate}}</a></p><ax-target-vulns ax-no-animate ng-hide="noTargetsOrScansInSystem" search-query="searchFilters.searchQuery" layout-save-key="list-vulns" on-selection-changed="onVulnerabilitiesSelectionChanged(items)" class="h-full"></ax-target-vulns></div></div></div></div></div></div>'),
68 e.put("/templates/vulns/result-details/result-details.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><button ng-click="onRecheckVulnerability()" ng-if="currentUser.features.vuln_retest && vuln.source !== \'Network Scan\'" class="btn btn-default">Retest</button></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><div class="panel panel-default"><div class="panel-body"><ax-vuln-details vuln="vuln"></ax-vuln-details></div></div></div></div></div></div></div></div>'),
69 e.put("/templates/vulns/vuln-details/vuln-details.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-dropdown class="btn-group"><button uib-dropdown-toggle class="btn btn-default"><span class="m-r-xs">{{::\'Mark As\'|translate}}</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ng-click="changeVulnStatus(\'open\')">{{::\'Open\'|translate}}</a></li><li><a ng-click="changeVulnStatus(\'fixed\')">{{::\'Fixed\'|translate}}</a></li><li><a ng-click="changeVulnStatus(\'ignored\')">{{::\'Ignored\'|translate}}</a></li><li><a ng-click="changeVulnStatus(\'false_positive\')">{{::\'False Positive\'|translate}}</a></li></ul></div><button ng-click="onRecheckVulnerability()" ng-if="currentUser.features.vuln_retest && vuln.source !== \'Network Scan\'" class="btn btn-default">Retest</button><div ng-if="currentUser.features.bug_tracking_integration && currentUser.permissions.createIssue" uib-dropdown uib-tooltip="{{::\'Please select at least one vulnerability\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onCreateIssues()" class="btn btn-default">{{::\'Send To Issue Tracker\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><div class="panel panel-default"><div class="panel-body"><ax-vuln-details vuln="vuln"></ax-vuln-details></div></div></div></div></div></div></div></div>'),
70 e.put("/templates/components/vulns/scan-vulns/scan-vulns.component.html", '<!DOCTYPE html><div ng-if="$ctrl.groupBy" ax-overlay="$ctrl.loadingTracker.active()" ui-grid="$ctrl.vulnTypeList.gridOptions" ui-grid-save-state ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid w-full h-full"></div><div ng-if="!$ctrl.groupBy" ax-overlay="$ctrl.loadingTracker.active()" ui-grid="$ctrl.vulnList.gridOptions" ui-grid-save-state ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div>'),
71 e.put("/templates/components/vulns/target-vulns/target-vulns.component.html", '<!DOCTYPE html><div ng-if="$ctrl.groupBy" ax-overlay="$ctrl.loadingTracker.active()" ui-grid="$ctrl.vulnTypeList.gridOptions" ui-grid-save-state ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div><div ng-if="!$ctrl.groupBy" ax-overlay="$ctrl.loadingTracker.active()" ui-grid="$ctrl.vulnList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div>'),
72 e.put("/templates/components/vulns/vuln-details/vuln-details.component.html", '<!DOCTYPE html><div class="container-fluid ax-vulnerability-details"><div class="row"><h3 class="m-t-sm m-b-sm">{{$ctrl.vuln.displayName}}<img ng-if="$ctrl.vuln.isAcuSensor" style="padding: 0 10px 0 10px;" src="/images/acu-sensor.png" alt="Acunetix logo" class="pull-right"></h3></div><div class="row"><ul ng-switch="$ctrl.vuln.severity" class="list-inline m-b-md"><li ng-switch-when="3"><div class="label label-danger text-white">High</div></li><li ng-switch-when="2"><div class="label label-warning text-white">Medium</div></li><li ng-switch-when="1"><div class="label label-info text-white">Low</div></li><li ng-switch-when="0"><div class="label label-success text-white">Informational</div></li><li><div class="label label-default">{{$ctrl.vuln.status|axVulnStatus}}</div></li><li ng-if="$ctrl.vuln.issueId"><div uib-tooltip="{{::\'This vulnerability has been reported to issue tracker\'|translate}}" class="label label-default">{{::\'Issue #\'|translate}}{{$ctrl.vuln.issueId}}</div></li><li ng-if="$ctrl.vuln.continuous"><div class="label label-default">Detected by continuous scanning</div></li></ul></div><div ng-if="$ctrl.vuln.description" class="row"><div ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.description" class="ax-vulnerability-details__heading m-b-sm">Vulnerability description</div><div class="m-b-md"><p ng-bind-html="$ctrl.vuln.description"></p><p ng-if="$ctrl.vuln.url" translate style="white-space: normal;word-break: break-word;word-wrap: break-word"><span>The vulnerability affects </span><span class="font-bold">{{$ctrl.vuln.url}}</span><span ng-if="$ctrl.vuln.parameter" class="font-bold"> , {{$ctrl.vuln.parameter}}</span></p><p ng-if="$ctrl.vuln.name" translate>Discovered by <span class="font-bold">{{$ctrl.vuln.name}}</span></p></div></div><div ng-if="$ctrl.vuln.details" class="row"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.attackDetails" class="ax-vulnerability-details__heading">Attack details</p><p ng-bind-html="$ctrl.vuln.details" class="m-b-md"></p></div><div ng-if="$ctrl.vuln.request" class="row pos-rlt"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.request" class="ax-vulnerability-details__heading">HTTP request</p><div><pre ng-bind="$ctrl.vuln.request" class="ax-wrap-text ax-vulnerability-details__request m-b-md"></pre><button ngclipboard ngclipboard-success="$ctrl.onClipboardSuccess(e)" ngclipboard-error="$ctrl.onClipboardError(e)" data-clipboard-text="{{$ctrl.vuln.request}}" ng-mouseleave="$ctrl.disableClipboardToolTip()" uib-tooltip="{{$ctrl.clipboardTooltipText}}" tooltip-trigger="\'none\'" tooltip-is-open="$ctrl.clipboardTooltipEnabled" class="btn btn-default ax-copy-button"><i class="fa fa-clipboard m-r-xs"></i>Copy to clipboard</button></div></div><div ng-if="$ctrl.vuln.responseInfo" class="row pos-rlt"><p ng-click="$ctrl.onClickDisplayHTTPResponse($event.currentTarget)" ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.response" class="ax-vulnerability-details__heading">HTTP response</p><div><pre ng-bind="$ctrl.vuln.response" class="ax-wrap-text ax-vulnerability-details__request m-b-md"></pre><button ngclipboard ngclipboard-success="$ctrl.onClipboardResponseSuccess(e)" ngclipboard-error="$ctrl.onClipboardResponseError(e)" data-clipboard-text="{{$ctrl.httpResponse}}" ng-mouseleave="$ctrl.disableClipboardResponseToolTip()" uib-tooltip="{{$ctrl.clipboardResponseTooltipText}}" tooltip-trigger="\'none\'" tooltip-is-open="$ctrl.clipboardResponseTooltipEnabled" class="btn btn-default ax-copy-button"><i class="fa fa-clipboard m-r-xs"></i>Copy to clipboard</button></div></div><div ng-if="$ctrl.vuln.response" class="row"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.responseHeaders" class="ax-vulnerability-details__heading">Response headers</p><pre class="m-b-md ax-wrap-text">{{$ctrl.vuln.response}}</pre></div><div ng-if="$ctrl.vuln.impact" class="row"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.impact" class="ax-vulnerability-details__heading">The impact of this vulnerability</p><p ng-bind-html="$ctrl.vuln.impact" class="m-b-md"></p></div><div ng-if="$ctrl.vuln.recommendation" class="row"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.recommendation" class="ax-vulnerability-details__heading">How to fix this vulnerability</p><p ng-bind-html="$ctrl.vuln.recommendation" class="m-b-md"></p></div><div ng-if="$ctrl.vuln.classification" class="row ax-vulnerability-details__classification"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.classification" class="ax-vulnerability-details__heading">Classification</p><div class="m-b-md"><ul ng-if="$ctrl.vuln.classification.cwe.length > 0" class="list-inline m-b-none"><li style="padding-right:0"><a target="_blank" href="https://cwe.mitre.org/" style="display:inline-block;" class="w-xxs">CWE</a></li><li style="padding-left:0" ng-repeat="cwe in $ctrl.vuln.classification.cwe"><a target="_blank" ng-href="https://cwe.mitre.org/data/definitions/{{cwe}}.html">CWE-{{cwe}}</a></li></ul><ul ng-if="$ctrl.vuln.classification.cve.length > 0" class="list-inline m-b-none"><li style="padding-right:0"><a target="_blank" href="https://cve.mitre.org/" style="display:inline-block;" class="w-xxs">CVE</a></li><li style="padding-left:0" ng-repeat="cve in $ctrl.vuln.classification.cve"><a target="_blank" ng-href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-{{cve}}.html">CVE-{{cve}}</a></li></ul><ul ng-if="$ctrl.vuln.classification.cvss" class="list-unstyled"><li><a target="_blank" href="https://www.first.org/cvss/cvss-guide" style="display:inline-block;" class="w-xxs">CVSS </a><span>{{::\'Base score: \'}} </span><span class="font-bold">{{$ctrl.vuln.classification.cvss.score}} — </span><a target="_blank" ng-href="{{$ctrl.vuln.classification.cvss.vectorLink}}">{{$ctrl.vuln.classification.cvss.vector}}</a></li><li ng-repeat="metric in $ctrl.vuln.classification.cvss.metrics" style="margin-left: 60px"><span>{{metric.metricName}}</span><span>: </span><a target="_blank" href="https://www.first.org/cvss/specification-document" uib-tooltip-html="metric.description">{{metric.valueName}}</a></li></ul></div></div><div ng-if="$ctrl.vuln.longDescription" class="row"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.longDescription" class="ax-vulnerability-details__heading">Detailed information</p><p ng-bind-html="$ctrl.vuln.longDescription" class="m-b-md"></p></div><div ng-if="$ctrl.vuln.references.length > 0" class="row"><p ax-vuln-details-collapsible-section="$ctrl.sectionVisibility.references" class="ax-vulnerability-details__heading">Web References</p><ul class="m-b-md ax-vulnerability-details__refs"><li ng-repeat="item in $ctrl.vuln.references"><a ng-href="{{item.href}}" target="_blank">{{item.rel}}</a></li></ul></div></div>'),
73 e.put("/templates/modals/2fa/otp-code/otp-code.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Acunetix</h4></div><div class="modal-body"><div class="container-fluid"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error" class="row"><span>{{$ctrl.error|translate}}</span></uib-alert><div class="row"><p>Please enter the code generated by your Authenticator app</p><fieldset ng-disabled="$ctrl.uiState === \'validating\'" class="no-border"><form novalidate name="$ctrl.verificationForm" class="form-inline"><div ng-class="{\'has-error\': $ctrl.verificationForm.verificationCode.$invalid && $ctrl.verificationForm.verificationCode.$touched}" class="form-group"><input name="verificationCode" type="text" pattern="[0-9]{6}" maxlength="6" ng-model="$ctrl.verificationCode" required autofocus aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="$ctrl.verificationForm.verificationCode.$error" ng-if="$ctrl.verificationForm.verificationCode.$touched && $ctrl.verificationForm.verificationCode.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="pattern">Please enter a 6 digit number</span></div></div></form></fieldset></div><div ng-if="$ctrl.uiState === \'invalid\'" class="row"><p class="text-danger">The code is not valid.</p></div></div></div><div class="modal-footer clearfix"><div class="pull-left"></div><div class="pull-right"><button type="button" ng-click="$ctrl.onConfirmCode()" ng-disabled="$ctrl.uiState === \'validating\' || $ctrl.verificationForm.$invalid" class="btn btn-dark">Confirm Code</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Close</button></div></div></div>'),
74 e.put("/templates/modals/2fa/otp-disable/otp-disable.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Acunetix</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><div ng-bind-html="$ctrl.error"></div></uib-alert></div><div ng-if="$ctrl.furtherInfo" class="row"><p>An email has been sent to <strong>{{$ctrl.credentials.email}}</strong> with further instructions to reset your password.</p></div><div ng-if="!$ctrl.furtherInfo"><div class="row"><p ng-if="!$ctrl.hideEmailField">Are you sure you want to disable Two Factor Authentication? You must provide your account password to confirm.</p><p ng-if="$ctrl.hideEmailField">Are you sure you want to disable Two Factor Authentication? You must provide your account email and password to confirm.</p></div><div class="row"><form novalidate name="$ctrl.credentialsForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.credentialsForm.email.$invalid && $ctrl.credentialsForm.email.$touched}" class="form-group"><label class="control-label col-md-3">Email</label><div class="col-md-9"><input type="email" name="email" ng-model="$ctrl.credentials.email" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="$ctrl.credentialsForm.email.$error" ng-if="$ctrl.credentialsForm.email.$touched && $ctrl.credentialsForm.email.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': $ctrl.credentialsForm.password.$invalid && $ctrl.credentialsForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Current Password</label><div class="col-md-9"><input type="password" name="password" ng-model="$ctrl.credentials.password" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="$ctrl.credentialsForm.password.$error" ng-if="$ctrl.credentialsForm.password.$touched && $ctrl.credentialsForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div></form></div></div></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onDisableTOTP()" ng-disabled="$ctrl.credentialsForm.$invalid" ng-if="!$ctrl.furtherInfo" class="btn btn-danger">Disable</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div></div>'),
75 e.put("/templates/modals/2fa/otp-enable/otp-enable.modal.html", '<!DOCTYPE html><div ax-overlay="$ctrl.loadingTracker.active()"><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'Close\'|translate}}" class="close">×</button><h4 class="modal-title">Acunetix</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><uib-alert type="danger" role="alert" closeable="false" ng-if="$ctrl.error"><div ng-bind-html="$ctrl.error"></div></uib-alert></div><div ng-show="$ctrl.options.isSetup" class="row"><p translate>You must set up Two Factor Authentication before proceeding</p></div><div ng-show="!$ctrl.options.isSetup" class="row"><p translate>Are you sure you want to enable Two Factor Authentication? Please provide your account\'s password to continue.</p></div><div class="row"><form novalidate name="$ctrl.otpConfigForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.otpConfigForm.password.$invalid && $ctrl.otpConfigForm.password.$touched}" class="form-group"><label for="otpConfigForm_password" class="control-label col-md-3">Current Password</label><div class="col-md-9"><input id="otpConfigForm_password" type="password" name="password" ng-model="$ctrl.otpConfigState.password" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="$ctrl.otpConfigForm.password.$error" ng-if="$ctrl.otpConfigForm.password.$touched && $ctrl.otpConfigForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><div class="col-md-9 col-md-offset-3"><qrcode data="{{$ctrl.otpConfigState.href}}" href="{{$ctrl.otpConfigState.href}}" size="150"></qrcode></div></div><div class="form-group"><div class="col-md-9 col-md-offset-3"><span class="font-fixed">{{$ctrl.otpConfigState.secretPretty}}</span></div></div><div class="form-group"><div class="col-md-12"><span>Please provide two consecutive codes generated by your Authenticator app.</span></div></div><div ng-class="{\'has-error\': $ctrl.otpConfigForm.firstToken.$invalid && $ctrl.otpConfigForm.firstToken.$touched}" class="form-group"><label class="control-label col-md-3">First Code</label><div class="col-md-9"><input name="firstToken" ng-model="$ctrl.otpConfigState.firstToken" type="text" pattern="[0-9]{6}" maxlength="6" required aria-autocomplete="off" autocomplete="off" class="form-control w-sm"><div ng-messages="$ctrl.otpConfigForm.firstToken.$error" ng-if="$ctrl.otpConfigForm.firstToken.$touched && $ctrl.otpConfigForm.firstToken.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="pattern">Please enter a 6 digit number</span></div></div></div><div ng-class="{\'has-error\': $ctrl.otpConfigForm.secondToken.$invalid && $ctrl.otpConfigForm.secondToken.$touched}" class="form-group"><label class="control-label col-md-3">Second Code</label><div class="col-md-9"><input name="secondToken" ng-model="$ctrl.otpConfigState.secondToken" type="text" pattern="[0-9]{6}" maxlength="6" required aria-autocomplete="off" autocomplete="off" class="form-control w-sm"><div ng-messages="$ctrl.otpConfigForm.secondToken.$error" ng-if="$ctrl.otpConfigForm.secondToken.$touched && $ctrl.otpConfigForm.secondToken.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="pattern">Please enter a 6 digit number</span></div></div></div></form></div></div></div><div class="modal-footer"><button type="button" ng-click="$ctrl.onEnableTOTP()" ng-disabled="$ctrl.otpConfigForm.$invalid" class="btn btn-dark">Enable</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">Cancel</button></div></div>'),
76 e.put("/templates/scans/list-scan/cell/address.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><a ui-sref=\"app.scan_details({scanId: row.entity.scanId, resultId: row.entity.resultId || 'default', view: 'stats', returnUrl: grid.appScope.currentUrl()})\">{{row.entity.target.address}}</a></div>"),
77 e.put("/templates/scans/list-scan/cell/schedule.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><div style="display: inline-block"><div ng-if="row.entity.status === \'continuous\'">{{row.entity.status|axScanStatus|translate}}</div><div ng-if="row.entity.status !== \'continuous\'"><span ng-if="row.entity.status === \'queued\' || row.entity.status === \'starting\'">{{::\'Scan is starting\'|translate}}</span><span ng-if="row.entity.running"><span ng-if="row.entity.lastRun">{{::\'Running since\'|translate}} {{row.entity.lastRun|date:\'medium\'}}</span></span><span ng-if="!row.entity.running && row.entity.status !== \'queued\' && row.entity.status !== \'starting\'"><span ng-if="row.entity.nextRun"><span ng-if="!row.entity.schedule.timeSensitive">{{::\'Next run on\'|translate}} {{row.entity.nextRun|date}}</span><span ng-if="row.entity.schedule.timeSensitive">{{::\'Next run on\'|translate}} {{row.entity.nextRun|date:\'medium\'}}</span></span><span ng-if="!row.entity.nextRun && row.entity.lastRun">{{::\'Last run on\'|translate}} {{row.entity.lastRun|date:\'medium\'}}</span><span ng-if="!row.entity.schedule.disabled && row.entity.schedule.recurrence"><a ng-if="row.entity.status !== \'completed\'" ng-class="{\'text-muted\': row.entity.schedule.disabled}" ng-click="grid.appScope.editSchedule(row.entity)" uib-tooltip="{{::\'Edit schedule\'|translate}}" class="m-l-sm">{{row.entity.schedule.recurrence|axFormatRecurrence}}</a><span ng-if="row.entity.status === \'completed\'" class="text-muted m-l-sm">{{row.entity.schedule.recurrence|axFormatRecurrence}}</span></span></span></div></div><div ng-if="row.entity.schedule.disabled" style="display: inline-block" class="m-l-xs"><a ng-click="grid.appScope.editSchedule(row.entity)" uib-tooltip="{{::\'Edit schedule\'|translate}}" class="text-muted">{{::\'Disabled\'|translate}}</a></div></div>'),
78 e.put("/templates/scans/list-scan/cell/status.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span ng-class=\"{'text-danger': row.entity.status === 'pausing' || row.entity.status === 'failed' || row.entity.status === 'aborting' || row.entity.status === 'aborted', 'text-info': row.entity.status === 'processing'}\"><a ng-if=\"row.entity.eventLevel >= 1\" ui-sref=\"app.scan_details({scanId: row.entity.scanId, resultId: row.entity.resultId || 'default', view: 'events', returnUrl: grid.appScope.currentUrl()})\"><i ng-class=\"{'text-danger': row.entity.eventLevel >= 2, 'text-warning': row.entity.eventLevel === 1}\" class=\"fa fa-warning m-r-xs\"></i></a>{{row.entity.status|axScanStatus|translate}}</span></div>"),
79 e.put("/templates/scans/list-scan/cell/vuln-counters.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><ax-vuln-counters vulns="row.entity.severityCounts" scan-id="row.entity.resultId ? row.entity.scanId : null" return-url="grid.appScope.currentUrl()"></ax-vuln-counters></div>'),
80 e.put("/templates/scans/scan-details/grouped/grouped-scan-details-vulns.html", '<!DOCTYPE html><uib-alert ng-if="scan.status === \'failed\'" type="danger"><span>This scan failed</span><span ng-if="scan.failReason" translate>: {{scan.failReason}}</span></uib-alert><ax-scan-vulns ng-if="scan.scanId && scan.resultId" group-by="default" search-query="searchFilters.searchQuery" scan-id="scan.scanId" result-id="scan.resultId" layout-save-key="grouped-scan-details-vulns-default"></ax-scan-vulns>'),
81 e.put("/templates/scans/scan-details/grouped/grouped-scan-details.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" ng-class="{\'ax-grouped-scan-details-page--failed-scan\': currentSection === \'vulns\' && scan.status === \'failed\'}" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">Severity</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.severityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">Status</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.statusList"><span>{{::option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">CVSS</label><ui-select ng-model="searchFilters.cvss" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.cvssList"><span>{{::option.text|translate}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'The scan is not running\'|translate}}" tooltip-enable="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\' && scan.status !== \'pausing\'" class="btn-group"><button ng-disabled="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\' && scan.status !== \'pausing\'" type="button" ng-click="onStopScan()" class="btn btn-default">Stop Scan</button></div><div uib-tooltip="{{::\'The scan is not running\'|translate}}" tooltip-enable="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" ng-show="currentUser.hasFeature(\'pause_resume\')" class="btn-group"><button ng-disabled="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" type="button" ng-click="onPauseScan()" class="btn btn-default">Pause Scan</button></div><div uib-tooltip="{{::\'The scan is not paused\'|translate}}" tooltip-enable="scan.status !== \'paused\'" ng-show="currentUser.hasFeature(\'pause_resume\')" class="btn-group"><button ng-disabled="scan.status !== \'paused\'" type="button" ng-click="onResumeScan()" class="btn btn-default">Resume Scan</button></div><div uib-tooltip="{{::\'This scan has not completed yet\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">Generate Report</button></div><div uib-dropdown uib-tooltip="{{::\'This scan has not completed yet\'|translate}}" tooltip-enable="!canGenerateExport()" class="btn-group"><button uib-dropdown-toggle ng-disabled="!canGenerateExport()" class="btn btn-default"><span class="m-r-xs">WAF Export...</span><i class="caret"></i></button><ul uib-dropdown-menu><li ng-repeat="option in exportTemplateTypeList"><a ng-click="onExport(option.exportTypeId, option.sourceType)">{{option.name|translate}}</a></li></ul></div><div uib-dropdown ng-if="currentSection === \'vulns\'" class="btn-group"><button uib-dropdown-toggle class="btn btn-default"><span class="m-r-xs">{{::\'Group By: \'|translate}}{{groupByPretty|translate}}</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ui-sref="app.scan_details({scanId: scan.scanId, resultId: scan.resultId, view: currentSection, returnUrl: returnUrl, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss})"><i ui-sref-active="{\'fa-check\': \'app.scan_details({scanId: scan.scanId, resultId: scan.resultId, view: currentSection})\'}" class="fa fa-fw"></i> {{::\'None\'|translate}}</a></li><li><a ui-sref="app.scan_details_grouped({scanId: scan.scanId, resultId: scan.resultId, groupBy: \'type\', view: currentSection, returnUrl: returnUrl, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss})"><i ui-sref-active="{\'fa-check\': \'app.scan_details_grouped({scanId: scan.scanId, groupBy: "type", view: currentSection})\'}" class="fa fa-fw"></i> {{::\'Vulnerability Type\'|translate}}</a></li></ul></div><div ng-show="currentSection === \'vulns\'" class="btn-group pull-right"><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>Filter</span></button></div><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" ng-if="currentSection === \'vulns\'" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div ng-class="sections.currentIndex!==0?\'h-full\':\'\'" class="wrapper ax-page-content"><uib-tabset active="sections.currentIndex" class="bg-white-only h-full"><uib-tab ng-repeat="tab in sections.items track by $index" heading="{{tab.heading|translate}}" ng-if="tab.visible" class="h-full"><div ng-if="sections.currentIndex === $index" ui-view="{{tab.view}}" ng-class="{\'h-full\': $index !== 0}" style="padding-top: 20px" class="padder-md"></div></uib-tab></uib-tabset></div></div></div></div></div></div>'),
82 e.put("/templates/settings/scanning-profile/tree/header.html", '<!DOCTYPE html><div><div class="col-sm-4 text-left">Test</div><div class="col-sm-8 text-left">Description</div></div>'),
83 e.put("/templates/settings/scanning-profile/tree/node.html", '<!DOCTYPE html><div><div ng-style="{\'padding-left\': level * 15 + \'px\'}" class="col-sm-4 text-left"><ad-tree-browser-node-toggle></ad-tree-browser-node-toggle><input type="checkbox" style="margin-right: 5px; top: 2px; position: relative">{{::item.title}}</div><div class="col-sm-8 text-left">{{::item.description}}</div></div>'),
84 e.put("/templates/targets/list-targets/cell/address.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-if="grid.appScope.currentUser.permissions.targetConfig" ui-sref="app.target_config({targetId: row.entity.targetId, returnUrl: grid.appScope.currentUrl()})"><span>{{row.entity.address}}</span></a><span ng-if="!grid.appScope.currentUser.permissions.targetConfig">{{row.entity.address}}</span></div>'),
85 e.put("/templates/targets/list-targets/cell/status.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span ng-if=\"row.entity.continuousMode\">{{::'Continuous scanning is enabled'|translate}}</span><div ng-if=\"!row.entity.continuousMode\"><span ng-if=\"row.entity.lastScanStatus === 'processing'\"><a ng-if=\"!row.entity.continuousMode\" ui-sref=\"app.scan_details({scanId: row.entity.lastScanId, resultId: row.entity.lastScanResultId, view: 'stats', returnUrl: grid.appScope.currentUrl()})\">{{::'Scan running since'|translate}} {{row.entity.lastScanDate|date:'medium'}}</a></span><span ng-if=\"row.entity.lastScanDate && row.entity.lastScanStatus !== 'processing' && row.entity.lastScanStatus !== 'failed' && row.entity.lastScanStatus !== 'aborted'\">{{::'Last scanned on '|translate}}{{row.entity.lastScanDate|date:'medium'}}</span><div ng-if=\"row.entity.lastScanDate && row.entity.lastScanStatus === 'failed'\"><span>{{::'Last scanned on '}}{{row.entity.lastScanDate|date:'medium'}} </span><span class=\"text-danger\">(Failed)</span></div><div ng-if=\"row.entity.lastScanDate && row.entity.lastScanStatus === 'aborted'\"><span>{{::'Last scanned on '}}{{row.entity.lastScanDate|date:'medium'}} </span><span class=\"text-danger\">(Aborted)</span></div><span ng-if=\"!row.entity.lastScanDate\">Not scanned</span></div></div>"),
86 e.put("/templates/targets/list-targets/cell/vuln-counters.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><ax-vuln-counters vulns="row.entity.severityCounts" target-id="row.entity.targetId" return-url="grid.appScope.currentUrl()"></ax-vuln-counters></div>'),
87 e.put("/templates/targets/target-config/components/allowed-hosts.component.html", '<div class="container-fluid h-full"><div class="row"><p class="m-b-md"><i class="fa fa-fw fa-info text-dark m-r-xs"></i><span>{{::\'Some web applications span multiple domains. Insert any other domains that should be scanned when scanning this Target. Additional Hosts need to be created as Targets first.\'|translate}}</span></p></div><div class="row"><div class="m-b-md"><ui-select ng-model="$ctrl.dummy.target" on-select="$ctrl.onTargetSelected($item)"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.address}}</ui-select-match><ui-select-choices repeat="target.targetId as target in $ctrl.targetList|filter: {address: $select.search, available: true} track by target.targetId" refresh="$ctrl.searchTargets($select.search)" refresh-delay="400"><span>{{target.address|translate}}</span></ui-select-choices></ui-select></div></div><div class="row"><div ng-show="$ctrl.hostList.items.length > 0"><div ui-grid="$ctrl.hostList.gridOptions" ui-grid-resize-columns="ui-grid-resize-columns" ui-grid-save-state="ui-grid-save-state" style="height: 300px" class="ax-grid w-full"></div></div><div ng-show="$ctrl.hostList.items.length === 0"><p class="text-muted"><span>{{::\'No hosts defined yet\'|translate}}</span></p></div></div></div>'),
88 e.put("/templates/vulns/list-vulns/grouped/grouped-list-vulns.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="hbox hbox-auto-xs bg-light"><div class="vbox"><ax-filter-aside toggle-visibility="toggleFilter()" ng-class="{\'ax-filter-aside--visible\': filterAsideVisible}"><div ng-if="filterAsideVisible" class="container-fluid"><form novalidate><div class="form-group"><label class="control-label">{{::\'Target\'|translate}}</label><ui-select ng-model="searchFilters.target"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.address}}</ui-select-match><ui-select-choices repeat="option.targetId as option in searchFilters.targetList|filter:{address:$select.search}" refresh="searchTargets($select.search)" refresh-delay="400"><span>{{option.address|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'Severity\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.severityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_business_criticality" ax-no-animate class="form-group"><label class="control-label">{{::\'Business Criticality\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.criticalityList|filter:{text:$select.search}"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'Status\'|translate}}</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.statusList track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div class="form-group"><label class="control-label">{{::\'CVSS\'|translate}}</label><ui-select ng-model="searchFilters.cvss" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}" allow-clear="true">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in ::searchFilters.cvssList track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div><div ng-if="currentUser.features.target_groups" ax-no-animate class="form-group"><label class="control-label">{{::\'Group\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$item.name}}</ui-select-match><ui-select-choices repeat="option.groupId as option in searchFilters.groupList|filter:{name:$select.search}" refresh="searchGroups($select.search)" refresh-delay="400"><span>{{option.name}}</span></ui-select-choices></ui-select></div></form></div></ax-filter-aside><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-dropdown class="btn-group"><button uib-dropdown-toggle class="btn btn-default"><span class="m-r-xs">{{::\'Group By: \' | translate}}{{groupByPretty|translate}}</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ui-sref="app.list_vulns({target: searchFilters.target, status: searchFilters.status || \'open\', severity: searchFilters.severity, cvss: searchFilters.cvss, group: searchFilters.group, criticality: searchFilters.criticality})"><i class="fa fa-fw"></i> {{::\'None\'|translate}}</a></li><li ng-if="currentUser.features.target_business_criticality" ax-no-animate><a ui-sref="app.list_vulns_grouped({groupBy: \'criticality\', target: searchFilters.target, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss, group: searchFilters.group, criticality: searchFilters.criticality})"><i ui-sref-active="{\'fa-check\': \'app.list_vulns_grouped({groupBy: "criticality"})\'}" class="fa fa-fw"></i> {{::\'Criticality\'|translate}}</a></li><li><a ui-sref="app.list_vulns_grouped({groupBy: \'type\', target: searchFilters.target, status: searchFilters.status, severity: searchFilters.severity, cvss: searchFilters.cvss, group: searchFilters.group, criticality: searchFilters.criticality})"><i ui-sref-active="{\'fa-check\': \'app.list_vulns_grouped({groupBy: "type"})\'}" class="fa fa-fw"></i> {{::\'Vulnerability Type\'|translate}}</a></li></ul></div><button uib-btn-checkbox ng-model="filterAsideVisible" active-class="active" class="pull-right btn btn-default ax-filter-button"><i ng-class="{\'text-danger\': searchFilters.filterTags.length > 0}" class="fa fa-fw fa-filter"></i><span>{{::\'Filter\'|translate}}</span></button><ax-filter-tags tags="searchFilters.filterTags" remove-tag="removeFilterTag(tag)" toggle-aside="!filterAsideVisible ? toggleFilter() : null" class="btn-group pull-right"></ax-filter-tags></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><ax-target-vulns group-by="groupBy" search-query="searchFilters.searchQuery" return-url="currentUrl()" target-id="searchFilters.target" layout-save-key="{{\'grouped-list-vulns-\' + groupBy}}" class="h-full"></ax-target-vulns></div></div></div></div></div></div>'),
89 e.put("/templates/components/vulns/scan-vulns/cell-templates/grouped-name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ui-sref="app.scan_details({status: grid.appScope.status, type: row.entity.vulnTypeId, view: \'vulns\', scanId: grid.appScope.scanId, resultId: grid.appScope.resultId, returnUrl: grid.appScope.returnUrl})">{{row.entity.name}}</a></div>'),
90 e.put("/templates/components/vulns/scan-vulns/cell-templates/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ui-sref="app.result_details({scanId: grid.appScope.scanId, resultId: grid.appScope.resultId, vulnId: row.entity.vulnId, returnUrl: grid.appScope.returnUrl})">{{row.entity.displayName}}<img ng-if="row.entity.isAcuSensor" style="width: 90px; padding: 0 10px 0 10px;" src="/images/acu-sensor.png" alt="AcuSensor"></a></div>'),
91 e.put("/templates/components/vulns/scan-vulns/cell-templates/parameter.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><span class="font-fixed">{{row.entity.parameter}}</span></div>'),
92 e.put("/templates/components/vulns/scan-vulns/cell-templates/severity.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><ax-severity-indicator severity="{{row.entity.severity}}"></ax-severity-indicator></div>'),
93 e.put("/templates/components/vulns/target-vulns/cell-templates/address.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-if="grid.appScope.currentUser.permissions.targetConfig" ui-sref="app.target_config({targetId: row.entity.targetId, returnUrl: grid.appScope.returnUrl})">{{row.entity.url}}</a><span ng-if="!grid.appScope.currentUser.permissions.targetConfig">{{row.entity.url}}</span></div>'),
94 e.put("/templates/components/vulns/target-vulns/cell-templates/criticality.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><ax-criticality-indicator criticality="{{row.entity.criticality}}"></ax-criticality-indicator></div>'),
95 e.put("/templates/components/vulns/target-vulns/cell-templates/grouped-name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ui-sref="app.list_vulns({status: grid.appScope.status, type: row.entity.vulnTypeId, criticality: grid.appScope.groupBy === \'default\' ? grid.appScope.filterCriticality : undefined, group: grid.appScope.filterGroups, target: grid.appScope.targetId, returnUrl: grid.appScope.returnUrl})">{{row.entity.name}}</a></div>'),
96 e.put("/templates/components/vulns/target-vulns/cell-templates/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ui-sref="app.vuln_details({vulnId: row.entity.vulnId, returnUrl: grid.appScope.returnUrl})">{{row.entity.displayName}}<img ng-if="row.entity.isAcuSensor" style="width: 90px; padding: 0 10px 0 10px;" src="/images/acu-sensor.png" alt="AcuSensor"></a></div>'),
97 e.put("/templates/components/vulns/target-vulns/cell-templates/parameter.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><span class="font-fixed">{{row.entity.parameter}}</span></div>'),
98 e.put("/templates/components/vulns/target-vulns/cell-templates/severity.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><ax-severity-indicator severity="{{row.entity.severity}}"></ax-severity-indicator></div>'),
99 e.put("/templates/settings/system-config/sections/exclusion-hours/exclusion-hours.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="showSaveAction" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">Save</button></div><button ng-if="currentUser.permissions.manageExcludedHours" ng-click="onCreateProfile()" class="btn btn-default">Create Profile</button><div ng-if="currentUser.permissions.manageExcludedHours" uib-tooltip="{{::\'Please select at least one profile\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteSelectedProfiles()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Delete Selected</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><div ax-no-animate ui-grid="pageState.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
100 e.put("/templates/settings/system-config/sections/issue-trackers/issue-trackers.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div ng-if="!currentUser.isChildAccount" ax-no-animate class="btn-group"><button ng-click="onAddIssueTracker()" class="btn btn-default">Add Issue Tracker</button></div><div ax-no-animate ng-if="!currentUser.isChildAccount" uib-tooltip="{{::\'Please select at least one issue tracker\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteIssueTracker()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Delete</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><strong ng-if="issueTrackers.items.length === 0" ax-no-animate class="font-bold">No issue trackers configured yet</strong><div ng-show="issueTrackers.items.length > 0" ax-no-animate ui-grid="issueTrackers.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
101 e.put("/templates/settings/system-config/sections/notifications/notifications.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="showSaveAction" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">Save</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><div class="box-container"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': notifySettings.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="notifySettings.enabled" ng-change="onEnableChanged()"><i></i></label><span ng-class="{\'text-muted\': !notifySettings.enabled}">Notification Settings</span></div></div><div class="panel-body"><fieldset ng-disabled="!notifySettings.enabled"><div class="m-b-md"><p><i class="fa fa-fw fa-info text-dark m-r-xs"></i><span>{{::\'Used for user creation, scan and licensing notifications.\'|translate}}</span></p></div><form novalidate name="uiForms.settingsForm" class="form-horizontal"><div ng-class="{\'has-error\': uiForms.settingsForm.address.$invalid && uiForms.settingsForm.address.$touched}" class="form-group"><label class="control-label col-md-3">SMTP Server</label><div class="col-md-6"><input type="text" name="address" ng-model="notifySettings.address" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="uiForms.settingsForm.address.$error" ng-if="uiForms.settingsForm.address.$touched && uiForms.settingsForm.address.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.settingsForm.port.$invalid && uiForms.settingsForm.port.$touched}" class="form-group"><label class="control-label col-md-3">Port</label><div class="col-md-6"><input type="number" name="port" min="0" max="65535" ng-model="notifySettings.port" class="form-control"><div ng-messages="uiForms.settingsForm.port.$error" ng-if="uiForms.settingsForm.port.$touched && uiForms.settingsForm.port.$invalid" class="help-block"><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 65535</span></div></div></div><div ng-class="{\'has-error\': uiForms.settingsForm.fromAddress.$invalid && uiForms.settingsForm.fromAddress.$touched}" required class="form-group"><label class="control-label col-md-3">From Address</label><div class="col-md-6"><input type="email" name="fromAddress" ng-model="notifySettings.fromAddress" aria-autocomplete="off" autocomplete="off" required class="form-control"><div ng-messages="uiForms.settingsForm.fromAddress.$error" ng-if="uiForms.settingsForm.fromAddress.$touched && uiForms.settingsForm.fromAddress.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="email">Please enter a proper email address</span></div></div></div><div ng-class="{\'has-error\': uiForms.settingsForm.security.$invalid && uiForms.settingsForm.security.$touched}" class="form-group"><label class="control-label col-md-3">Security</label><div class="col-md-6"><ui-select name="security" ng-model="notifySettings.security" search-enabled="false" required ng-disabled="!notifySettings.enabled"><ui-select-match>{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="securityOption.value as securityOption in securityOptions track by securityOption.value"><span>{{securityOption.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="uiForms.settingsForm.security.$error" ng-if="uiForms.settingsForm.security.$touched && uiForms.settingsForm.security.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.settingsForm.address.$invalid && uiForms.settingsForm.address.$touched}" class="form-group"><div class="col-md-6 col-md-offset-3"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="notifySettings.authRequired"><i></i>This mail server requires authentication</label></div></div><div ng-if="notifySettings.authRequired" ax-no-animate><div ng-class="{\'has-error\': uiForms.settingsForm.username.$invalid && uiForms.settingsForm.username.$touched}" class="form-group"><label class="control-label col-md-3">Username</label><div class="col-md-6"><input name="username" type="text" ng-model="notifySettings.username" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="uiForms.settingsForm.username.$error" ng-if="uiForms.settingsForm.username.$touched && uiForms.settingsForm.username.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.settingsForm.password.$invalid && uiForms.settingsForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-6"><input name="password" type="password" ng-model="notifySettings.password" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="uiForms.settingsForm.password.$error" ng-if="uiForms.settingsForm.password.$touched && uiForms.settingsForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.settingsForm.retypePassword.$invalid && uiForms.settingsForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input name="retypePassword" type="password" ng-model="notifySettings.retypePassword" equal-to="notifySettings.password" aria-autocomplete="off" autocomplete="off" required class="form-control"><div ng-messages="uiForms.settingsForm.retypePassword.$error" ng-if="uiForms.settingsForm.retypePassword.$touched && uiForms.settingsForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></div></form></fieldset></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
102 e.put("/templates/settings/system-config/sections/proxy/proxy.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="showSaveAction" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">Save</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><div class="box-container"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': proxySettings.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="proxySettings.enabled" ng-change="onEnableChanged()"><i></i></label><span ng-class="{\'text-muted\': !proxySettings.enabled}">Proxy Settings</span></div></div><div class="panel-body"><fieldset ng-disabled="!proxySettings.enabled"><div class="m-b-md"><p><i class="fa fa-fw fa-info text-dark m-r-xs"></i><span>{{::\'Used for Product Updates, License Activations and AcuMonitor Requests.\'|translate}}</span></p></div><form novalidate name="uiForms.proxyForm" class="form-horizontal"><div ng-class="{\'has-error\': uiForms.proxyForm.protocol.$invalid && uiForms.proxyForm.protocol.$touched}" class="form-group"><label class="control-label col-md-3">Protocol</label><div class="col-md-6"><ui-select name="protocol" ng-model="proxySettings.protocol" search-enabled="false" required ng-disabled="!proxySettings.enabled"><ui-select-match>{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="protocolOption.value as protocolOption in protocolOptions track by protocolOption.value"><span>{{protocolOption.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="uiForms.proxyForm.protocol.$error" ng-if="uiForms.proxyForm.protocol.$touched && uiForms.proxyForm.protocol.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><fieldset ng-if="proxySettings.protocol !== \'none\'"><div ng-class="{\'has-error\': uiForms.proxyForm.address.$invalid && uiForms.proxyForm.address.$touched}" class="form-group"><label class="control-label col-md-3">Address</label><div class="col-md-6"><input name="address" type="text" aria-autocomplete="off" autocomplete="off" ng-model="proxySettings.address" required class="form-control"><div ng-messages="uiForms.proxyForm.address.$error" ng-if="uiForms.proxyForm.address.$touched && uiForms.proxyForm.address.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.proxyForm.port.$invalid && uiForms.proxyForm.port.$touched}" class="form-group"><label class="control-label col-md-3">Port</label><div class="col-md-6"><input name="port" type="number" min="0" max="65535" ng-model="proxySettings.port" required class="form-control"><div ng-messages="uiForms.proxyForm.port.$error" ng-if="uiForms.proxyForm.port.$touched && uiForms.proxyForm.port.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 65535</span></div></div></div><div class="form-group"><div class="col-md-6 col-md-offset-3"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="proxySettings.authRequired"><i></i>This proxy server requires authentication</label></div></div><div ng-if="proxySettings.authRequired" ax-no-animate><div ng-class="{\'has-error\': uiForms.proxyForm.username.$invalid && uiForms.proxyForm.username.$touched}" class="form-group"><label class="control-label col-md-3">Username</label><div class="col-md-6"><input name="username" type="text" ng-model="proxySettings.username" required aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="uiForms.proxyForm.username.$error" ng-if="uiForms.proxyForm.username.$touched && uiForms.proxyForm.username.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.proxyForm.password.$invalid && uiForms.proxyForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-6"><input name="password" type="password" ng-model="proxySettings.password" aria-autocomplete="off" autocomplete="off" required class="form-control"><div ng-messages="uiForms.proxyForm.password.$error" ng-if="uiForms.proxyForm.password.$touched && uiForms.proxyForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.proxyForm.retypePassword.$invalid && uiForms.proxyForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input name="retypePassword" type="password" ng-model="proxySettings.retypePassword" equal-to="proxySettings.password" aria-autocomplete="off" autocomplete="off" required class="form-control"><div ng-messages="uiForms.proxyForm.retypePassword.$error" ng-if="uiForms.proxyForm.retypePassword.$touched && uiForms.proxyForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></div></fieldset></form></fieldset></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
103 e.put("/templates/settings/system-config/sections/target-groups/target-groups.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div ng-if="currentUser.permissions.addGroup" class="btn-group"><button ng-click="addGroupModal()" class="btn btn-default">Add Group</button></div><div ng-if="currentUser.permissions.removeGroup" uib-tooltip="{{::\'Please select at least one group\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteGroups()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Delete</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><strong ng-if="noGroupsCreated" ax-no-animate class="font-bold">No groups created yet</strong><div ng-hide="noGroupsCreated" ax-no-animate ui-grid="groupList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
104 e.put("/templates/settings/system-config/sections/scanning-profiles/scanning-profiles.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="showSaveAction" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">Save</button></div><div ng-if="canCreateScanningProfile" class="btn-group"><button ui-sref="app.scanning_profile({returnUrl: currentUrl()})" class="btn btn-default">New</button></div><div ng-if="canRemoveScanningProfile" class="btn-group"><button ng-disabled="selectedItemsCount() === 0" ng-click="onDeleteSelected()" class="btn btn-default">Delete Selected</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><div ax-no-animate ui-grid="gridOptions" ui-grid-save-state ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
105 e.put("/templates/settings/system-config/sections/updates/product-updates.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="showSaveAction" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">Save</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><form novalidate name="uiForms.productUpdates" class="form-horizontal"><div ng-if="currentUser.permissions.systemConfig" class="form-group"><div class="col-lg-5 col-lg-offset-2"><ui-select ng-model="productUpdates.updateMode" search-enabled="false" ng-disabled="!currentUser.features.updates"><ui-select-match allow-clear="false">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in productUpdates.updateModeList track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div></div><div class="form-group m-b-none"><div ng-class="{\'col-lg-offset-2\': currentUser.permissions.systemConfig}" class="col-lg-5"><div class="form-control-static"><strong class="m-r-xs">{{::\'Version:\'|translate}} {{versionInfo.versionFull}}</strong><em class="text-muted">({{versionInfo.buildDate|date:\'d MMMM yyyy\'}})</em></div><div class="form-control-static"><span ng-show="productUpdates.updateAvailable === false">{{::\'You are using the Latest Version\'|translate}}<button type="button" ng-click="productUpdateCheck()" ng-disabled="updateCheckTracker.active()" class="btn btn-default btn-sm pull-right"><div ax-no-animate ng-if="$ctrl.updateCheckTracker.active()" ng-class="{\'fa-spin\': $ctrl.updateCheckTracker.active()}" class="fa fa-fw fa-refresh m-r-xs"></div><span>{{::\'Check for Updates\'|translate}}</span></button></span><span ng-show="productUpdates.updateAvailable === true">{{::\'New build available. \'|translate}}<button ng-click="onEnableSystemUpdate()" class="btn btn-danger btn-xs">Update</button></span></div></div></div></form></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
106 e.put("/templates/settings/system-config/sections/users/users.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div class="btn-group"><button ng-click="onAddUserModal()" class="btn btn-default">Add User</button></div><div uib-tooltip="{{::\'Please select at least one user\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteUsers()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Delete</button></div><div uib-tooltip="{{::\'Please select at least one user\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onChangeEnableStatus(true)" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Enable</button></div><div uib-tooltip="{{::\'Please select at least one user\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onChangeEnableStatus(false)" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Disable</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><strong ng-show="noUsersCreated" class="font-bold">No users created yet</strong><div ng-hide="noUsersCreated" ui-grid="userList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
107 e.put("/templates/settings/system-config/sections/workers/workers.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" ng-if="showToolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><div ax-no-animate uib-tooltip="{{::\'Please select a worker\'|translate}}" tooltip-enable="selectedItemsCount([\'pending\', \'rejected\']) === 0" class="btn-group"><button ng-click="onAuthorizeWorkers()" ng-disabled="selectedItemsCount([\'pending\', \'rejected\']) === 0" class="btn btn-default">Authorize</button></div><div ax-no-animate uib-tooltip="{{::\'Please select a worker\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onRejectWorkers()" ng-disabled="selectedItemsCount([\'authorized\', \'pending\']) === 0" class="btn btn-default">Disable</button></div><div ax-no-animate uib-tooltip="{{::\'Please select a worker\'|translate}}" tooltip-enable="selectedItemsCount([\'authorized\', \'pending\']) === 0" class="btn-group"><button ng-click="onDeleteWorkers()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">Delete</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content h-full"><uib-tabset active="sections.current.index" class="bg-white-only h-full"><uib-tab ng-repeat="section in sections.items track by section.name" index="section.index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.current.name === section.name" class="padder-md h-full"><div style="padding-top: 20px" class="h-full"><strong ng-show="noWorkersRegistered" class="font-bold">No workers registered yet</strong><div ng-hide="noWorkersRegistered" ui-grid="workerList.gridOptions" ui-grid-save-state ui-grid-selection ui-grid-infinite-scroll ui-grid-auto-resize ui-grid-resize-columns class="ax-grid h-full"></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
108 e.put("/templates/targets/target-config/components/ssh-config/ssh-config.component.html", '<!DOCTYPE html><p class="m-b-md">SSH Credentials are only used for Network scans.</p><fieldset ng-disabled="$ctrl.settings.readOnly"><form novalidate name="$ctrl.settingsForm" class="form-horizontal"><div ng-class="{\'has-error\': $ctrl.settingsForm.authKind.$invalid && $ctrl.settingsForm.authKind.$touched}" class="form-group"><label for="settingsForm_authKind" class="control-label col-md-3">Authentication</label><div class="col-md-6"><ui-select id="settingsForm_authKind" name="authKind" ng-model="$ctrl.settings.kind" search-enabled="false" required><ui-select-match>{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="authOption.value as authOption in $ctrl.authOptions track by authOption.value"><span>{{authOption.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="$ctrl.settingsForm.authKind.$error" ng-if="$ctrl.settingsForm.authKind.$touched && $ctrl.settingsForm.authKind.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-if="$ctrl.settings.kind !== \'none\'" ax-no-animate><div ng-class="{\'has-error\': $ctrl.settingsForm.port.$invalid && $ctrl.settingsForm.port.$touched}" class="form-group"><label for="settingsForm_port" class="control-label col-md-3">Port</label><div class="col-md-6"><input id="settingsForm_port" name="port" type="number" min="0" max="65535" ng-model="$ctrl.settings.port" required class="form-control"><div ng-messages="$ctrl.settingsForm.port.$error" ng-if="$ctrl.settingsForm.port.$touched && $ctrl.settingsForm.port.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="min">Value must be greater than or equal to 0</span><span ng-message="max">Value must be less than or equal to 65535</span></div></div></div><div ng-class="{\'has-error\': $ctrl.settingsForm.username.$invalid && $ctrl.settingsForm.username.$touched}" class="form-group"><label for="settingsForm_username" class="control-label col-md-3">User Name</label><div class="col-md-6"><input id="settingsForm_username" type="text" aria-autocomplete="off" autocomplete="off" name="username" ng-model="$ctrl.settings.username" required class="form-control"><div ng-messages="$ctrl.settingsForm.username.$error" ng-if="$ctrl.settingsForm.username.$touched && $ctrl.settingsForm.username.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div></div><div ng-if="$ctrl.settings.kind === \'password\'" ax-no-animate><div ng-class="{\'has-error\': $ctrl.settingsForm.password.$invalid && $ctrl.settingsForm.password.$touched}" class="form-group"><label for="settingsForm_password" class="control-label col-md-3">Password</label><div class="col-md-6"><input id="settingsForm_password" name="password" type="password" aria-autocomplete="off" autocomplete="off" required ng-model="$ctrl.settings.password" class="form-control"><div ng-messages="$ctrl.settingsForm.password.$error" ng-if="$ctrl.settingsForm.password.$touched && $ctrl.settingsForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': $ctrl.settingsForm.retypePassword.$invalid && $ctrl.settingsForm.retypePassword.$touched}" class="form-group"><label for="settingsForm_retypePassword" class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input id="settingsForm_retypePassword" name="retypePassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="$ctrl.settings.retypePassword" equal-to="$ctrl.settings.password" class="form-control"><div ng-messages="$ctrl.settingsForm.retypePassword.$error" ng-if="$ctrl.settingsForm.retypePassword.$touched && $ctrl.settingsForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></div><div ng-if="$ctrl.settings.kind === \'key\'" ax-no-animate><div class="form-group"><label class="control-label col-md-3">SSH Private Key</label><div class="col-md-6"><ax-file-upload file="$ctrl.privateKeyFileUpload" uploading="$ctrl.privateKeyFilePendingUpload" on-file-selected="$ctrl.onPrivateKeyFileSelected(file)" on-file-removed="$ctrl.onPrivateKeyFileRemoved()"></ax-file-upload></div></div><div ng-class="{\'has-error\': $ctrl.settingsForm.keyPassword.$invalid && $ctrl.settingsForm.keyPassword.$touched}" class="form-group"><label for="settingsForm_keyPassword" class="control-label col-md-3">SSH Key Pass Phrase</label><div class="col-md-6"><input id="settingsForm_keyPassword" name="keyPassword" type="password" autocomplete="off" aria-autocomplete="off" ng-model="$ctrl.settings.keyPassword" class="form-control"></div></div><div ng-class="{\'has-error\': $ctrl.settingsForm.retypeKeyPassword.$invalid && $ctrl.settingsForm.retypeKeyPassword.$touched}" class="form-group"><label for="settingsForm_retypeKeyPassword" class="control-label col-md-3">Retype SSH Key Pass Phrase</label><div class="col-md-6"><input id="settingsForm_retypeKeyPassword" type="password" name="retypeKeyPassword" autocomplete="off" aria-autocomplete="off" ng-model="$ctrl.settings.retypeKeyPassword" equal-to="$ctrl.settings.keyPassword" class="form-control"><div ng-messages="$ctrl.settingsForm.retypeKeyPassword.$error" ng-if="$ctrl.settingsForm.retypeKeyPassword.$touched && $ctrl.settingsForm.retypeKeyPassword.$invalid" class="help-block"><span ng-message="equalTo">Passwords do not match</span></div></div></div></div></form></fieldset>'),
109 e.put("/templates/targets/target-config/sections/advanced/advanced.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'Please save your changes first\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'Scan\'|translate}}</button></div><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'Save\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><uib-tabset active="sections.currentIndex" class="bg-white-only"><uib-tab ng-repeat="section in sections.items track by section.name" index="$index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.currentIndex == $index" style="padding-top: 20px; padding-bottom: 20px" class="padder-md"><div class="box-container"><div ng-if="target.targetType !== \'network\'"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': techSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="techSection.enabled"><i></i></label><span ng-class="{\'text-muted\': !techSection.enabled}">Technologies</span></div></div><div ng-if="techSection.enabled" class="panel-body"><p class="m-b-md"><i class="fa fa-fw fa-info text-dark m-r-xs"></i><span>Acunetix can automatically detect the Technologies used by the web application. Use the following options to force Acunetix to scan the site using settings for the selected technology.</span></p><form novalidate="novalidate" class="form-horizontal"><div class="ax-tech-list"><div ng-repeat="techName in advConfig.technologyList" class="ax-tech-list__item"><label class="checkbox inline"><input type="checkbox" name="technologies[]" value="{{techName}}" style="opacity:0" ng-checked="advConfig.selectedTechnologies.indexOf(techName) > -1" ng-click="techSection.toggleTechnology(techName)" class="pos-abt"><i ng-class="{\'fa-check-square\': advConfig.selectedTechnologies.indexOf(techName) > -1, \'fa-square-o\': advConfig.selectedTechnologies.indexOf(techName) < 0}" class="fa fa-fw text-dark"></i><span>{{techName}}</span></label></div></div></form></div></div></div><div ng-if="target.targetType !== \'network\'"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': headersSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="headersSection.enabled"><i></i></label><span ng-class="{\'text-muted\': !headersSection.enabled}">Custom Headers</span></div></div><div ng-if="headersSection.enabled" class="panel-body"><form class="form-horizontal"><div class="form-group"><div class="col-md-6 m-b-sm"><div class="input-group"><input type="text" placeholder="{{::\'Example: X-My-Header: My-Value\'|translate}}" ng-model="headersSection.header" ng-keydown="headersSection.onAddHeader($event)" class="form-control"><div class="input-group-btn"><button type="button" ng-disabled="headersSection.header.length === 0" ng-click="headersSection.onAddHeader(null)" class="btn btn-default">Add</button></div></div></div></div><div class="form-group"><div class="col-md-6"><div class="ax-custom-headers"><div ng-repeat="header in advConfig.customHeaders track by header" class="ax-custom-headers__item"><div class="ax-custom-headers__header">{{header}}</div><a ng-click="headersSection.onRemoveHeader(header)" class="ax-custom-headers__action">Remove</a></div></div></div></div></form></div></div></div><div ng-if="target.targetType !== \'network\'"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': cookiesSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="cookiesSection.enabled"><i></i></label><span ng-class="{\'text-muted\': !cookiesSection.enabled}">Custom Cookies</span></div></div><div ng-if="cookiesSection.enabled" class="panel-body"><p class="m-b-md"><i class="fa fa-fw fa-info text-dark m-r-xs"></i><span>Crawler can be instructed to use your custom cookie values. Insert your custom cookies below.</span></p><div class="form-horizontal"><div class="form-group"><div class="col-lg-12 m-b-sm"><form novalidate="novalidate" name="uiForms.addCustomCookieForm" class="input-group"><input name="cookieUrl" type="url" placeholder="{{::\'Cookie URL\'|translate}}" style="width: 40%" ng-model="cookiesSection.cookiePath" required="required" class="form-control pull-left"><input type="text" placeholder="{{::\'Value\'|translate}}" style="width: 60%; margin-left: -1px;" ng-model="cookiesSection.cookieValue" ng-keydown="cookiesSection.onAddCookie($event)" required="required" class="form-control pull-left"><div class="input-group-btn"><button type="button" style="margin-left: -3px;" ng-disabled="!cookiesSection.cookiePath || !cookiesSection.cookieValue" ng-click="cookiesSection.onAddCookie(null)" class="btn btn-default">Add</button></div></form><div ng-messages="uiForms.addCustomCookieForm.cookieUrl.$error" ng-if="uiForms.addCustomCookieForm.cookieUrl.$touched && uiForms.addCustomCookieForm.cookieUrl.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="url">Please enter a valid URL (e.g. http://example.com)</span></div></div></div><div class="form-group"><div class="col-lg-12"><table class="table table-condensed table-bordered"><tbody><tr ng-repeat="item in advConfig.customCookies track by $index"><td style="word-break: break-all; width: 30%">{{item.url}}</td><td style="word-break: break-all">{{item.cookie}}</td><td style="width: 60px;"><a ng-click="cookiesSection.onRemoveCookie(item.url, item.cookie)">Remove</a></td></tr></tbody></table></div></div></div></div></div></div><div ng-if="target.targetType !== \'network\'"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': allowedHostsSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="allowedHostsSection.enabled"><i></i></label><span ng-class="{\'text-muted\': !allowedHostsSection.enabled}">Allowed Hosts</span></div></div><div ng-show="allowedHostsSection.enabled" class="panel-body"><ax-target-allowed-hosts app-scope-provider="allowedHostsSection"></ax-target-allowed-hosts></div></div></div><div ng-if="currentUser.features.bug_tracking_integration"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': issueTrackerSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="issueTrackerSection.enabled"><i></i></label><span ng-class="{\'text-muted\': !issueTrackerSection.enabled}">Issue Tracker</span></div></div><div ng-if="issueTrackerSection.enabled" class="panel-body"><p ng-if="issueTrackerSection.issueTrackers.length === 0"><span class="m-r-xs">No issue tracker configured.</span><span ng-if="!currentUser.isChildAccount"><a ng-click="issueTrackerSection.onConfigureIssueTracker()" class="m-r-xs">Configure</a><span>an issue tracker first.</span></span></p><div ng-if="issueTrackerSection.issueTrackers.length > 0" class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Issue Tracker</label><div class="col-md-6"><ui-select ng-model="advConfig.issueTrackerId" search-enabled="false"><ui-select-match allow-clear="false" placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.name|translate}}</ui-select-match><ui-select-choices repeat="option.issueTrackerId as option in issueTrackerSection.issueTrackers track by option.issueTrackerId"><span>{{option.name|translate}}</span></ui-select-choices></ui-select></div></div></div></div></div></div><div><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center" class="panel-title"><span>{{\'Excluded Hours\'|translate}}</span></div></div><div ng-if="excludedHoursSection.enabled" class="panel-body"><div class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Profiles</label><div class="col-md-6"><ui-select ng-model="advConfig.excludedHoursId" search-enabled="false" style="margin-bottom: 20px"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.name|translate}}</ui-select-match><ui-select-choices repeat="option.excludedHoursId as option in excludedHoursSection.profiles track by option.excludedHoursId"><span>{{option.name|translate}}</span></ui-select-choices></ui-select><a href="/#/settings/excluded-hours/">Configure</a><span> profiles</span></div></div></div></div></div></div><div ng-if="target.targetType !== \'network\' && currentUser.features.multi_engine"><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center" class="panel-title"><label ng-class="{\'bg-success\': scanningEngineSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="scanningEngineSection.enabled"><i></i></label><span ng-class="{\'text-muted\': !scanningEngineSection.enabled}">Scanning Engine</span></div></div><div ng-if="scanningEngineSection.enabled" class="panel-body"><div class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Engines</label><div class="col-md-6"><ui-select ng-model="scanningEngineSection.wvsWorkerId" search-enabled="false"><ui-select-match placeholder="{{::\'Choose...\'|translate}}">{{$select.selected.description|translate}}</ui-select-match><ui-select-choices repeat="option.workerId as option in scanningEngineSection.workers track by option.workerId"><span>{{option.description|translate}}</span></ui-select-choices></ui-select></div></div></div></div></div></div><div ng-if="currentUser.role === \'tech_admin\' || !currentUser.isChildAccount"><div class="m-b-sm"><label class="i-checks i-checks-sm inline"><input type="checkbox" ng-model="advConfig.debug"><i></i>Debug scans for this target</label></div></div><button type="button" ng-if="!isTestWebsite && target.targetType !== \'network\'" ng-click="onResetAcuSensorPassword()" class="btn btn-danger m-b-xxl">Reset AcuSensor Password</button></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
110 e.put("/templates/targets/target-config/sections/crawl/crawl.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'Please save your changes first\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'Scan\'|translate}}</button></div><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'Save\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><uib-tabset active="sections.currentIndex" class="bg-white-only"><uib-tab ng-repeat="section in sections.items track by section.name" index="$index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.currentIndex == $index" style="padding-top: 20px; padding-bottom: 20px" class="padder-md"><div class="box-container"><div class="panel panel-default"><div class="panel-heading"><div class="panel-title">Crawling / Navigation</div></div><div class="panel-body"><form novalidate name="uiForms.crawlerForm" class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">User Agent</label><div class="col-md-6"><div class="input-group"><input type="text" name="userAgent" ng-model="navigation.userAgent" class="form-control"><div uib-dropdown class="input-group-btn"><button uib-dropdown-toggle type="button" class="btn btn-default"><span class="m-r-xs">Choose...</span><span class="caret"></span></button><ul uib-dropdown-menu class="pull-right"><li ng-repeat="userAgent in navigationSection.userAgents track by userAgent.value"><a ng-click="navigationSection.onSelectUserAgent(userAgent.value)" class="text-ellipsis">{{userAgent.text}}</a></li></ul></div></div></div></div><div class="form-group"><label class="control-label col-md-3">Case Sensitive Paths</label><div class="col-md-3"><ui-select ng-model="navigation.caseSensitive" search-enabled="false"><ui-select-match allow-clear="false">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in navigationSection.caseSensitivePathOptions track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select></div></div><div class="form-group"><div class="col-md-6 col-md-offset-3"><label class="checkbox"><input type="checkbox" ng-model="navigation.limitCrawlerScope" style="opacity:0" class="pos-abt"><i ng-class="{\'fa-check-square\': navigation.limitCrawlerScope, \'fa-square-o\': !navigation.limitCrawlerScope}" class="fa fa-fw fa-check m-r-xs"></i>Limit crawling to address and sub-directories only</label></div></div><div class="form-group"><label class="control-label col-md-3">Excluded Paths</label><div class="col-md-6"><div class="input-group"><input type="text" placeholder="{{::\'Enter a pattern\'|translate}}" ng-keydown="onAddExcludedPathPattern($event)" ng-model="navigationSection.excludedPattern" class="form-control"><div class="input-group-btn"><button type="button" ng-click="onAddExcludedPathPattern(null)" ng-disabled="navigationSection.excludedPattern.length === 0" class="btn btn-default">Add</button></div></div><div class="help-block"><p><i class="fa fa-info m-r-xs"></i><span>Please note that the exclude paths are regular expressions</span></p></div></div></div><div ng-if="navigation.excludedPaths.length > 0" class="form-group"><div class="col-md-6 col-md-offset-3"><div class="ax-excluded-path-list"><div ng-repeat="path in navigation.excludedPaths track by path" class="ax-excluded-path-list__item"><div class="ax-excluded-path-list__path">{{path}}</div><a ng-click="onRemoveExcludedPath(path)" class="ax-excluded-path-list__action">Remove</a></div></div></div></div></form></div></div><div ng-if="target.targetType === \'default\'" class="panel panel-default"><div class="panel-heading"><div class="panel-title">Import Files</div></div><div class="panel-body"><div class="form-horizontal"><div class="form-group"><div class="col-md-6 col-md-offset-3"><i class="fa fa-info text-dark m-r-xs"></i><span>Files to be imported by crawler at start.</span><p class="m-t-sm">Accepted formats include text file with a list of URLs (.txt), Fiddler (.saz), Swagger (.json, .yaml or .yml), .WSDL, BURP saved (.xml) and state files, Selenium (.html, .side) or .HAR files.</p></div></div><div ng-repeat="importFile in imports.files track by importFile.uploadId" ng-if="!importFile.$$delete" class="form-group"><label ng-if="importFile.isNew && !importFile.$$add" class="control-label col-md-3">Choose File...</label><div ng-class="{\'col-md-offset-3\': !importFile.isNew || importFile.$$add}" class="col-md-6"><ax-file-upload file="importFile" uploading="importFile.$$uploading" on-file-selected="importsSection.onFileSelected(file, importFile.uploadId)" on-file-removed="importsSection.onFileRemoved(file)" disallow-change="!importFile.isNew || importFile.$add"></ax-file-upload></div></div></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
111 e.put("/templates/targets/target-config/sections/http/http.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'Please save your changes first\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'Scan\'|translate}}</button></div><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'Save\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><uib-tabset active="sections.currentIndex" class="bg-white-only"><uib-tab ng-repeat="section in sections.items track by section.name" index="$index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.currentIndex == $index" style="padding-top: 20px; padding-bottom: 20px" class="padder-md"><div class="box-container"><div><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': authConfig.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="authConfig.enabled" ng-change="httpSection.onEnabledChanged()"><i></i></label><span ng-class="{\'text-muted\': !authConfig.enabled}">HTTP Authentication</span></div></div><div ng-if="authConfig.enabled" class="panel-body"><fieldset ng-disabled="!authConfig.enabled"><form novalidate="novalidate" name="uiForms.authForm" class="form-horizontal"><div class="form-group"><div class="col-md-6 col-md-offset-3"><i class="fa fa-info text-dark m-r-xs"></i><span>Basic, Digest, NTLM and Kerberos (Windows only) are supported</span></div></div><div ng-class="{\'has-error\': uiForms.authForm.username.$invalid && uiForms.authForm.username.$touched}" class="form-group"><label class="control-label col-md-3">User Name</label><div class="col-md-6"><input type="text" aria-autocomplete="off" autocomplete="off" name="username" required="required" ng-model="authConfig.username" class="form-control"><div ng-messages="uiForms.authForm.username.$error" ng-if="uiForms.authForm.username.$touched && uiForms.authForm.username.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.authForm.password.$invalid && uiForms.authForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-6"><input type="password" aria-autocomplete="off" autocomplete="off" name="password" required="required" ng-model="authConfig.password" class="form-control"><div ng-messages="uiForms.authForm.password.$error" ng-if="uiForms.authForm.password.$touched && uiForms.authForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.authForm.retypePassword.$invalid && uiForms.authForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input type="password" aria-autocomplete="off" autocomplete="off" name="retypePassword" required="required" ng-model="authConfig.retypePassword" equal-to="authConfig.password" class="form-control"><div ng-messages="uiForms.authForm.retypePassword.$error" ng-if="uiForms.authForm.retypePassword.$touched && uiForms.authForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></form></fieldset></div></div></div><div><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': certificateSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="certificateSection.enabled" ng-change="certificateSection.onEnabledChanged()"><i></i></label><span ng-class="{\'text-muted\': !certificateSection.enabled}">Client Certificate</span></div></div><div ng-if="certificateSection.enabled" class="panel-body"><fieldset ng-disabled="!certificateSection.enabled"><form novalidate="novalidate" name="uiForms.certForm" class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Client Certificate</label><div class="col-md-6"><ax-file-upload accept=".crt,.cer" file="certConfig.certificate" uploading="certificateSection.uploadingCertificate" on-file-selected="certificateSection.onCertificateSelected(file)" on-file-removed="certificateSection.onCertificateRemoved()"></ax-file-upload></div></div><div class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-6"><input name="password" type="password" autocomplete="off" aria-autocomplete="off" ng-model="certConfig.password" class="form-control"></div></div><div class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input type="password" name="retypePassword" autocomplete="off" aria-autocomplete="off" ng-model="certConfig.retypePassword" equal-to="certConfig.password" class="form-control"><div ng-messages="uiForms.certForm.retypePassword.$error" ng-if="uiForms.certForm.retypePassword.$touched && uiForms.certForm.retypePassword.$invalid" class="help-block"><span ng-message="equalTo">Passwords do not match</span></div></div></div></form></fieldset></div></div></div><div><div class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': proxySettings.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="proxySettings.enabled" ng-change="proxySection.onEnabledChanged()"><i></i></label><span ng-class="{\'text-muted\': !proxySettings.enabled}">Proxy Server</span></div></div><div ng-if="proxySettings.enabled" class="panel-body"><fieldset ng-disabled="!proxySettings.enabled"><form novalidate="novalidate" name="uiForms.proxyForm" class="form-horizontal"><div ng-class="{\'has-error\': uiForms.proxyForm.protocol.$invalid && uiForms.proxyForm.protocol.$touched}" class="form-group"><label class="control-label col-md-3">Protocol</label><div class="col-md-6"><ui-select name="protocol" ng-model="proxySettings.protocol" search-enabled="false" required="required"><ui-select-match>{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="protocolOption.value as protocolOption in proxySection.protocolOptions track by protocolOption.value"><span>{{protocolOption.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="uiForms.proxyForm.protocol.$error" ng-if="uiForms.proxyForm.protocol.$touched && uiForms.proxyForm.protocol.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><fieldset ng-if="proxySettings.protocol !== \'none\'"><div ng-class="{\'has-error\': uiForms.proxyForm.address.$invalid && uiForms.proxyForm.address.$touched}" class="form-group"><label class="control-label col-md-3">Address</label><div class="col-md-6"><input name="address" type="text" aria-autocomplete="off" autocomplete="off" ng-model="proxySettings.address" required="required" class="form-control"><div ng-messages="uiForms.proxyForm.address.$error" ng-if="uiForms.proxyForm.address.$touched && uiForms.proxyForm.address.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.proxyForm.port.$invalid && uiForms.proxyForm.port.$touched}" class="form-group"><label class="control-label col-md-3">Port</label><div class="col-md-6"><input name="port" type="number" min="0" max="65535" ng-model="proxySettings.port" required="required" class="form-control"><div ng-messages="uiForms.proxyForm.port.$error" ng-if="uiForms.proxyForm.port.$touched && uiForms.proxyForm.port.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><div class="col-md-6 col-md-offset-3"><label class="i-checks i-checks-sm"><input type="checkbox" ng-model="proxySettings.authRequired"><i></i>{{::\'This proxy server requires authentication\'|translate}}</label></div></div><div ng-if="proxySettings.authRequired" ax-no-animate="ax-no-animate"><div ng-class="{\'has-error\': uiForms.proxyForm.username.$invalid && uiForms.proxyForm.username.$touched}" class="form-group"><label class="control-label col-md-3">Username</label><div class="col-md-6"><input name="username" type="text" ng-model="proxySettings.username" required="required" aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="uiForms.proxyForm.username.$error" ng-if="uiForms.proxyForm.username.$touched && uiForms.proxyForm.username.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.proxyForm.password.$invalid && uiForms.proxyForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-6"><input name="password" type="password" ng-model="proxySettings.password" aria-autocomplete="off" autocomplete="off" required="required" class="form-control"><div ng-messages="uiForms.proxyForm.password.$error" ng-if="uiForms.proxyForm.password.$touched && uiForms.proxyForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.proxyForm.retypePassword.$invalid && uiForms.proxyForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input name="retypePassword" type="password" ng-model="proxySettings.retypePassword" required="required" equal-to="proxySettings.password" aria-autocomplete="off" autocomplete="off" class="form-control"><div ng-messages="uiForms.proxyForm.retypePassword.$error" ng-if="uiForms.proxyForm.retypePassword.$touched && uiForms.proxyForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></div></fieldset></form></fieldset></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
112 e.put("/templates/targets/target-config/sections/general/general.html", '<!DOCTYPE html><div ax-overlay="loadingTracker.active()" class="vbox"><div role="toolbar" class="ax-page-toolbar btn-toolbar md-whiteframe-1dp"><button ax-back-button class="btn btn-default"></button><div uib-tooltip="{{::\'Please save your changes first\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'Scan\'|translate}}</button></div><div uib-tooltip="{{::\'No pending changes to save\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'Save\'|translate}}</button></div></div><div class="row-row"><div class="cell scrollable"><div class="cell-inner"><div class="wrapper ax-page-content"><uib-tabset active="sections.currentIndex" class="bg-white-only"><uib-tab ng-repeat="section in sections.items track by section.name" index="$index" heading="{{section.heading|translate}}" deselect="onChangeSection(sections.items[$selectedIndex].name, $event)"><div ng-if="sections.currentIndex == $index" style="padding-top: 20px; padding-bottom: 20px" class="padder-md"><div class="box-container"><!DOCTYPE html><div class="panel panel-default"><div class="panel-heading"><div class="panel-title">Target Info</div></div><div class="panel-body"><form novalidate name="uiForms.generalForm" class="form-horizontal"><div ng-class="{\'has-error\': uiForms.generalForm.address.$invalid && uiForms.generalForm.address.$touched}" class="form-group"><div class="col-md-6 col-md-offset-3"><h3 style="word-wrap: break-word">{{target.address}}</h3></div></div><div class="form-group"><label class="control-label col-md-3">Description</label><div class="col-md-6"><input type="text" name="description" ng-model="target.description" class="form-control"></div></div><div ax-no-animate ng-if="currentUser.features.target_business_criticality" ng-class="{\'has-error\': uiForms.generalForm.criticality.$invalid && uiForms.generalForm.criticality.$touched}" class="form-group"><label class="control-label col-md-3">Business Criticality</label><div class="col-md-6"><ui-select ng-model="target.criticality" search-enabled="false" name="criticality" required><ui-select-match allow-clear="false">{{$select.selected.text|translate}}</ui-select-match><ui-select-choices repeat="option.value as option in criticalityOptions track by option.value"><span>{{option.text|translate}}</span></ui-select-choices></ui-select><div ng-messages="uiForms.generalForm.criticality.$error" ng-if="uiForms.generalForm.criticality.$touched && uiForms.generalForm.criticality.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div class="form-group"><label class="control-label col-md-3">Scan Speed</label><div class="col-md-6"><slider type="text" ng-model="config.scanSpeed" ticks="scanSpeedOptions.ticks" ticks-labels="scanSpeedOptions.ticksLabels" min="1" max="4" step="1" slider-tooltip="hide" class="m-r m-l"></slider></div></div><div ng-if="target.targetType !== \'network\' && target.targetType !== \'demo\' && currentUser.features.continuous_scans" ax-no-animate class="form-group"><label class="control-label col-md-3">Continuous Scanning</label><div class="col-md-6"><div class="checkbox"><label ng-class="{\'bg-success\': target.continuousMode}" style="padding-left:0" uib-tooltip="{{::\'Continuous scanning cannot be enabled because the scans of this target require manual intervention\'|translate}}" tooltip-enable="target.scansRequireMI && !target.continuousMode" class="i-switch"><input type="checkbox" ng-model="target.continuousMode" ng-disabled="target.scansRequireMI && !target.continuousMode"><i></i></label></div></div></div><div ng-if="target.scansRequireMI" class="form-group"><div class="col-md-6 col-md-offset-3"><label class="i-checks i-checks-sm"><input type="checkbox" ng-checked="target.scansRequireMI" disabled="disabled"><i></i>Scans require manual intervention</label></div></div></form></div></div><!DOCTYPE html><div ng-if="target.targetType !== \'network\'" class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': siteLoginSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="siteLoginSection.enabled" ng-change="siteLoginSection.onEnabledChanged()"><i></i></label><span ng-class="{\'text-muted\': !siteLoginSection.enabled}">Site Login</span></div></div><div ng-if="siteLoginSection.enabled" style="padding-left:0; padding-right: 0" class="panel-body"><div class="list-group list-group-lg list-group-sp"><div class="list-group-item clearfix no-border"><label class="font-bold block i-checks i-checks-sm m-b-md"><input type="radio" ng-model="siteLogin.kind" value="automatic" ng-false-value="\'none\'"><i></i>Try to auto-login into the site</label><p ng-class="{\'m-b-md\': siteLogin.kind === \'automatic\', \'m-b-none\': siteLogin.kind !== \'automatic\'}" translate>Website\'s forms authentication in some cases can be identified automatically.\nThe automatic detection will try to identify the steps necessary to log in, the restricted links which should not be clicked in\norder to keep the session and the pattern by which a valid session can be identified. Please enter your credentials below.</p><fieldset ng-disabled="siteLogin.kind !== \'automatic\'" ng-if="siteLogin.kind === \'automatic\'"><form novalidate name="uiForms.authForm" class="form-horizontal"><div ng-class="{\'has-error\': uiForms.authForm.username.$invalid && uiForms.authForm.username.$touched}" class="form-group"><label class="control-label col-md-3">User Name</label><div class="col-md-6"><input type="text" aria-autocomplete="off" autocomplete="off" name="username" ng-model="siteLogin.credentials.username" required class="form-control"><div ng-messages="uiForms.authForm.username.$error" ng-if="uiForms.authForm.username.$touched && uiForms.authForm.username.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.authForm.password.$invalid && uiForms.authForm.password.$touched}" class="form-group"><label class="control-label col-md-3">Password</label><div class="col-md-6"><input name="password" type="password" aria-autocomplete="off" autocomplete="off" ng-model="siteLogin.credentials.password" required class="form-control"><div ng-messages="uiForms.authForm.password.$error" ng-if="uiForms.authForm.password.$touched && uiForms.authForm.password.$invalid" class="help-block"><span ng-message="required">This field is required</span></div></div></div><div ng-class="{\'has-error\': uiForms.authForm.retypePassword.$invalid && uiForms.authForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">Retype Password</label><div class="col-md-6"><input name="retypePassword" type="password" aria-autocomplete="off" autocomplete="off" ng-model="siteLogin.credentials.retypePassword" equal-to="siteLogin.credentials.password" required class="form-control"><div ng-messages="uiForms.authForm.retypePassword.$error" ng-if="uiForms.authForm.retypePassword.$touched && uiForms.authForm.retypePassword.$invalid" class="help-block"><span ng-message="required">This field is required</span><span ng-message="equalTo">Passwords do not match</span></div></div></div></form></fieldset></div><div ng-if="target.targetType === \'default\' || target.targetType === \'demo\'" class="list-group-item clearfix no-border"><label class="font-bold block i-checks i-checks-sm m-b-md"><input type="radio" ng-model="siteLogin.kind" value="sequence" ng-true-value="\'sequence\'" ng-false-value="\'none\'"><i></i>Use pre-recorded login sequence</label><p ng-class="{\'m-b-md\': siteLogin.kind === \'sequence\', \'m-b-none\': siteLogin.kind !== \'sequence\'}" translate>If your website requires forms authentication, you need to record the steps required to login on the website. This will be saved as a login sequence file and can be used later.\nYou can also specify a section of the website which you do not want to be crawled (for example links that will log you out from the website).</p><fieldset ng-disabled="siteLogin.kind !== \'sequence\'" ng-if="siteLogin.kind === \'sequence\'"><form novalidate name="uiForms.sequenceForm" class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">Login Sequence</label><div class="col-md-6"><ax-file-upload accept=".lsr" download-button="false" file="siteLogin.sequence" uploading="siteLoginSection.uploadingLoginSequence" on-file-selected="siteLoginSection.onSequenceSelected(file)" on-file-removed="siteLoginSection.onSequenceRemoved()"></ax-file-upload></div></div><div class="form-group"><div class="col-md-6 col-lg-offset-3 col-md-offset-3"><ul class="list-inline"><li class="b-r"><a ng-click="siteLoginSection.onOpenLSR()">New</a></li><li ng-if="siteLogin.sequence.uploadId" class="b-r"><a ng-click="siteLoginSection.onOpenLSR(true)">Edit</a></li><li ng-if="siteLogin.sequence.uploadId"><a ng-click="siteLoginSection.onDownloadLoginSequence()">Download</a></li>\x3c!-- TODO, show link to download if browser is unsupported?--\x3e</ul></div></div></form></fieldset></div></div></div></div><!DOCTYPE html><div ng-if="target.targetType !== \'demo\'" class="panel panel-default"><div class="panel-heading"><div style="display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': sshSettingsSection.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="sshSettingsSection.enabled" ng-change="sshSettingsSection.onEnabledChanged()"><i></i></label><span ng-class="{\'text-muted\': !sshSettingsSection.enabled}">SSH Credentials</span></div></div><div ng-if="sshSettingsSection.enabled" class="panel-body"><ax-target-ssh-settings _settings="sshSettingsSection.settings" _read-only="!loadingTracker.active()" on-change="sshSettingsSection.onChange(settings)" is-form-invalid="sshSettingsSection.isInvalid(isFormInvalid)"></ax-target-ssh-settings></div></div><!DOCTYPE html><div ng-if="target.targetType !== \'network\' || testWebsite.sensor" class="panel panel-default"><div class="panel-heading"><div style="display:flex; align-items:center;" class="panel-title"><label ng-class="{\'bg-success\': acuSensor.enabled}" class="i-switch m-r-sm"><input type="checkbox" ng-model="acuSensor.enabled"><i></i></label><span ng-class="{\'text-muted\': !acuSensor.enabled}">AcuSensor</span></div></div><div ng-if="acuSensor.enabled" class="panel-body pos-rlt"><img src="/images/acu-sensor.png" style="right:15px;top:15px" class="pos-abt"><div style="margin-right: 160px" class="m-b-md"><p>AcuSensor allows the scanner to gather more information from your PHP, .NET, or Java web applications, resulting in improved scan results and reduced false positives. Download and install AcuSensor for this Target before running the web scan.</p><p translate><strong>NOTE:</strong> <span>Avoid using AcuSensor on production systems.</span></p></div><ul ng-if="!testWebsite.sensor" class="list-inline"><li><button ng-click="downloadSensor(\'php\')" class="btn btn-default">Download PHP AcuSensor</button></li><li><button ng-click="downloadSensor(\'net\')" class="btn btn-default">Download .NET AcuSensor</button></li><li> <button ng-click="downloadSensor(\'java\')" class="btn btn-default">Download Java AcuSensor</button><a ng-if="showJavaSensorPDFLink" style="margin-left:20px;" translate href="https://www.acunetix.com/download/JAVA_AcuSensor-Installation_Instructions.zip" target="_blank">Java AcuSensor Installation Instructions</a></li></ul><strong ng-if="testWebsite.sensor"><i class="fa fa-info m-r-sm"></i><span>AcuSensor is automatically enabled on test websites</span></strong></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
113 e.put("/templates/settings/system-config/sections/exclusion-hours/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-if="row.entity.excludedHoursId" ng-click="grid.appScope.onEditProfile(row.entity)">{{row.entity.name}}</a><span ng-if="!row.entity.excludedHoursId">{{row.entity.name}}</span></div>'),
114 e.put("/templates/settings/system-config/sections/exclusion-hours/cols/selected.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><input type="radio" name="exclusionHoursDefaultSelectionOptions" ng-model="grid.appScope.pageState.excludedHoursId" ng-value="row.entity.excludedHoursId" ng-disabled="!grid.appScope.currentUser.permissions.changeDefaultExcludedHoursProfile"></div>'),
115 e.put("/templates/settings/system-config/sections/issue-trackers/cols/auth.html", '<!DOCTYPE html><div ng-switch="row.entity.bugTracker" class="ui-grid-cell-contents"><span ng-switch-when="jira">{{row.entity.auth.kind|axJiraBugTrackerAuthType}}</span><span ng-switch-when="tfs">NTLM</span><span ng-switch-when="github">Default</span></div>'),
116 e.put("/templates/settings/system-config/sections/issue-trackers/cols/issue-type.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span>{{row.entity.issueType.issueTypeName || '—'}}</span></div>"),
117 e.put("/templates/settings/system-config/sections/issue-trackers/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents cell-issue-tracker-name"><a ng-if="!grid.appScope.currentUser.isChildAccount" ng-click="grid.appScope.onConfigureIssueTracker(row.entity)">{{row.entity.name}}</a><span ng-if="grid.appScope.currentUser.isChildAccount">{{row.entity.name}}</span><button ng-click="grid.appScope.onCheckIssueTracker(row.entity)" class="btn btn-xs btn-default btn-checkconnection">{{::\'Check Connection\'|translate}}</button></div>'),
118 e.put("/templates/settings/system-config/sections/issue-trackers/cols/url.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><span>{{row.entity.bugTracker|axBugTrackerName}} ({{row.entity.url}})</span></div>'),
119 e.put("/templates/scans/scan-details/sections/sessions/cells/actions.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-if="row.entity.resultId !== grid.appScope.scan.resultId" ui-sref="app.scan_details({scanId: row.entity.scanId, resultId: row.entity.resultId, view: \'stats\', returnUrl: grid.appScope.currentUrl()})">View Details</a><span ng-if="row.entity.resultId === grid.appScope.scan.resultId" class="text-muted">Current Session</span></div>'),
120 e.put("/templates/scans/scan-details/sections/sessions/cells/status.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span ng-class=\"{'text-info': row.entity.status === 'processing', 'text-danger font-bold': row.entity.status === 'failed' || row.entity.status === 'aborted' || row.entity.status === 'aborting'}\">{{row.entity.status | axScanStatus}}</span></div>"),
121 e.put("/templates/settings/system-config/sections/target-groups/cols/count.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><span style="display: inline-block; width: 20px;" class="m-r-sm">{{row.entity.targetCount || \'—\'}}</span><a ui-sref="app.edit_group_targets({groupId: row.entity.groupId, returnUrl: grid.appScope.currentUrl()})"><span ng-if="grid.appScope.currentUser.permissions.changeGroupMembership">Change Group Membership</span><span ng-if="!grid.appScope.currentUser.permissions.changeGroupMembership">View Group Membership</span></a></div>'),
122 e.put("/templates/settings/system-config/sections/target-groups/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-if="grid.appScope.currentUser.permissions.editGroup" ng-click="grid.appScope.editGroupModal(row.entity)">{{row.entity.name}}</a><span ng-if="!grid.appScope.currentUser.permissions.editGroup">{{row.entity.name}}</span></div>'),
123 e.put("/templates/settings/system-config/sections/scanning-profiles/cols/builtin.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><i ng-if="!row.entity.isCustom" class="fa fa-check-square"></i></div>'),
124 e.put("/templates/settings/system-config/sections/scanning-profiles/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-if="row.entity.isCustom" ui-sref="app.scanning_profile({returnUrl: grid.appScope.currentUrl(), profileId: row.entity.profileId})">{{row.entity.name}}</a><span ng-if="!row.entity.isCustom">{{row.entity.name}}</span></div>'),
125 e.put("/templates/settings/system-config/sections/users/cols/access.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><i ng-class="{\'fa-check\': row.entity.accessAllGroups, \'fa-times text-danger\': !row.entity.accessAllGroups}" class="fa"></i></div>'),
126 e.put("/templates/settings/system-config/sections/users/cols/enabled.html", '<!DOCTYPE html><div class="ui-grid-cell-contents text-center"><i ng-class="{\'fa-check\': row.entity.enabled, \'fa-times text-danger\': !row.entity.enabled}" class="fa"></i></div>'),
127 e.put("/templates/settings/system-config/sections/users/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ui-sref="app.edit_user({userId: row.entity.userId, returnUrl: grid.appScope.currentUrl()})">{{row.entity.fullName}}</a></div>'),
128 e.put("/templates/settings/system-config/sections/workers/cols/authorization.html", '<!DOCTYPE html><div class="ui-grid-cell-contents">{{row.entity.endpoint|axWorkerEndpoint}}</div>'),
129 e.put("/templates/settings/system-config/sections/workers/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><a ng-click="grid.appScope.onEditEngineName(row.entity)">{{row.entity.description}}</a></div>'),
130 e.put("/templates/settings/system-config/sections/workers/cols/status.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><i ng-if="row.entity.status===\'offline\'" class="fa fa-warning text-danger m-r-xs"></i><span>{{row.entity.status|axWorkerStatus}}</span></div>')
131 }
132 ])
133}();