forked from 7x4uk4/AWVS12_Docker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tpls-bundle.js
120 lines (120 loc) · 245 KB
/
tpls-bundle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
! function() {
angular.module("WVS").run(["$templateCache", function(e) {
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">配置</a></li><li class="divider"></li><li><a ng-click="signOut()">注销</a></li></ul></li><li><a target="_blank" ng-href="{{globalHelpLink || \'http://www.acunetix.com/support\'}}" uib-tooltip="{{::\'帮助和支持\'|translate}}"><i class="fa fa-fw fa-question-circle hidden-xs"></i><span class="visible-xs-inline">帮助和支持</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">通知</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">暂无新通知</strong><strong ng-if="(notifications.count + manualIntervention.items.length) > 0">你有新通知</strong><button ng-if="notifications.count > 0" ng-click="consumeAllNotifications()" class="btn btn-default btn-xs clearfix pull-right">标记全部为已读</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">需要手动干预</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)">解决此问题</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>新版本 {{updateInfo.versionFull}} 已可用</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>正在更新服务...</span></small><small ng-if="updateInfo.status === \'waiting_for_scans\'" class="text-muted">更新等待扫描完成后进行...</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">服务正在重新启动...</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="{{::\'标记为已读\'|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></nav></div></div></div><div class="app-content"><div ui-view class="app-content-body app-content-full"></div></div><div class="app-footer navbar navbar-fixed-bottom bg-light lt b-t"><ul class="nav nav-pills nav-md"><li><a href="https://www.acunetix.com" target="_blank" class="text-muted">© 2017 Acunetix Ltd.</a></li><li><a href="https://www.cn-space.com" target="_blank" class="text-muted">Sp4ce\'s Blog</a></li><li><a href="https://github.com/NS-Sp4ce/AWVS11.X-Chinese-Version" target="_blank" class="text-muted">Github</a></li><li ng-if="scrollTopActionVisible" class="pull-right"><a ng-click="scrollTop()" class="text-muted"><span class="m-r-xs">Top</span><i class="fa fa-fw fa-arrow-up"></i></a></li></ul></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>'),
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">状态</label><ui-select multiple="multiple" ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">报告</label><ui-select ng-model="searchFilters.reportTemplate" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">报告选项</label><ui-select ng-model="searchFilters.reportSource" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">创建</label><div class="input-group"><span class="input-group-addon w-xxs">起始于</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">结束于</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">新报告</span><i class="caret"></i></button><ul uib-dropdown-menu><li ng-class="{disabled: pageState.noTargetsInSystem}" uib-tooltip="{{::\'未配置目标\'}}" tooltip-enable="pageState.noTargetsInSystem"><a ng-if="!pageState.noTargetsInSystem" ng-click="onGenerateReport(\'all_vulnerabilities\')">所有的漏洞报告</a><a ng-href ng-if="pageState.noTargetsInSystem">所有的漏洞报告</a></li><li ng-class="{disabled: pageState.noScansInSystem}" uib-tooltip="{{::\'没有可用的扫描\'}}" tooltip-enable="pageState.noScansInSystem"><a ng-if="!pageState.noScansInSystem" ui-sref="app.list_scans({gr:1,returnUrl:currentUrl()})">扫描报告</a><a ng-href ng-if="pageState.noScansInSystem">扫描报告</a></li><li ng-class="{disabled: pageState.noTargetsInSystem}" uib-tooltip="{{::\'未配置目标\'}}" tooltip-enable="pageState.noTargetsInSystem"><a ng-if="!pageState.noTargetsInSystem" ui-sref="app.list_targets({gr:1,returnUrl:currentUrl()})">目标报告</a><a ng-href ng-if="pageState.noTargetsInSystem">目标报告</a></li></ul></div><div uib-tooltip="{{::\'请选择至少一个报告\'|translate}}" tooltip-enable="selectedItems().length === 0" class="btn-group"><button ng-disabled="selectedItems().length === 0" ng-click="onDeleteSelectedReports()" class="btn btn-default">{{\'删除所选\'|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>过滤</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">尚未创建目标.</strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">创建新目标</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>'),
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">{{::\'严重性\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'事件类型\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.eventType" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'资源类型\'|translate}}</label><ui-select ng-model="searchFilters.resourceType" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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>{{::\'过滤\'|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>'),
e.put("/templates/account/confirm-change-email/confirm-change-email.html", "<!DOCTYPE html>"),
e.put("/templates/account/confirm-password-reset/confirm-password-reset.html", "<!DOCTYPE html>"),
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">{{::\'按严重性排序\'|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>{{::\'载入中...\'|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">{{::\'最易受攻击的目标\'|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>{{::\'载入中...\'|translate}}</h5></div><div ng-if="!loadingIndicator.active() && stats.noTargets"><span class="m-r-sm">{{::\'尚未定义目标\'|translate}}</span><a ng-if="currentUser.permissions.addTarget" ng-click="onCreateTarget()">{{::\'创建\'|translate}}</a></div><div ng-if="!loadingIndicator.active() && stats.mostVulnTargets.data.length === 0 && !stats.noTargets"><span>{{::\'尚未发现易受攻击的目标\'|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">{{::\'最多的漏洞类型\'|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>{{::\'载入中...\'|translate}}</h5></div><div ng-if="!loadingIndicator.active() && stats.noTargets"><span class="m-r-sm">{{::\'尚未定义目标\'|translate}}</span><a ng-if="currentUser.permissions.addTarget" ng-click="onCreateTarget()">{{::\'创建\'|translate}}</a></div><div ng-if="!loadingIndicator.active() && stats.topVulns.data.length === 0 && !stats.noTargets"><span>{{::\'没有发现漏洞\'|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">{{\'显示动态\'|translate}}</span><span ng-if="stats.showTrends">{{\'隐藏动态\'|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">{{::\'过去一年中发现的漏洞\'|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>{{::\'载入中...\'|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">{{::\'修复的平均天数\'|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>{{::\'载入中...\'|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">{{::\'在过去12月中发现的漏洞\'|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>{{::\'载入中...\'|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">{{::\'漏洞的平均寿命\'|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>{{::\'载入中...\'|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>'),
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">您的帐户已被禁用.请联系 <a href="mailto:support@acunetix.com" target="_blank">技术支持</a>.</span></uib-alert><div class="form-group"><h3 class="m-t-md m-b-lg text-center">登录</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">此字段必填</span><span ng-message="email">请输入正确的电子邮件地址</span></div></div><div ng-class="{\'has-error\': loginForm.password.$invalid && loginForm.password.$touched}" class="form-group"><label class="hidden control-label">密码</label><input type="password" name="password" ng-model="credentials.password" required aria-autocomplete="off" autocomplete="off" placeholder="{{::\'密码\'|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">此字段必填</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>保持登录状态</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>登录</span></button></form></div></div><div class="ax-login-page__footer"><div class="copyright small">Copyright © 2017 Acunetix Ltd.</div><a href="https://www.acunetix.com/" target="_blank" class="site-link text-white small">www.acunetix.com</a>|<a href="https://www.cn-space.com/" target="_blank" class="site-link text-white small">Sp4ce汉化【第二版】</a></div></div></div>'),
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" ng-click="updateProfile()" class="btn btn-default">保存</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>配置</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">公司邮箱</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">名字</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">该字段必填</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">姓氏</label><div class="col-md-6"><input id="profileForm_lastName" name="lastName" type="text" ng-model="userProfile.lastName" ng-required="false" class="form-control"><div ng-messages="profileForm.lastName.$error" ng-if="profileForm.lastName.$touched && profileForm.lastName.$invalid" class="help-block"><span ng-message="required">该字段必填</span></div></div></div><div ng-if="!currentUser.isChildAccount" class="form-group"><label for="profileForm_companyName" class="control-label col-md-3">公司名称</label><div class="col-md-6"><input id="profileForm_companyName" type="text" name="companyName" ng-model="userProfile.companyName" class="form-control"></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">公司网址</label><div class="col-md-6"><input id="profileForm_companyWebsite" type="url" name="companyWebsite" ng-model="userProfile.companyWebsite" class="form-control"><div ng-messages="profileForm.companyWebsite.$error" ng-if="profileForm.companyWebsite.$touched && profileForm.companyWebsite.$invalid" class="help-block"><span ng-message="url">请填写正确的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">电话</label><div class="col-md-6"><input id="profileForm_contactPhone" type="phone" name="contactPhone" ng-model="userProfile.contactPhone" phone-number="userProfile.countryCode" class="form-control"><div ng-messages="profileForm.contactPhone.$error" ng-if="profileForm.contactPhone.$touched && profileForm.contactPhone.$invalid" class="help-block"><span ng-message="phoneNumber">请填写正确的电话</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">国家</label><div class="col-md-6"><ui-select id="profileForm_countryCode" name="countryCode" ng-required="false" ng-model="userProfile.countryCode"><ui-select-match placeholder="{{::\'选择...\'|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">角色</label><div class="col-md-6"><input id="profileForm_role" readonly="readonly" value="{{userProfile.role|axUserRoleName}}" class="form-control"></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()"></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>要启用此功能,请联系<a target="_blank" href="mailto:support@acunetix.com">技术支持</a> .</span></uib-alert></div><div ng-if="!apiKeyInfo.disabled"><div ng-if="!apiKeyInfo.apiKey"><p>你尚未设置Api Key.</p><div class="m-t-md"><button type="button" ng-click="onGenerateApiKey()" class="btn btn-default m-r-xs">生成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="{{::\'出于安全目的而隐藏\'|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>复制</span></button><button ng-click="onToggleApiKeyVisibility()" class="btn btn-default">{{apiKeyInfo.visible ? \'隐藏\' : \'显示\'}}</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">生成新的Api Key</button><button type="button" ng-click="onDeleteApiKey()" class="btn btn-danger">删除</button></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>'),
e.put("/templates/account/reset-password/reset-password.html", "<!DOCTYPE html>"),
e.put("/templates/account/validate-account/validate-account.html", "<!DOCTYPE html>"),
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="{{::\'返回主目录\'}}" 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>'),
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" ng-click="$ctrl.errors[0].onRetry()" class="btn btn-sm btn-dark ax-btn-retry m-r-xs">{{::\'重试\' | translate}}</button><button ng-click="$ctrl.dismiss()" class="btn btn-sm btn-default ax-btn-dismiss">{{::\'取消\' | translate}}</button></div></uib-alert></div>'),
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>'),
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>'),
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="{{::\'此文件已上传 (\' + $ctrl.uploadProgress + \'% )\'}}" 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="{{::\'下载文件\'|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>'),
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="{{::\'移除过滤选项\'|translate}}" ng-click="$ctrl.removeTag({tag: tag})" class="text-muted ax-filter-close"><i class="fa fa-times"></i></a></div></div>'),
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">{{::\'选择重复\'|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">{{::\'每个\'|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>{{::\'每个月的同一天\'|translate}}</span></label></li></ol></div><div class="ax-calendar__ends wrapper-sm b-b"><span style="vertical-align: top" class="m-r-xl">{{::\'结束\'|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>{{::\'从不\'|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>{{::\'启用\'|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>'),
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">许可证号</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" class="form-group"><div class="col-sm-6 col-sm-offset-3"><a href="awvs://activation">更新许可证 (启动激活可执行文件)</a></div></div><div class="form-group m-b-none"><label class="control-label font-bold col-sm-3">版本</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">产品状态</label><div class="col-sm-6"><div ng-class="{\'text-danger font-bold\': $ctrl.licenseInfo.expired}" class="form-control-static text-ellipsis"><span class="m-r-xs">{{$ctrl.licenseInfo.status|translate}}</span><span ng-if="!$ctrl.licenseInfo.expired && $ctrl.licenseInfo.expires">(expires on {{$ctrl.licenseInfo.expires|date:\'d MMMM yyyy\'}})</span></div></div></div><div ng-if="$ctrl.licenseInfo.maintenance" class="form-group m-b-none"><label class="control-label font-bold col-sm-3">维护状态</label><div class="col-sm-6"><div class="form-control-static text-ellipsis"><span ng-if="$ctrl.licenseInfo.maintenance.expired">Expired</span><span ng-if="!$ctrl.licenseInfo.maintenance.expired"><span ng-if="$ctrl.licenseInfo.maintenance.expires">OK ({{\'到期日期\'|translate}} {{$ctrl.licenseInfo.maintenance.expires|date:\'d MMMM yyyy\'}})</span><span ng-if="!$ctrl.licenseInfo.maintenance.expires">N/A</span></span></div></div></div><div class="form-group m-b-none"><label class="control-label font-bold col-sm-3">用户</label><div class="col-sm-6"><div ng-if="$ctrl.licenseInfo.limits.maxUsers !== undefined" class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.limits.maxUsers}}</div><div ng-if="$ctrl.licenseInfo.limits.maxUsers === undefined" class="form-control-static text-ellipsis">无限</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">最大并发扫描</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">最大扫描引擎数量</label><div class="col-sm-6"><div class="form-control-static text-ellipsis">{{$ctrl.licenseInfo.limits.maxEngines}}</div></div></div></div><div ng-if="$ctrl.licenseInfo.productCode === \'TRIAL\'"><hr><p translate>Acunetix Web 漏洞扫描程序<strong>试用版</strong> 允许您扫描以下 Acunetix 测试网站, 这些站点提供对检测到的所有漏洞信息的访问权限:</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>在试用期间, 您还可以扫描您控制的任何网站, 其限制如下: </p><ul style="list-style-type: bullet" class="padder-md m-l-md"><li>无法访问发现的漏洞的详细信息. </li><li>无法使用集成的 Bug 跟踪系统.</li></ul><p>有关如何购买 Acunetix Web 漏洞扫描程序的详细信息, 请访问:\n<a target="_blank" href="http://www.acunetix.com/ordering/">http://www.acunetix.com/ordering/</a></p></div>'),
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 威胁级别 {{$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">扫描器发现了一个或多个高严重性类型的漏洞.恶意用户可以利用这些漏洞并破坏后端数据库或破坏您的网站.</div><div ng-switch-when="2">扫描器发现了一个或多个中等严重性类型的漏洞.您应该调查每个漏洞, 以确保它们不会升级到更严重的问题.</div><div ng-switch-when="1">扫描器发现了一个或多个低严重性类型的漏洞.</div><div ng-switch-when="0">扫描器未发现任何漏洞.</div><div ng-switch-when="-1"><span ng-if="$ctrl.scanStatus.status === \'processing\' || $ctrl.scanStatus.status === \'aborting\'">威胁级别尚不可用.</span><div ng-if="$ctrl.scanStatus.status === \'failed\'" class="text-danger">无法确定威胁级别, 因为扫描失败.</div><div ng-if="$ctrl.scanStatus.status === \'aborted\'" class="text-danger">无法确定威胁级别, 因为扫描已中止.</div></div></div></div><div ng-if="$ctrl.scanStatus.responsive === false"><div class="text-danger">无法确定威胁级别, 因为目标未响应.</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\'|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">活动的</h4></div><div class="panel-body clearfix"><div><span class="pull-right text-primary">{{$ctrl.scanStatus.progress}}%</span><span>总体进展情况</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">扫描持续时间</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">响应</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">平均响应时间</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">位置</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">目标信息</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">地址</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">目标信息不可用</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">地址</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">服务器</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">采用的技术</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">已识别技术</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">响应</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">是</span><strong ng-if="targetInfo.responsive === false" class="text-danger">否</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">最新警报</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">未检测到任何漏洞</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>允许的主机</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>地址</strong></th><th><div class="text-right"><strong>平均响应时间</strong></div></th><th><div class="text-right"><strong>请求</strong></div></th><th><div class="text-right"><strong>位置</strong></div></th><th><div class="text-center"><strong>响应</strong></div></th><th><div class="text-center"><strong>AcuSensor</strong></div></th><th><strong>服务器</strong></th></tr></thead><tbody><tr ng-repeat="target in $ctrl.scanStatus.wvsScanStats.hosts | filter:{isStartingHost:false} track by $index"><td data-title="{{::\'地址\'|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="{{::\'平均响应时间\'|translate}}"><div class="text-right">{{target.avgResponseTime|number:0}} {{::\'ms\'|translate}}</div></td><td data-title="{{::\'请求\'|translate}}"><div class="text-right">{{target.requestCount|number}}</div></td><td data-title="{{::\'位置\'|translate}}"><div class="text-right">{{target.locations|number}}</div></td><td data-title="{{::\'响应\'|translate}}"><span ng-class="{\'text-danger font-bold\': !target.responsive}" class="visible-sm visible-xs">{{target.responsive ? \'是\' : \'否\'}}</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="{{::\'服务器\'|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>已发现的主机</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">创建目标</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>无法检索此扫描的信息.</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>载入中...</span></div></div>'),
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">{{::\'该字段必填\'|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">{{::\'该字段必填\'|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">{{::\'该字段必填\'|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>{{\'对时间敏感的\'|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>'),
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>'),
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>'),
e.put("/templates/modals/account-verification/account-verification.modal.html", ""),
e.put("/templates/modals/activation/activation.modal.html", '<!DOCTYPE html><div class="modal-header"><button type="button" ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">Acunetix</h4></div><div class="modal-body"><p translate>Acunetix未激活. 使用<a href="awvs://activation">Acunetix Activation</a>来激活.\n</p></div><div class="modal-footer"><a ui-focus="true" href="awvs://activation" class="btn btn-danger">激活</a><button type="button" ng-click="$dismiss(\'close\')" class="btn btn-default">关闭</button></div>'), 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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">添加用户组</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">用户组名称</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">该字段必填</span></div></div><div class="form-group"><label class="control-label">描述</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">添加用户组</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">添加目标</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">地址</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">该字段必填</span><span ng-message="url">请填写正确的URL (e.g. http://example.com)</span></div></div><div class="form-group"><label for="targetForm_description" class="control-label">描述</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">业务临界性</label><ui-select id="targetForm_criticality" ng-model="$ctrl.target.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">添加目标</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">添加用户</h4></div><div class="modal-body"><div class="container-fluid"><div ng-if="$ctrl.featureNA" class="row"><p>多用户功能可用于委派漏洞扫描/报告任务。可以使用4个不同的角色以及配置扫描目标组或特定扫描目标的权限来控制对扫描目标 (包括扫描和报告) 的访问。</p><p>多用户功能仅适用于完全订阅. <a target="_blank" href="https://www.acunetix.com/support/docs/wvs/configuring-users/">了解更多</a>\n</p></div><div ng-if="$ctrl.maxUsersLimitReached && !$ctrl.featureNA" class="row"><uib-alert type="danger" role="alert" closeable="false"><span>已达到用户限制。请 <a target="_blank" href="mailto:sales@acunetix.com">升级</a> 您的许可证, 以添加更多的用户.</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">该字段必填</span><span ng-message="email">请输入正确的电子邮件地址</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">名</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">该字段必填</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">姓</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">该字段必填</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">密码</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">该字段必填</span><span ng-message="passwordPolicy">密码不符合密码策略</span></div><div class="help-block"><i class="fa fa-info-circle m-r-xs"></i><span>最少8个字符, 包含以下的至少3项:1个数字,1个小写字母或1个大写字母和1个特殊字符 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">再次输入密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</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">角色</label><div class="col-sm-9"><ui-select name="role" ng-model="$ctrl.user.role" search-enabled="false" required><ui-select-match placeholder="{{::\'选择...\'|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">该字段必填</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>连接所有模板</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">添加用户</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
e.put("/templates/modals/change-email/change-email.modal.html", ""),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">修改密码</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.password.$invalid && $ctrl.changePasswordForm.password.$touched}" class="form-group"><label class="control-label col-sm-4">当前密码</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">该字段必填</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">新密码</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">该字段必填</span><span ng-message="passwordPolicy">密码不符合密码策略 最少8位包含以下至少3个字符:1个数字,1个小写字母或1个大写字母和1个特殊字符e.g. !@#$% etc.</span></div></div></div><div ng-class="{\'has-error\': $ctrl.changePasswordForm.newPassconfirmNewPasswordword.$invalid && $ctrl.changePasswordForm.confirmNewPassword.$touched}" class="form-group"><label class="control-label col-sm-4">确认新密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</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">更新</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">取消</button></div></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">配置组成员权限</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">创建用户组</button><button type="button" ng-click="$ctrl.updateGroupMembership()" ng-disabled="$ctrl.loadingTracker.active() || $ctrl.selectedItemsCount() === 0" class="btn btn-dark">更新</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
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="{{::\'关闭\'}}" class="close">×</button><h4 class="modal-title">重命名扫描引擎</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">引擎名称</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">该字段必填</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">更新</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
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="{{::\'关闭\'}}" class="close">×</button><h4 class="modal-title">编辑组</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">组名称</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">该字段必填</span></div></div><div class="form-group"><label for="groupForm_description" class="control-label">描述</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">更新用户组</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">编辑时间表</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">时间表</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-muted m-t-xs"><i class="fa fa-info m-r-xs"></i><span>如果您点击更新,时间表将被启用</span></div><button ng-if="!$ctrl.currentSchedule.disabled" type="button" ng-click="$ctrl.onDisableSchedule()" class="btn btn-danger pull-left">禁用时间表</button><button type="button" ng-click="$ctrl.onUpdateSchedule()" ng-disabled="$ctrl.editScheduleForm.$invalid" class="btn btn-dark">更新</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title"><span ng-if="$ctrl.selectedProfile.isNew">创建排除的工时配置文件</span><span ng-if="!$ctrl.selectedProfile.isNew">编辑排除的工时配置文件</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">名称</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">该字段必填</span><span ng-message="maxlength">长度超出限制</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>排除</td></tr><tr><td class="axExcludedHours__HourInterval b"></td><td>不排除</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">创建配置文件</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">更新</button><button type="button" ng-click="$ctrl.$dismiss(\'cancel\')" class="btn btn-default"><span ng-if="$ctrl.currentUser.permissions.manageExcludedHours">取消</span><span ng-if="!$ctrl.currentUser.permissions.manageExcludedHours">关闭</span></button></div></div>'),
e.put("/templates/modals/general/alert.modal.html", '<!DOCTYPE html><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'关闭\'|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>'),
e.put("/templates/modals/general/confirm-action.modal.html", '<!DOCTYPE html><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'关闭\'|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">{{\'是\' | translate}}</button><button type="button" ng-click="$dismiss(\'no\')" class="btn btn-default">{{\'否\' | translate}}</button></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">{{::\'配置问题跟踪器\'|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">{{::\'问题跟踪器\'|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="{{::\'选择...\'|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">{{::\'名称\'|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">{{::\'该字段必填\'|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">{{::\'认证\'|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="{{::\'选择...\'|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">{{::\'该字段必填\'|translate}}</span><span ng-message="url">{{::\'请输入有效的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">{{::\'用户\'|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">{{::\'该字段必填\'|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">{{::\'密码\'|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">{{::\'该字段必填\'|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>{{::\'测试连接\'|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>{{::\'没有可用的项目\'|translate}}</span></p></div></div><div ng-if="$ctrl.projects.length > 0"><div class="form-group"><label class="control-label col-sm-3">{{::\'项目\'|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="{{::\'选择...\'|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">{{::\'问题类型\'|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="{{::\'选择...\'|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">{{::\'该字段对于所选问题跟踪器必填\'|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">{{::\'关闭\'|translate}}</button></div></div>'),
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="{{::\'关闭\'}}" class="close">×</button><h4 class="modal-title">生成报告</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">模板</label><ui-select name="template" ng-model="$ctrl.reportOptions.templateId" ng-required="true" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\' | 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">该字段必填</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>关于报告模板</span></a></div><div class="pull-right"><button type="button" ng-click="$ctrl.onGenerateReport()" ng-disabled="$ctrl.reportOptionsForm.$invalid" class="btn btn-dark">生成报告</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div></div>'),
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="{{::\'关闭\'|translate}}" class="close">×</button><h4 class="modal-title">选择扫描选项</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">扫描选项</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="{{\'选择...\'|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">该字段必填</span></div></div></div><div ng-if="$ctrl.selectedSchedule.scheduleType !== \'continuous\'" class="form-group"><label class="control-label col-lg-2">报告</label><div class="col-lg-10"><ui-select ng-model="$ctrl.scanningOptions.reportType" search-enabled="false" ax-no-animate><ui-select-match placeholder="{{::\'无\'|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">计划</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个扫描将被创建</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">创建</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">关闭</button></div></div>'),
e.put("/templates/modals/sensor-secret/sensor-secret.modal.html", '<!DOCTYPE html><div class="modal-header"><button ng-click="$dismiss(\'cancel\')" uib-tooltip="{{::\'关闭\'}}" class="close">×</button><h4 class="modal-title">重置AcuSensor密码</h4></div><div class="modal-body"><div class="container-fluid"><div class="row"><p>您确定要重置此目标的AcuSensor密码吗? AcuSensor将需要重新安装在目标上.</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>使用自定义密码</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">密码</label><div class="col-md-9"><input id="sensorForm_password" type="password" name="password" ng-model="$ctrl.secretSection.secret" required 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">该字段必填</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">确认密码</label><div class="col-md-9"><input id="sensorForm_retypePassword" type="password" name="retypePassword" ng-model="$ctrl.secretSection.retypeSecret" equal-to="$ctrl.secretSection.secret" 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">密码不匹配</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">重置密码</button><button type="button" ng-click="$dismiss(\'cancel\')" class="btn btn-default">取消</button></div>'),
e.put("/templates/modals/update-license/update-license.modal.html", ""),
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">下载</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="{{::\'该格式的报告不可用\'}}" tooltip-enable="!row.entity.downloadLinkPDF"><a ng-href="{{row.entity.downloadLinkPDF}}">PDF 格式</a></li><li ng-class="{\'hide\': !row.entity.downloadLinkHTML}" uib-tooltip-enable="!row.entity.downloadLinkHTML" uib-tooltip="{{::\'该格式的报告不可用\'}}" tooltip-enable="!row.entity.downloadLinkHTML"><a ng-href="{{row.entity.downloadLinkHTML}}">HTML 格式</a></li></ul></div></div>'),
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>"),
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">目标</label><ui-select ng-model="searchFilters.target"><ui-select-match placeholder="{{::\'选择...\'|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">威胁等级</label><ui-select multiple="multiple" ng-model="searchFilters.threatLevel" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">业务临界性</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">扫描状态</label><ui-select multiple="multiple" ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">扫描选项</label><ui-select multiple="multiple" ng-model="searchFilters.profile" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">组</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'新的扫描\'|translate}}</button><div ng-if="currentUser.permissions.stopScan" uib-tooltip="{{::\'请选择至少一个正在运行的扫描\'|translate}}" tooltip-enable="selectedItemsCount([\'queued\', \'starting\', \'processing\']) === 0" class="btn-group"><button ng-if="!generateReportView" ng-disabled="selectedItemsCount([\'queued\', \'starting\', \'processing\']) === 0" ng-click="onStopSelectedScans()" class="btn btn-default">{{::\'停止扫描\'|translate}}</button></div><div ng-if="currentUser.permissions.removeScan" uib-tooltip="{{::\'请至少选择一个扫描\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-if="!generateReportView" ng-disabled="selectedItemsCount() === 0" ng-click="onDeleteSelectedScans()" class="btn btn-default">{{::\'删除扫描\'|translate}}</button></div><div uib-tooltip="{{::\'请至少选择一个已完成的扫描\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">{{::\'生成报告\'|translate}}</button></div><div uib-tooltip="{{::\'请选择2个相同目标的扫描结果\'|translate}}" tooltip-enable="!canGenerateComparisonReport()" class="btn-group"><button ng-disabled="!canGenerateComparisonReport()" ng-click="onGenerateComparisonReport()" class="btn btn-default">{{::\'比较扫描结果\'|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>过滤</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">{{::\'选择一些扫描, 然后单击 生成报告\'|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>{{::\'尚未创建目标.\'|translate}} </strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">{{::\'创建新目标\'|translate}}</a></p><p ng-if="!noTargetsInSystem && noScansInSystem && !loadingTracker.active()"><strong>没有被扫描的目标. </strong><a ui-sref="app.list_targets({returnUrl:currentUrl(),ls:1})">扫描目标</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>'),
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>此扫描已失败</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" on-location-selected="onCrawLocationDetails(location)" class="b scrollable col-sm-3 h-full"></ax-site-structure><div ng-if="selectedLocation" style="padding-right: 0" 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>在此位置未检测到任何漏洞</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>'),
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>'),
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>'),
e.put("/templates/scans/scan-details/scan-details-stats.html", '<!DOCTYPE html><uib-alert ng-if="scan.status === \'failed\'" type="danger"><span>该扫描已失败</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>在此扫描过程中生成了一些错误。请检查<a ng-click="navigateToEvents()">事件</a>.</div></uib-alert><uib-alert ng-if="scan.status !== \'failed\' && scan.eventLevel == 1" type="danger"><div>在此扫描过程中生成了一些警告。请检查<a ng-click="navigateToEvents()">事件</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">扫描已开始...</p><p ng-switch-when="queued">扫描将在几分钟后开始...</p><p ng-switch-when="scheduled" translate><span ng-if="!scan.schedule.scheduleDate" translate>扫描将在几分钟后开始...</span><span ng-if="scan.schedule.scheduleDate && scan.schedule.timeSensitive" translate>扫描计划开始于{{scan.schedule.scheduleDate|date:\'medium\'}}</span><span ng-if="scan.schedule.scheduleDate && !scan.schedule.timeSensitive" translate>扫描计划开始于{{scan.schedule.scheduleDate|date:\'mediumDate\'}}</span></p></div>'),
e.put("/templates/scans/scan-details/scan-details-vulns.html", '<!DOCTYPE html><uib-alert ng-if="scan.status === \'failed\'" type="danger"><span>该扫描已失败</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>'),
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="{{::\'选择...\'|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="{{::\'选择...\'|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="{{::\'选择...\'|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="{{::\'扫描未运行\'|translate}}" tooltip-enable="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" class="btn-group"><button ng-disabled="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" type="button" ng-click="onStopScan()" class="btn btn-default">停止扫描</button></div><div uib-tooltip="{{::\'此扫描尚未完成\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button type="button" ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">生成报告</button></div><div uib-dropdown uib-tooltip="{{::\'此扫描尚未完成\'|translate}}" tooltip-enable="!canGenerateExport()" class="btn-group"><button uib-dropdown-toggle ng-disabled="!canGenerateExport()" class="btn btn-default"><span class="m-r-xs">导出...</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">分组: 无</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> {{::\'无\'|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> {{::\'漏洞类型\'|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>过滤</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>'),
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">{{::\'保存\'|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">选择要分配给组的目标[{{group.name}}]</span><span translate ng-if="!currentUser.permissions.changeGroupMembership">选定的目标被分配给[{{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>'),
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 || !hasChanges()" class="btn-group"><button ng-disabled="profileForm.$invalid || !hasChanges()" ng-click="updateProfile()" class="btn btn-default">保存</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">配置</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">该字段必填</span><span ng-message="email">请输入正确的电子邮件地址</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">名</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">该字段必填</span></div></div></div><div class="form-group"><label class="control-label col-md-3">姓</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">密码</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">该字段必填</span><span ng-message="passwordPolicy">密码不符合密码策略</span></div><div class="help-block"><i class="fa fa-info-circle m-r-xs"></i><span>最少8个字符, 包含以下的至少3项:1个数字,1个小写字母或1个大写字母和1个特殊字符 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">确认密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</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">角色</label><div class="col-md-5"><ui-select name="role" ng-model="userProfile.role" search-enabled="false" required><ui-select-match placeholder="{{::\'选择...\'|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">该字段必填</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>连接所有目标</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">配置访问</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>用户可以访问以下组中的目标.</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">添加 / 编辑</button></div></div></div></div></div></div></div></div></div></div>'),
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">{{::\'添加组\'|translate}}</button><div uib-tooltip="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'保存\'|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>选择要分配给用户的组[{{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>{{::\'连接所有目标\'|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>'),
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">保存</button><div class="navbar-form navbar-right m-t-none m-b-none"><div class="form-group"><input type="text" placeholder="筛选器检查" 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">名称</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">检查描述</h5><p>{{$ctrl.selectedNode.description || \'未提供所选的检查的描述\'}}</p></div></div></div></div></div></div></div></div>'), 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>'),
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">目标地址/说明</label><input type="text" ng-model="searchFilters.freeText" placeholder="{{::\'地址\'|translate}}" ng-model-options="{debounce:400}" class="form-control"></div><div class="form-group"><label class="control-label">威胁等级</label><ui-select multiple="multiple" ng-model="searchFilters.threatLevel" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">业务临界性</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">最新的扫描</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">组</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'选择...\'|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="{{::\'请至少选择一个目标\'|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>扫描</span></button></div><button ng-if="!launchScanView && !generateReportView && currentUser.permissions.addTarget" ng-click="addTargetModal()" class="btn btn-default">添加目标</button><div uib-tooltip="{{::\'请至少选择一个目标\'|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">删除</button></div><div ax-no-animate ng-if="!launchScanView && !generateReportView && currentUser.features.target_groups && currentUser.permissions.addToGroup" uib-tooltip="{{::\'请至少选择一个目标\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-disabled="selectedItemsCount() === 0" ng-click="updateGroupMembership()" class="btn btn-default">添加到组</button></div><div ng-if="!launchScanView" uib-tooltip="{{::\'请至少选择一个已扫描的目标\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">生成报告</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>过滤</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">选择一些目标, 然后单击扫描</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">选择一些目标, 然后单击生成报告</span></div><div uib-dropdown ng-if="!launchScanView && !generateReportView && exportTemplateTypeList.length > 0" uib-tooltip="{{::\'请至少选择一个已扫描的目标\'|translate}}" tooltip-enable="!canExport()" class="btn-group"><button uib-dropdown-toggle ng-disabled="!canExport()" class="btn btn-default"><span class="m-r-xs">导出...</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><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">尚未创建目标.</strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">创建新目标</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>'),
e.put("/templates/targets/target-config/target-config.html", '<!DOCTYPE html><div ui-view="{{currentSection}}" class="hbox hbox-auto-xs bg-light"></div>'),
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">{{::\'目标\'|translate}}</label><ui-select ng-model="searchFilters.target"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'严重性\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'业务临界性\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'状态\'|translate}}</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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="{{::\'选择...\'|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">{{::\'组\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'选择...\'|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="{{::\'请至少选择一个漏洞\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onGenerateReport()" class="btn btn-default">生成报告</button></div><div uib-dropdown ng-if="!groupBy && exportTemplateTypeList.length > 0" uib-tooltip="{{::\'请至少选择一个漏洞\'|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">导出...</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="{{::\'请至少选择一个漏洞\'|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">标记为</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ng-click="changeVulnStatus(\'open\')">确认</a></li><li><a ng-click="changeVulnStatus(\'fixed\')">已修复</a></li><li><a ng-click="changeVulnStatus(\'ignored\')">忽略</a></li><li><a ng-click="changeVulnStatus(\'false_positive\')">误报</a></li></ul></div><div ng-if="currentUser.features.vuln_retest" uib-tooltip="{{::\'请至少选择一个漏洞\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onRecheckVulnerability()" class="btn btn-default">再次测试</button></div><div ng-if="currentUser.features.bug_tracking_integration && currentUser.permissions.createIssue" uib-dropdown uib-tooltip="{{::\'请至少选择一个漏洞\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onCreateIssues()" class="btn btn-default">发送到问题跟踪器</button></div><div uib-dropdown class="btn-group"><button uib-dropdown-toggle ng-disabled="noTargetsOrScansInSystem" class="btn btn-default"><span class="m-r-xs">{{::\'分组: \'|translate}}{{::\'无\'|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>无</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>临界性</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>漏洞类型</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>过滤</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>{{::\'尚未创建目标.\'|translate}} </strong><a ng-click="addTargetModal()" ng-if="currentUser.permissions.addTarget">{{::\'创建新目标\'|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>'),
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">重置</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>'),
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">{{::\'标记为\'|translate}}</span><i class="caret"></i></button><ul uib-dropdown-menu><li><a ng-click="changeVulnStatus(\'open\')">{{::\'确认\'|translate}}</a></li><li><a ng-click="changeVulnStatus(\'fixed\')">{{::\'已修复\'|translate}}</a></li><li><a ng-click="changeVulnStatus(\'ignored\')">{{::\'已忽略\'|translate}}</a></li><li><a ng-click="changeVulnStatus(\'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">重置</button><div ng-if="currentUser.features.bug_tracking_integration && currentUser.permissions.createIssue" uib-dropdown uib-tooltip="{{::\'请至少选择一个漏洞\'|translate}}" tooltip-enable="selectedItems.length === 0" class="btn-group"><button ng-disabled="selectedItems.length === 0" ng-click="onCreateIssues()" class="btn btn-default">{{::\'发送到问题跟踪器\'|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>'),
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>'),
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>'),
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.name}}</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">高</div></li><li ng-switch-when="2"><div class="label label-warning text-white">中</div></li><li ng-switch-when="1"><div class="label label-info text-white">低</div></li><li ng-switch-when="0"><div class="label label-success text-white">信息</div></li><li><div class="label label-default">{{$ctrl.vuln.status|axVulnStatus}}</div></li><li ng-if="$ctrl.vuln.issueId"><div uib-tooltip="{{::\'该漏洞已报告到问题跟踪器\'|translate}}" class="label label-default">{{::\'问题 #\'|translate}}{{$ctrl.vuln.issueId}}</div></li><li ng-if="$ctrl.vuln.continuous"><div class="label label-default">通过连续扫描检测到</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">漏洞描述</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>该漏洞影响 </span><span class="font-bold"><a href="{{$ctrl.vuln.url}}" target="_blank">{{$ctrl.vuln.url}}</a></span><span ng-if="$ctrl.vuln.parameter" class="font-bold"> , {{$ctrl.vuln.parameter}}</span></p><p ng-if="$ctrl.vuln.source" translate>被<span class="font-bold">{{$ctrl.vuln.source}}</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">攻击详细信息</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 请求</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>复制到剪贴板</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">响应头</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">此漏洞的影响</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">如何修复此漏洞</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">分类</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>{{::\'基本分数: \'}} </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">详细信息</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 引用</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>'),
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>"),
e.put("/templates/scans/list-scan/cell/schedule.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><div ng-if="row.entity.schedule.disabled" class="text-muted"><a ng-class="{\'text-muted\': row.entity.schedule.disabled}" ng-click="grid.appScope.editSchedule(row.entity)" uib-tooltip="{{::\'编辑计划\'|translate}}">{{::\'禁止\'|translate}}</a></div><div ng-if="!row.entity.schedule.disabled"><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\'">{{::\'扫描已开始\'|translate}}</span><span ng-if="row.entity.running"><span ng-if="row.entity.lastRun">{{::\'开始于\'|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">{{::\'下次运行于\'|translate}} {{row.entity.nextRun|date}}</span><span ng-if="row.entity.schedule.timeSensitive">{{::\'下次运行于\'|translate}} {{row.entity.nextRun|date:\'medium\'}}</span></span><span ng-if="!row.entity.nextRun && row.entity.lastRun">{{::\'最后运行于\'|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="{{::\'编辑计划\'|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>'),
e.put("/templates/scans/list-scan/cell/status.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span ng-if=\"row.entity.schedule.disabled\" class=\"text-muted\">禁止</span><span ng-if=\"!row.entity.schedule.disabled\" ng-class=\"{'text-danger': row.entity.status === 'failed' || row.entity.status === 'aborting' || row.entity.status === 'aborted', 'text-info': row.entity.status === 'processing'}\"><i ng-class=\"{'text-danger': row.entity.eventLevel >= 2, 'text-warning': row.entity.eventLevel === 1}\" ng-if=\"row.entity.eventLevel >= 1\" class=\"fa fa-warning m-r-xs\"></i>{{row.entity.status|axScanStatus|translate}}</span></div>"),
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>'),
e.put("/templates/scans/scan-details/grouped/grouped-scan-details-vulns.html", '<!DOCTYPE html><uib-alert ng-if="scan.status === \'failed\'" type="danger"><span>该扫描已失败</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>'),
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">严重性</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">状态</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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="{{::\'选择...\'|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="{{::\'扫描未运行\'|translate}}" tooltip-enable="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" class="btn-group"><button ng-disabled="scan.status !== \'processing\' && scan.status !== \'queued\' && scan.status !== \'starting\'" type="button" ng-click="onStopScan()" class="btn btn-default">停止扫描</button></div><div uib-tooltip="{{::\'此扫描尚未完成\'|translate}}" tooltip-enable="!canGenerateReport()" class="btn-group"><button ng-disabled="!canGenerateReport()" ng-click="onGenerateReport()" class="btn btn-default">生成报告</button></div><div uib-dropdown uib-tooltip="{{::\'此扫描尚未完成\'|translate}}" tooltip-enable="!canGenerateExport()" class="btn-group"><button uib-dropdown-toggle ng-disabled="!canGenerateExport()" class="btn btn-default"><span class="m-r-xs">导出...</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">{{::\'分组: \'|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> {{::\'无\'|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> {{::\'漏洞类型\'|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>过滤</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>'),
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">描述</div></div>'),
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>'),
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()})">{{row.entity.address}}</a><span ng-if="!grid.appScope.currentUser.permissions.targetConfig">{{row.entity.address}}</span></div>'),
e.put("/templates/targets/list-targets/cell/status.html", "<!DOCTYPE html><div class=\"ui-grid-cell-contents\"><span ng-if=\"row.entity.continuousMode\">{{::'连续扫描已启用'|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()})\">{{::'扫描开始于'|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'\">{{::'上次扫描于'|translate}}{{row.entity.lastScanDate|date:'medium'}}</span><div ng-if=\"row.entity.lastScanDate && row.entity.lastScanStatus === 'failed'\"><span>{{::'上次扫描于'}}{{row.entity.lastScanDate|date:'medium'}} </span><span class=\"text-danger\">(失败)</span></div><div ng-if=\"row.entity.lastScanDate && row.entity.lastScanStatus === 'aborted'\"><span>{{::'上次扫描于'}}{{row.entity.lastScanDate|date:'medium'}} </span><span class=\"text-danger\">(终止)</span></div><span ng-if=\"!row.entity.lastScanDate\">未扫描</span></div></div>"),
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>'),
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>{{::\'一些Web应用程序跨越多个域,此目标插入扫描时应扫描的其他包含的域,首先需要将其他主机创建为目标.\'|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="{{::\'选择...\'|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>{{::\'尚未定义主机\'|translate}}</span></p></div></div></div>'),
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">{{::\'目标\'|translate}}</label><ui-select ng-model="searchFilters.target"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'严重性\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.severity" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'业务临界性\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.criticality" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'状态\'|translate}}</label><ui-select ng-model="searchFilters.status" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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="{{::\'选择...\'|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">{{::\'组\'|translate}}</label><ui-select multiple="multiple" ng-model="searchFilters.group"><ui-select-match placeholder="{{::\'选择...\'|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">{{::\'分组: \' | 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> {{::\'无\'|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> {{::\'临界\'|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> {{::\'漏洞类型\'|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>{{::\'过滤\'|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>'),
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({type: row.entity.vulnTypeId, view: \'vulns\', scanId: grid.appScope.scanId, resultId: grid.appScope.resultId, returnUrl: grid.appScope.returnUrl})">{{row.entity.name}}</a></div>'),
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.name}}</a></div>'),
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>'),
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>'),
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>'),
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>'),
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({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>'),
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.name}}</a></div>'),
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>'),
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>'),
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="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="currentUser.permissions.systemConfig || (sections.current.name === \'excluded-hours\' && (currentUser.permissions.manageExcludedHours) || currentUser.permissions.changeDefaultExcludedHoursProfile) || (sections.current.name === \'target-groups\' && currentUser.features.target_groups && currentUser.permissions.addGroup || currentUser.permissions.removeGroup) || (sections.current.name === \'updates\' && currentUser.features.updates)" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">保存</button></div><button ng-if="currentUser.permissions.manageExcludedHours" ng-click="onCreateProfile()" class="btn btn-default">创建配置</button><div ng-if="currentUser.permissions.manageExcludedHours" uib-tooltip="{{::\'请至少选择一个配置文件\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteSelectedProfiles()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">删除所选</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>'),
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">添加问题跟踪器</button></div><div ax-no-animate ng-if="!currentUser.isChildAccount" uib-tooltip="{{::\'请至少选择一个问题跟踪器\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteIssueTracker()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">删除</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">尚未配置问题跟踪器</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>'),
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="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="currentUser.permissions.systemConfig || (sections.current.name === \'excluded-hours\' && (currentUser.permissions.manageExcludedHours) || currentUser.permissions.changeDefaultExcludedHoursProfile) || (sections.current.name === \'target-groups\' && currentUser.features.target_groups && currentUser.permissions.addGroup || currentUser.permissions.removeGroup) || (sections.current.name === \'updates\' && currentUser.features.updates)" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">保存</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}">通知设置</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>{{::\'用于用户创建、扫描和授权通知.\'|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 服务器</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">该字段必填</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">端口</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">值必须大于或等于0</span><span ng-message="max">值必须小于或等于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">发信地址</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">该字段必填</span><span ng-message="email">请输入正确的电子邮件地址</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">安全</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">该字段必填</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>此邮件服务器需要身份验证</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">用户名</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">该字段必填</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">密码</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">该字段必填</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">确认密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</span></div></div></div></div></form></fieldset></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
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="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="currentUser.permissions.systemConfig || (sections.current.name === \'excluded-hours\' && (currentUser.permissions.manageExcludedHours) || currentUser.permissions.changeDefaultExcludedHoursProfile) || (sections.current.name === \'target-groups\' && currentUser.features.target_groups && currentUser.permissions.addGroup || currentUser.permissions.removeGroup) || (sections.current.name === \'updates\' && currentUser.features.updates)" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">保存</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}">代理设置</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>{{::\'用于产品更新、许可证激活和 AcuMonitor 请求.\'|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">协议</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">该字段必填</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">该字段必填</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">端口</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">该字段必填</span><span ng-message="min">值必须大于或等于0</span><span ng-message="max">值必须小于或等于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>此代理服务器需要身份验证</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">用户名</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">该字段必填</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">密码</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">该字段必填</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">确认密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</span></div></div></div></div></fieldset></form></fieldset></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
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="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="currentUser.permissions.systemConfig || (sections.current.name === \'excluded-hours\' && (currentUser.permissions.manageExcludedHours) || currentUser.permissions.changeDefaultExcludedHoursProfile) || (sections.current.name === \'target-groups\' && currentUser.features.target_groups && currentUser.permissions.addGroup || currentUser.permissions.removeGroup) || (sections.current.name === \'updates\' && currentUser.features.updates)" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">保存</button></div><div ng-if="currentUser.features.scanning_profiles && !currentUser.isChildAccount" class="btn-group"><button ui-sref="app.scanning_profile({returnUrl: currentUrl()})" class="btn btn-default">新建</button></div><div ng-if="currentUser.features.scanning_profiles && !currentUser.isChildAccount" class="btn-group"><button ng-disabled="selectedItemsCount() === 0" ng-click="onDeleteSelected()" class="btn btn-default">删除所选</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>'),
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">添加组</button></div><div ng-if="currentUser.permissions.removeGroup" uib-tooltip="{{::\'请至少选择一个组\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteGroups()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">删除</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">尚未创建任何组</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>'),
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="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-if="currentUser.permissions.systemConfig || (sections.current.name === \'excluded-hours\' && (currentUser.permissions.manageExcludedHours) || currentUser.permissions.changeDefaultExcludedHoursProfile) || (sections.current.name === \'target-groups\' && currentUser.features.target_groups && currentUser.permissions.addGroup || currentUser.permissions.removeGroup) || (sections.current.name === \'updates\' && currentUser.features.updates)" ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">保存</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">{{::\'版本:\'|translate}} {{versionInfo.versionFull}}</strong><em class="text-muted">({{versionInfo.buildDate|date:\'d MMMM yyyy\'}})</em></div></div></div></form></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
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">添加用户</button></div><div uib-tooltip="{{::\'请至少选择一个用户\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onDeleteUsers()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">删除</button></div><div uib-tooltip="{{::\'请至少选择一个用户\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onChangeEnableStatus(true)" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">允许</button></div><div uib-tooltip="{{::\'请至少选择一个用户\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onChangeEnableStatus(false)" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">禁止</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">尚未创建用户</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>'),
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="{{::\'请选择工作人员\'|translate}}" tooltip-enable="selectedItemsCount([\'pending\', \'rejected\']) === 0" class="btn-group"><button ng-click="onAuthorizeWorkers()" ng-disabled="selectedItemsCount([\'pending\', \'rejected\']) === 0" class="btn btn-default">授权</button></div><div ax-no-animate uib-tooltip="{{::\'请选择工作人员\'|translate}}" tooltip-enable="selectedItemsCount() === 0" class="btn-group"><button ng-click="onRejectWorkers()" ng-disabled="selectedItemsCount([\'authorized\', \'pending\']) === 0" class="btn btn-default">禁止</button></div><div ax-no-animate uib-tooltip="{{::\'请选择工作人员\'|translate}}" tooltip-enable="selectedItemsCount([\'authorized\', \'pending\']) === 0" class="btn-group"><button ng-click="onDeleteWorkers()" ng-disabled="selectedItemsCount() === 0" class="btn btn-default">删除</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">尚未登记工作人员</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>'),
e.put("/templates/targets/target-config/components/ssh-config/ssh-config.component.html", ""),
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="{{::\'请先保存您的更改\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'扫描\'|translate}}</button></div><div uib-tooltip="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'保存\'|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}">技术</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 可以自动检测 web 应用程序使用的技术。使用以下选项强制 Acunetix 使用所选的技术设置扫描网站.</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}">自定义头</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="{{::\'例如: X-My-Header: 值\'|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">添加</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">移除</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}">自定义 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>可以指示爬虫使用自定义 cookie 值。在下面插入自定义 cookie。</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="{{::\'值\'|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">添加</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">该字段必填</span><span ng-message="url">请输入有效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)">移除</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}">允许的主机</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}">问题跟踪器</span></div></div><div ng-if="issueTrackerSection.enabled" class="panel-body"><p ng-if="issueTrackerSection.issueTrackers.length === 0"><span class="m-r-xs">未配置问题跟踪程序.</span><span ng-if="!currentUser.isChildAccount">请先<a ng-click="issueTrackerSection.onConfigureIssueTracker()" class="m-r-xs">配置</a><span>一个问题跟踪器.</span></span></p><div ng-if="issueTrackerSection.issueTrackers.length > 0" class="form-horizontal"><div class="form-group"><label class="control-label col-md-3">问题跟踪器</label><div class="col-md-6"><ui-select ng-model="advConfig.issueTrackerId" search-enabled="false"><ui-select-match allow-clear="false" placeholder="{{::\'选择...\'|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>{{\'排除的小时数\'|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">配置</label><div class="col-md-6"><ui-select ng-model="advConfig.excludedHoursId" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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></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}">扫描引擎</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">引擎</label><div class="col-md-6"><ui-select ng-model="scanningEngineSection.wvsWorkerId" search-enabled="false"><ui-select-match placeholder="{{::\'选择...\'|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>调试对此目标的扫描</label></div></div><button type="button" ng-if="!isTestWebsite && target.targetType !== \'network\'" ng-click="onResetAcuSensorPassword()" class="btn btn-danger m-b-xxl">重置AcuSensor密码</button></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
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="{{::\'请先保存您的更改\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'扫描\'|translate}}</button></div><div uib-tooltip="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'保存\'|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">爬行/导航</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">选择...</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">区分大小写的路径</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>仅限爬网到地址和子目录</label></div></div><div class="form-group"><label class="control-label col-md-3">排除的路径</label><div class="col-md-6"><div class="input-group"><input type="text" placeholder="{{::\'输入路径\'|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">添加</button></div></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">导入文件</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>开始前导入抓取工具的文件。可接受的格式包括带有URL列表的文本文件,WVS Sniffer日志,Fiddler SAZ,保存的BURP和状态文件或HAR文件.</span></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">选择文件...</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>'),
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="{{::\'请先保存您的更改\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'扫描\'|translate}}</button></div><div uib-tooltip="{{::\'没有正在进行更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'保存\'|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">目标信息</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">描述</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">业务临界性</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">该字段必填</span></div></div></div><div class="form-group"><label class="control-label col-md-3">扫描速度</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">连续扫描</label><div class="col-md-6"><div class="checkbox"><label ng-class="{\'bg-success\': target.continuousMode}" style="padding-left:0" uib-tooltip="{{::\'无法启用连续扫描, 因为此目标的扫描需要手动干预\'|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>扫描需要手动干预</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}">网站登录</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>尝试自动登录网站</label><p ng-class="{\'m-b-md\': siteLogin.kind === \'automatic\', \'m-b-none\': siteLogin.kind !== \'automatic\'}" translate>网站表单认证在某些情况下可以自动识别。自动检测将尝试识别登录所需的步骤、无需单击的限制链接, 以保持会话和可以识别有效会话的模式。请在下面输入您的凭据.</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">用户名</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">该字段必填</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">密码</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">该字段必填</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">确认密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</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>使用预录制的登录序列</label><p ng-class="{\'m-b-md\': siteLogin.kind === \'sequence\', \'m-b-none\': siteLogin.kind !== \'sequence\'}" translate>如果您的网站需要表单身份验证, 您需要记录在网站上登录所需的步骤。这将保存为登录序列文件, 以后可以使用。您还可以指定不希望被抓取的网站的某个部分 (例如, 您将从网站注销的链接).</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">登录顺序</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><a ng-href="{{siteLoginSection.lsrLink}}">启动登录序列记录器</a></li></ul></div></div></form></fieldset></div></div></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 允许扫描仪从 PHP 或. NET web 应用程序中收集更多信息, 从而提高了扫描结果的精确度并减少了误报。在运行 web 扫描之前下载并安装此目标的 AcuSensor.</p><p translate><strong>注意:</strong> <span>切勿在生产系统上使用 AcuSensor.</span></p></div><ul ng-if="!testWebsite.sensor" class="list-inline"><li><button ng-click="downloadSensor(\'php\')" class="btn btn-default">选择 PHP AcuSensor</button></li><li><button ng-click="downloadSensor(\'net\')" class="btn btn-default">下载. NET AcuSensor</button></li></ul><strong ng-if="testWebsite.sensor"><i class="fa fa-info m-r-sm"></i><span>AcuSensor 在测试网站上自动启用</span></strong></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
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="{{::\'请先保存您的更改\'|translate}}" tooltip-enable="hasChanges()" class="btn-group"><button ng-disabled="hasChanges()" ng-click="onCreateScan()" class="btn btn-default">{{::\'扫描\'|translate}}</button></div><div uib-tooltip="{{::\'没有要保存的更改\'|translate}}" tooltip-enable="!hasChanges()" class="btn-group"><button ng-disabled="!hasChanges()" ng-click="update()" class="btn btn-default">{{::\'保存\'|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 身份验证</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 ng-class="{\'has-error\': uiForms.authForm.username.$invalid && uiForms.authForm.username.$touched}" class="form-group"><label class="control-label col-md-3">用户名</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">该字段必填</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">密码</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">该字段必填</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">确认密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</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}">客户端证书</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">客户端证书</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 ng-class="{\'has-error\': uiForms.certForm.password.$invalid && uiForms.certForm.password.$touched}" class="form-group"><label class="control-label col-md-3">密码</label><div class="col-md-6"><input name="password" type="password" autocomplete="off" aria-autocomplete="off" required="required" ng-model="certConfig.password" class="form-control"><div ng-messages="uiForms.certForm.password.$error" ng-if="uiForms.certForm.password.$touched && uiForms.certForm.password.$invalid" class="help-block"><span ng-message="required">该字段必填</span></div></div></div><div ng-class="{\'has-error\': uiForms.certForm.retypePassword.$invalid && uiForms.certForm.retypePassword.$touched}" class="form-group"><label class="control-label col-md-3">确认密码</label><div class="col-md-6"><input type="password" name="retypePassword" autocomplete="off" aria-autocomplete="off" required="required" 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="required">该字段必填</span><span ng-message="equalTo">密码不匹配</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}">代理服务器</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">协议</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">该字段必填</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">地址</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">该字段必填</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">端口</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">该字段必填</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>{{::\'此代理服务器需要身份验证\'|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">用户名</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">该字段必填</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">密码</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">该字段必填</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">确认密码</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">该字段必填</span><span ng-message="equalTo">密码不匹配</span></div></div></div></div></fieldset></form></fieldset></div></div></div></div></div></uib-tab></uib-tabset></div></div></div></div></div>'),
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()})">查看详细信息</a><span ng-if="row.entity.resultId === grid.appScope.scan.resultId" class="text-muted">当前会话</span></div>'),
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>"),
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>'),
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>'),
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>'),
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>"),
e.put("/templates/settings/system-config/sections/issue-trackers/cols/name.html", '<!DOCTYPE html><div class="ui-grid-cell-contents"><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 pull-right">{{::\'检查网络连接\'|translate}}</button></div>'),
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>'),
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>'),
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>'),
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>'),
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>'),
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>'),
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>'),
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>'),
e.put("/templates/settings/system-config/sections/workers/cols/authorization.html", '<!DOCTYPE html><div class="ui-grid-cell-contents">{{row.entity.endpoint|axWorkerEndpoint}}</div>'),
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>'),
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>')
}])
}();