Files
arc-evilsocket/webui/index.html
2024-04-06 10:19:07 -04:00

214 lines
9.1 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<title>Arc</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Arc Secrets Manager">
<meta name="author" content="Simone 'evilsocket' Margaritelli">
<link rel="shortcut icon" type="image/png" href="/img/logo.png?v=2.3" />
<link rel="apple-touch-icon" href="/img/logo.png?v=2.3" />
<link rel="stylesheet" href="/css/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="/css/bootstrap/bootstrap-datetimepicker.min.css">
<link rel="stylesheet" href="/css/fontawesome/font-awesome.min.css">
<link rel="stylesheet" href="/css/jquery.editable.css">
<link rel="stylesheet" href="/css/style.css">
<!-- load app version and error handler first -->
<script type="text/javascript" src="/js/version.js"></script>
<script type="text/javascript" src="/js/crash.js"></script>
<script type="text/javascript" src="/js/libs/jquery/jquery.min.js"></script>
<script type="text/javascript" src="/js/libs/jquery/jquery.editable.js"></script>
<script type="text/javascript" src="/js/libs/jquery/jquery.timeago.js"></script>
<script type="text/javascript" src="/js/libs/jquery/jquery-sortable.js"></script>
<script type="text/javascript" src="/js/libs/jquery/jq-ajax-progress.min.js"></script>
<script type="text/javascript" src="/js/libs/bootstrap/bootstrap.bundle.min.js"></script>
<script type="text/javascript" src="/js/libs/bootstrap/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="/js/libs/angular/angular.min.js"></script>
<script type="text/javascript" src="/js/libs/ace/ace.js"></script>
<script type="text/javascript" src="/js/libs/ace/ext-modelist.js"></script>
<script type="text/javascript" src="/js/api.js?v=2"></script>
<script type="text/javascript" src="/js/encoding.js"></script>
<script type="text/javascript" src="/js/aes_cbc.js"></script>
<script type="text/javascript" src="/js/aes.js"></script>
<script type="text/javascript" src="/js/entries/base.js"></script>
<script type="text/javascript" src="/js/entries/input.js"></script>
<script type="text/javascript" src="/js/entries/url.js"></script>
<script type="text/javascript" src="/js/entries/text.js"></script>
<script type="text/javascript" src="/js/entries/file.js"></script>
<script type="text/javascript" src="/js/entries/password.js"></script>
<script type="text/javascript" src="/js/entries/markdown.js"></script>
<script type="text/javascript" src="/js/entries/checkbox.js"></script>
<script type="text/javascript" src="/js/entries/html.js"></script>
<script type="text/javascript" src="/js/entries/btcaddr.js"></script>
<script type="text/javascript" src="/js/entries/otp.js"></script>
<script type="text/javascript" src="/js/entries/code.js"></script>
<script type="text/javascript" src="/js/entries.js"></script>
<script type="text/javascript" src="/js/record.js"></script>
<script type="text/javascript" src="/js/notify.js"></script>
<script type="text/javascript" src="/js/app.js"></script>
</head>
<body id="ngscope" ng-app="PM" ng-controller="PMController">
<div class="main-container container-fluid">
<div ng-include src="'/views/modals/error.html?v=2'"></div>
<div ng-include src="'/views/modals/event.html'"></div>
<div ng-include src="'/views/modals/loader.html?v=7'"></div>
<!-- if user is not logged, show login -->
<div id="login" class="container" ng-if="!arc.IsLogged()" ng-include src="'/views/login.html?v=5'"></div>
<!-- user logged but empty encryption key -->
<div ng-if="arc.IsLogged() && !key" style="margin-bottom:-10px; margin-top:10px;" class="alert alert-warning">
No encryption key provided.
</div>
<!-- if user is logged instead -->
<span ng-if="arc.IsLogged()" ng-switch on="arc.HasStore()">
<div class="notifications badge badge-pill badge-warning" ng-if="status.events.length" ng-include
src="'/views/notifications.html'">
</div>
<!-- no store selected, show available stores -->
<div ng-switch-when="false">
<ul id="stores_list" class="list-group stores-list">
<li class="list-group-item">
<div class="row">
<div class="col-4">
<center class="action-button" ng-click="doLogout()">
<i class="fa fa-sign-out" aria-hidden="true"></i>
</center>
</div>
<div class="col-4">
<center class="action-button" ng-click="onSettings()">
<i class="fa fa-cog" aria-hidden="true"></i>
</center>
</div>
<div class="col-4" style="border-left: 1px solid #eee">
<center class="action-button" ng-click="onNewStore()">
<i class="fa fa-file" aria-hidden="true"></i>
</center>
</div>
</div>
<!-- will show session expire time when approaching 5 minutes left -->
<div id="session_time_left" class="alert alert-warning" style="display:none"></div>
</li>
<li class="list-group-item" ng-if="!stores.length">
<small class="action-label">
No stores found, create one using the <i class="fa fa-file" aria-hidden="true"></i> icon.
</small>
</li>
<li class="list-group-item store-list-item" ng-repeat="s in stores" ng-click="onShowStore(s.id)">
<span ng-include src="'/views/store_list_item.html'"></span>
</li>
</ul>
<div ng-include src="'/views/modals/settings.html'"></div>
</div>
<!-- store selected, load records from it -->
<div ng-switch-when="true">
<ul id="secrets_list" class="list-group secrets-list">
<li class="list-group-item nohover">
<div class="row">
<div class="col-6">
<div class="store-media">
<i class="fa fa-database" aria-hidden="true"></i>
</div>
<h5 class="editable" id="store_title">{{ arc.store.title }}</h5>
<script type="text/javascript">
$('#store_title').editable(function (v) {
$('#ngscope').scope().onStoreTitleChanged(v);
});
</script>
</div>
<div class="col-6 input-group">
<input type="text" id="search_filter" class="search-filter form-control border" ng-model="search"
ng-change="updateFilter()" placeholder="Search ..." />
</div>
</div>
<!-- will show session expire time when approaching 5 minutes left -->
<div id="session_time_left" class="alert alert-warning" style="display:none"></div>
</li>
<li class="list-group-item nohover">
<div class="row">
<div class="col-4">
<center class="action-button" ng-click="onBack()">
<i class="fa fa-chevron-left" aria-hidden="true"></i>
</center>
</div>
<div class="col-4" style="border-left: 1px solid #eee">
<center class="action-button" ng-click="onDeleteStore()">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</center>
</div>
<div class="col-4" style="border-left: 1px solid #eee">
<center class="action-button" ng-click="onNewSecret()">
<i class="fa fa-file" aria-hidden="true"></i>
</center>
</div>
</div>
</li>
<li class="list-group-item" ng-if="!arc.records.length">
<small class="action-label">
No records found, create one using the <i class="fa fa-file" aria-hidden="true"></i> icon.
</small>
</li>
<li ng-repeat="r in arc.records | orderBy:['pinned','updated_at']:true" class="list-group-item"
id="secret_list_item_{{ r.id }}" ng-if="filterSecret(r)" ng-click="onShowSecret(r.id)"
ng-class="{'expired': isExpired(r), 'expiring': isExpiring(r), 'pinned': isPinned(r) }">
<span ng-include src="'/views/secret_list_item.html?v=17'"></span>
</li>
</ul>
<div ng-include src="'/views/modals/secret.html?v=28'"></div>
</div>
</span>
</div>
<footer>
<center>
<small>
<span ng-if="arc.IsLogged()">
<span ng-switch on="status.online">
<div ng-switch-when="false" style="color: red; font-weight: bold;">
The API is offline.
</div>
<div ng-switch-when="true">
Running v{{ status.version }}, started {{ status.started | timeago }}, {{ status.size | bytes }} big,
latency is {{ latency }} ms.
</div>
</span>
</span>
<a href="https://github.com/evilsocket/arc">Arc</a> was made with <span style="color:red"></span> by
<a href="https://www.evilsocket.net/" target="_blank">Simone 'evilsocket' Margaritelli</a>
</small>
</center>
</footer>
</body>
</html>