mirror of
https://github.com/ziirish/burp-ui.git
synced 2026-05-15 14:16:08 -06:00
168 lines
12 KiB
HTML
168 lines
12 KiB
HTML
{% extends "layout.html" %}
|
|
{% block body %}
|
|
{% include "notifications.html" %}
|
|
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
|
|
{% include "small_topbar.html" %}
|
|
<ul class="breadcrumb" style="margin-bottom: 5px;">
|
|
{% if server -%}
|
|
<li><a href="{{ url_for('view.home') }}">{{ _('Home') }}</a></li>
|
|
<li><a href="{{ url_for('view.clients', server=server) }}">{{ _('%(server)s clients', server=server) }}</a></li>
|
|
<li><a href="{{ url_for('view.client', name=cname, server=server) }}">{{ _('%(client)s overview', client=cname) }}</a></li>
|
|
<li class="active">{{ _('Backup n°%(number)s overview', number=mypad(nbackup)) }}</li>
|
|
{% else -%}
|
|
<li><a href="{{ url_for('view.home') }}">{{ _('Home') }}</a></li>
|
|
<li><a href="{{ url_for('view.client', name=cname) }}">{{ _('%(client)s overview', client=cname) }}</a></li>
|
|
<li class="active">{{ _('Backup n°%(number)s overview', number=mypad(nbackup)) }}</li>
|
|
{% endif -%}
|
|
</ul>
|
|
<br />
|
|
<h1 class="page-header">{{ _('Backup n°%(number)s of %(client)s', number=mypad(nbackup), client=cname) }}</h1>
|
|
<div class="row form-horizontal">
|
|
<form class="form-inline col-md-6" role="form" action="#" onsubmit="return false;">
|
|
<div class="form-group">
|
|
<div class="input-group">
|
|
<input type="text" class="form-control" placeholder="{{ _('filter...') }}" name="search-tree" autocomplete="off">
|
|
<div class="input-group-btn">
|
|
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button">
|
|
<i class="fa fa-fw fa-cog" aria-hidden="true"></i> {{ _('options') }}
|
|
<span class="caret"></span>
|
|
</button>
|
|
<ul class="dropdown-menu browse" style="z-index: 1002;">
|
|
<li><label for="hideMode"><i class="fa fa-fw fa-eye-slash" aria-hidden="true"></i> {{ _('Hide unmatched nodes') }} </label><input type="checkbox" id="hideMode"></li>
|
|
<li><label for="leavesOnly"><i class="fa fa-fw fa-leaf" aria-hidden="true"></i> {{ _('Leaves only') }} </label><input type="checkbox" id="leavesOnly"></li>
|
|
<li><label for="regex"><i class="fa fa-fw fa-filter" aria-hidden="true"></i> {{ _('Use regex') }} </label><input type="checkbox" id="regex"></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<span id="btnResetSearch" class="btn btn-default"><i class="fa fa-eraser" aria-hidden="true"></i></span>
|
|
</div>
|
|
<span class="help-block" id="matches"></span>
|
|
</form>
|
|
<div class="form-inline col-md-6 text-right">
|
|
<button class="btn btn-default pull-right" id="btn-expand-collapse-tree" data-collapsed="true" data-toggle="tooltip" data-placement="top" title="{{ _('This will only expand already loaded nodes to avoid flooding the server with the lazy-loading requests') }}"><i class="fa fa-expand" aria-hidden="true"></i> {{ _('Expand tree') }}</button>
|
|
<button class="btn btn-default pull-right" ng-show="load_all" id="btn-load-all-tree" data-toggle="tooltip" data-placement="top" title="{{ _('This may take some time depending the number of files in your backup') }}" ng-cloak><i class="fa fa-database" aria-hidden="true"></i> {{ _('Fetch all nodes') }}</button>
|
|
</div>
|
|
</div>
|
|
<br />
|
|
<div id="waiting-container" class="row">
|
|
<i class="fa fa-spin fa-fw fa-refresh" aria-hidden="true"></i> {{ _('Loading, Please wait...') }}
|
|
<br />
|
|
<div class="progress progress-striped active">
|
|
<div class="progress-bar progress-bar-info" style="width: 100%"></div>
|
|
</div>
|
|
</div>
|
|
<div id="tree-container" class="table-responsive row" style="display:none;">
|
|
<table id="tree" class="table">
|
|
<thead>
|
|
<tr>
|
|
<th></th><th>{{ _('mode') }}</th><th>{{ _('UID') }}</th><th>{{ _('GID') }}</th><th>{{ _('Size') }}</th><th>{{ _('Date') }}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<br />
|
|
<div class="row form-horizontal">
|
|
{% if config.WITH_CELERY -%}
|
|
<form id="form-restore" class="form-inline col-md-6" method="POST" role="form" action="{{ url_for('api.task_restore', name=cname, backup=nbackup, server=server) }}">
|
|
{% else -%}
|
|
<form id="form-restore" class="form-inline col-md-6" method="POST" role="form" action="{{ url_for('api.restore', name=cname, backup=nbackup, server=server) }}">
|
|
{% endif -%}
|
|
<input type="hidden" name="list">
|
|
<div id="restore-form" style="display:none;">
|
|
{% if encrypted -%}
|
|
<div id="notice">
|
|
<div class="panel panel-warning">
|
|
<div class="panel-heading">
|
|
<h3 class="panel-title"><i class="fa fa-fw fa-info-circle" aria-hidden="true"></i> {{ _('Information') }}</h3>
|
|
</div>
|
|
<div class="panel-body">
|
|
{{ _('This backup is encrypted, please provide the encryption password in order to perform an online restoration.') }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif -%}
|
|
<div class="btn-group dropup">
|
|
<button type="submit" class="btn btn-info" id="perform"><i class="fa fa-fw fa-cloud-download" aria-hidden="true"></i> {{ _('Download selected files') }}</button>
|
|
<button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
|
|
<ul class="dropdown-menu browse" style="z-index: 1002;">
|
|
<li><label for="strip">{{ _('Number of leading path components to strip') }}: </label><input type="number" id="strip" name="strip" placeholder="0" autocomplete="off" min="0" style="width: 3em;" value="{{ config.DEFAULT_STRIP }}"></li>
|
|
<li><label for="format">{{ _('Archive format') }}: </label><select id="format" name="format" style="color: #000;"><option>zip</option><option>tar.gz</option><option>tar.bz2</option></select></li>
|
|
<li><label for="pass">{{ _('Encryption password') }}: </label><input type="password" id="pass" name="pass" placeholder="{{ _('password') }}" autocomplete="off" size="20"></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<form id="form-server-initiated" class="form-inline col-md-6 text-right" method="POST" role="form" action"{{ url_for('api.server_restore', name=cname, backup=nbackup, server=server) }}">
|
|
<input type="hidden" name="list-sc">
|
|
<div id="server-initiated-form" style="display:none;">
|
|
<div class="btn-group dropup pull-right" ng-show="sc_restore.enabled">
|
|
<button type="submit" class="btn btn-info" id="perform-server-initiated"><i class="fa fa-fw fa-cloud-upload" aria-hidden="true"></i> {{ _('Server initiated restore') }}</button>
|
|
<button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
|
|
<ul class="dropdown-menu dropdown-menu-right browse" style="z-index: 1002;">
|
|
<li><label for="strip-sc">{{ _('Number of leading path components to strip') }}: </label><input type="number" id="strip-sc" name="strip-sc" placeholder="0" autocomplete="off" min="0" style="width: 3em;" value="{% if edit and edit.strip %}{{ edit.strip }}{% else %}{{ config.DEFAULT_STRIP }}{% endif %}"></li>
|
|
<li><label for="prefix-sc">{{ _('Prefix to the restore path') }}: </label><input type="text" id="prefix-sc" name="prefix-sc" placeholder="{{ _('prefix') }}" autocomplete="off" value="{% if edit and edit.restoreprefix %}{{ edit.restoreprefix }}{% endif %}"></li>
|
|
<li>
|
|
<label for="restoreto-sc">{{ _('Restore files on an other client') }}: </label>
|
|
<select name="restoreto-sc" id="restoreto-sc" ng-model="sc_restore.to">
|
|
<option value="" disabled selected>{{ _('none') }}</option>
|
|
{% raw %}
|
|
<option ng-repeat="client in sc_restore.clients" value="{{client.name}}">{{client.name}}</option>
|
|
{% endraw %}
|
|
</select>
|
|
</li>
|
|
<li><label for="force-sc">{{ _('Whether to overwrite existing files') }}: </label><input type="checkbox" id="force-sc" name="force-sc" {% if edit and edit.overwrite %}checked{% endif %}></li>
|
|
</ul>
|
|
</div>
|
|
{% if edit -%}
|
|
<button type="button" id="btn-cancel-restore" class="btn btn-danger pull-right" ng-show="sc_restore.enabled"><i class="fa fa-fw fa-trash" aria-hidden="true"></i> {{ _('Cancel restore') }}</button>
|
|
{% endif -%}
|
|
<button type="button" id="btn-clear" class="btn btn-info pull-right"><i class="fa fa-eraser" aria-hidden="true"></i> {{ _('Clear selection') }}</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div id="restore-modal" class="modal fade" tabindex="-1" role="dialog">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
<h4 class="modal-title">{{ _('Processing request') }}</h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
<i class="fa fa-spin fa-fw fa-refresh" aria-hidden="true"></i> {{ _('Please wait while restoration is processing...') }}
|
|
<br />
|
|
<div class="progress progress-striped active">
|
|
<div class="progress-bar progress-bar-info" style="width: 100%"></div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
{% if config.WITH_CELERY -%}
|
|
<button type="button" class="btn btn-danger" id="cancel-running-restore" data-dismiss="modal">{{ _('Cancel') }}</button>
|
|
{% endif -%}
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">{{ _('Close') }}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="error-modal" class="modal fade" tabindex="-1" role="error">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
<h4 class="modal-title">{{ _('Restoration error') }}</h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="alert alert-danger">
|
|
<i class="fa fa-fw fa-exclamation-circle" aria-hidden="true"></i> {{ _('An error occurred while processing the restoration.') }}
|
|
<pre id="error-response"></pre>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">{{ _('Close') }}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|