Updated web vault

This commit is contained in:
Daniel García 2018-03-21 01:05:13 +01:00
parent 9116253ae5
commit 3b2b4d8382
25 changed files with 277 additions and 443 deletions

View File

@ -14,7 +14,7 @@
<p class="text-center"><strong>{{state.params.email}}</strong></p> <p class="text-center"><strong>{{state.params.email}}</strong></p>
<p> <p>
You've been invited to join the organization listed above. You've been invited to join the organization listed above.
To accept the invitation, you need to log in or create a new bitwarden account. To accept the invitation, you need to log in or create a new Bitwarden account.
</p> </p>
<hr /> <hr />
<div class="row"> <div class="row">

View File

@ -3,7 +3,7 @@
<i class="fa fa-shield"></i> <b>bit</b>warden <i class="fa fa-shield"></i> <b>bit</b>warden
</div> </div>
<div class="login-box-body"> <div class="login-box-body">
<p class="login-box-msg">Enter your email address below to recover &amp; delete your bitwarden account.</p> <p class="login-box-msg">Enter your email address below to recover &amp; delete your Bitwarden account.</p>
<div ng-show="success" class="text-center"> <div ng-show="success" class="text-center">
<div class="callout callout-success"> <div class="callout callout-success">
If your account exists ({{model.email}}) we've sent you an email with further instructions. If your account exists ({{model.email}}) we've sent you an email with further instructions.

View File

@ -12,7 +12,7 @@
This will permanently delete your account. This cannot be undone. This will permanently delete your account. This cannot be undone.
</div> </div>
<p> <p>
You have requested to delete your bitwarden account (<b>{{email}}</b>). You have requested to delete your Bitwarden account (<b>{{email}}</b>).
Click the button below to confirm and proceed. Click the button below to confirm and proceed.
</p> </p>
<button ng-click="delete()" class="btn btn-danger btn-block btn-flat">Delete Account</button> <button ng-click="delete()" class="btn btn-danger btn-block btn-flat">Delete Account</button>

View File

@ -22,7 +22,7 @@
<h3 class="box-title">Let's Get Started!</h3> <h3 class="box-title">Let's Get Started!</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<p>Dashboard features are coming soon. Get started by inviting users and creating your collections.</p> <p>Get started by inviting users and creating your collections.</p>
<a class="btn btn-default btn-flat" ui-sref="backend.org.people({orgId: orgProfile.id})"> <a class="btn btn-default btn-flat" ui-sref="backend.org.people({orgId: orgProfile.id})">
Invite Users Invite Users
</a> </a>

View File

@ -5,8 +5,8 @@
<form name="inviteForm" ng-submit="inviteForm.$valid && submit(model)" api-form="submitPromise" autocomplete="off"> <form name="inviteForm" ng-submit="inviteForm.$valid && submit(model)" api-form="submitPromise" autocomplete="off">
<div class="modal-body"> <div class="modal-body">
<p> <p>
Invite a new user to your organization by entering their bitwarden account email address below. If they do not have Invite a new user to your organization by entering their Bitwarden account email address below. If they do not have
a bitwarden account already, they will be prompted to create a new account. a Bitwarden account already, they will be prompted to create a new account.
</p> </p>
<div class="callout callout-danger validation-errors" ng-show="inviteForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="inviteForm.$errors">
<h4>Errors have occurred</h4> <h4>Errors have occurred</h4>

View File

@ -10,31 +10,22 @@
</h1> </h1>
</section> </section>
<section class="content"> <section class="content">
<p ng-show="loading && !collections.length">Loading...</p> <p ng-show="loading">Loading...</p>
<div class="box" ng-class="{'collapsed-box': collection.collapsed}" ng-repeat="collection in collections | <div class="box" ng-show="!loading">
orderBy: collectionSort track by collection.id"
ng-show="collections.length && (!main.searchVaultText || collectionCiphers.length)">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"> <h3 class="box-title">
<i class="fa" ng-class="{'fa-cube': collection.id, 'fa-sitemap': !collection.id}"></i> <i class="fa {{selectedIcon}}"></i>
{{collection.name}} {{selectedCollection ? selectedCollection.name : selectedTitle}}
<small ng-pluralize count="collectionCiphers.length" when="{'1': '{} item', 'other': '{} items'}"></small> <small ng-pluralize count="filteredCiphers.length" when="{'1': '{} item', 'other': '{} items'}"></small>
</h3> </h3>
<div class="box-tools">
<button type="button" class="btn btn-box-tool" data-widget="collapse" title="Collapse/Expand"
ng-click="collapseExpand(collection)">
<i class="fa" ng-class="{'fa-minus': !collection.collapsed, 'fa-plus': collection.collapsed}"></i>
</button>
</div> </div>
</div> <div class="box-body" ng-class="{'no-padding': filteredCiphers.length}">
<div class="box-body" ng-class="{'no-padding': collectionCiphers.length}"> <div ng-show="!filteredCiphers.length">No items to list.</div>
<div ng-show="!collectionCiphers.length && collection.id">No items in this collection.</div> <div class="table-responsive" ng-show="filteredCiphers.length">
<div ng-show="!collectionCiphers.length && !collection.id">No unassigned items.</div>
<div class="table-responsive" ng-show="collectionCiphers.length">
<table class="table table-striped table-hover table-vmiddle"> <table class="table table-striped table-hover table-vmiddle">
<tbody> <tbody>
<tr ng-repeat="cipher in collectionCiphers = (ciphers | filter: filterByCollection(collection) | <tr ng-repeat="cipher in filteredCiphers = (ciphers | filter: cipherFilter() |
filter: (main.searchVaultText || '') | orderBy: ['name', 'subTitle']) track by cipher.id"> filter: (searchVaultText || '') | orderBy: ['name', 'subTitle']) track by cipher.id">
<td style="width: 70px;"> <td style="width: 70px;">
<div class="btn-group" data-append-to="body"> <div class="btn-group" data-append-to="body">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
@ -61,12 +52,6 @@
<i class="fa fa-fw fa-file-text-o"></i> Event Logs <i class="fa fa-fw fa-file-text-o"></i> Event Logs
</a> </a>
</li> </li>
<li>
<a href="#" stop-click ng-click="removeCipher(cipher, collection)" class="text-red"
ng-if="collection.id">
<i class="fa fa-fw fa-remove"></i> Remove
</a>
</li>
<li> <li>
<a href="#" stop-click ng-click="deleteCipher(cipher)" class="text-red"> <a href="#" stop-click ng-click="deleteCipher(cipher)" class="text-red">
<i class="fa fa-fw fa-trash"></i> Delete <i class="fa fa-fw fa-trash"></i> Delete
@ -93,3 +78,65 @@
</div> </div>
</div> </div>
</section> </section>
<aside class="control-sidebar control-sidebar-light">
<div class="tab-content">
<form class="search-form">
<label for="search" class="sr-only">Search</label>
<div class="form-group has-feedback">
<input type="search" id="search" class="form-control" placeholder="Search org vault..."
ng-model="searchVaultText" />
<span class="fa fa-search form-control-feedback" aria-hidden="true"></span>
</div>
</form>
<ul class="control-sidebar-menu">
<li ng-class="{active: selectedAll}">
<a href="#" stop-click ng-click="filterAll()">
<i class="fa fa-th fa-fw"></i> All Items
</a>
</li>
</ul>
<h3 class="control-sidebar-heading">Types</h3>
<div class="control-sidebar-section">
<ul class="control-sidebar-menu">
<li ng-class="{active: constants.cipherType.login === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.login)">
<i class="fa fa-globe fa-fw"></i> Login
</a>
</li>
<li ng-class="{active: constants.cipherType.card === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.card)">
<i class="fa fa-credit-card fa-fw"></i> Card
</a>
</li>
<li ng-class="{active: constants.cipherType.identity === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.identity)">
<i class="fa fa-id-card-o fa-fw"></i> Identity
</a>
</li>
<li ng-class="{active: constants.cipherType.secureNote === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.secureNote)">
<i class="fa fa-sticky-note-o fa-fw"></i> Secure Note
</a>
</li>
</ul>
</div>
<h3 class="control-sidebar-heading">Collections</h3>
<div ng-show="loading && !collections.length">
<p>Loading...</p>
</div>
<div ng-show="!loading && !collections.length">
<p>No collections.</p>
</div>
<div class="control-sidebar-section" ng-show="!loading && collections.length">
<ul class="control-sidebar-menu">
<li ng-repeat="collection in collections | orderBy: [collectionSort] track by collection.id"
ng-class="{active: selectedCollection && collection.id === selectedCollection.id}">
<a href="#" stop-click ng-click="filterCollection(collection)">
<i class="fa fa-caret-right fa-fw"></i>
{{collection.name}}
</a>
</li>
</ul>
</div>
</div>
</aside>

View File

@ -4,7 +4,7 @@
<section class="content"> <section class="content">
<p> <p>
If you have the same login across multiple different website domains, you can mark the website as "equivalent". If you have the same login across multiple different website domains, you can mark the website as "equivalent".
"Global" domains are ones already created for you by bitwarden. "Global" domains are ones already created for you by Bitwarden.
</p> </p>
<form name="customForm" ng-submit="customForm.$valid && saveCustom()" api-form="customPromise" autocomplete="off"> <form name="customForm" ng-submit="customForm.$valid && saveCustom()" api-form="customPromise" autocomplete="off">
<div class="box box-default"> <div class="box box-default">

View File

@ -8,7 +8,7 @@
</div> </div>
<div class="box-body"> <div class="box-body">
The recovery code allows you to access your account in the event that you can no longer use your normal The recovery code allows you to access your account in the event that you can no longer use your normal
two-step login provider (ex. you lose your device). bitwarden support will not be able to assist you if you lose two-step login provider (ex. you lose your device). Bitwarden support will not be able to assist you if you lose
access to your account. We recommend you write down or print the recovery code and keep it in a safe place. access to your account. We recommend you write down or print the recovery code and keep it in a safe place.
</div> </div>
<div class="box-footer"> <div class="box-footer">

View File

@ -48,7 +48,7 @@
<li ng-repeat="e in submitTwoStepForm.$errors">{{e}}</li> <li ng-repeat="e in submitTwoStepForm.$errors">{{e}}</li>
</ul> </ul>
</div> </div>
<p>Enter the bitwarden application information from your Duo Admin panel:</p> <p>Enter the Bitwarden application information from your Duo Admin panel:</p>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="ikey">Integration Key</label> <label for="ikey">Integration Key</label>
<input type="text" id="ikey" name="IntegrationKey" ng-model="updateModel.ikey" class="form-control" <input type="text" id="ikey" name="IntegrationKey" ng-model="updateModel.ikey" class="form-control"

View File

@ -33,7 +33,7 @@
<div class="callout callout-warning"> <div class="callout callout-warning">
<h4><i class="fa fa-warning"></i> Warning <i class="fa fa-warning"></i></h4> <h4><i class="fa fa-warning"></i> Warning <i class="fa fa-warning"></i></h4>
<p> <p>
Due to platform limitations, FIDO U2F cannot be used on all bitwarden applications. You should enable Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable
another two-step login provider so that you can access your account when FIDO U2F cannot be used. another two-step login provider so that you can access your account when FIDO U2F cannot be used.
</p> </p>
<p>Supported platforms:</p> <p>Supported platforms:</p>

View File

@ -33,7 +33,7 @@
<div class="callout callout-warning"> <div class="callout callout-warning">
<h4><i class="fa fa-warning"></i> Warning <i class="fa fa-warning"></i></h4> <h4><i class="fa fa-warning"></i> Warning <i class="fa fa-warning"></i></h4>
<p> <p>
Due to platform limitations, YubiKeys cannot be used on all bitwarden applications. You should enable Due to platform limitations, YubiKeys cannot be used on all Bitwarden applications. You should enable
another two-step login provider so that you can access your account when YubiKeys cannot be used. another two-step login provider so that you can access your account when YubiKeys cannot be used.
</p> </p>
<p>Supported platforms:</p> <p>Supported platforms:</p>

View File

@ -21,7 +21,7 @@
<hr /> <hr />
<div class="callout callout-warning"> <div class="callout callout-warning">
<h4><i class="fa fa-warning"></i> Warning</h4> <h4><i class="fa fa-warning"></i> Warning</h4>
After updating your encryption key, you are required to log out and back in to all bitwarden applications that you After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you
are currently using (such as the mobile app or browser extensions). Failure to log out and back are currently using (such as the mobile app or browser extensions). Failure to log out and back
in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out
automatically, however it may be delayed. automatically, however it may be delayed.

View File

@ -16,19 +16,14 @@
</a> </a>
</li> </li>
<li role="separator" class="divider"></li> <li role="separator" class="divider"></li>
<li>
<a href="#" stop-click ng-click="selectAll()">
<i class="fa fa-fw fa-check-square-o"></i> Select All
</a>
</li>
<li> <li>
<a href="#" stop-click ng-click="unselectAll()"> <a href="#" stop-click ng-click="unselectAll()">
<i class="fa fa-fw fa-minus-circle"></i> Unselect All <i class="fa fa-fw fa-minus-square-o"></i> Unselect All
</a>
</li>
<li>
<a href="#" stop-click ng-click="collapseAll()">
<i class="fa fa-fw fa-minus-square-o"></i> Collapse All
</a>
</li>
<li>
<a href="#" stop-click ng-click="expandAll()">
<i class="fa fa-fw fa-plus-square-o"></i> Expand All
</a> </a>
</li> </li>
</ul> </ul>
@ -36,184 +31,57 @@
<h1> <h1>
My Vault My Vault
<small class="visible-md-inline visible-lg-inline"> <small class="visible-md-inline visible-lg-inline">
<span ng-pluralize count="folderCount" when="{'1': '{} folder', 'other': '{} folders'}"></span>, <span ng-pluralize count="vaultFolders.length > 0 ? vaultFolders.length - 1 : 0"
<span ng-pluralize count="collectionCount" when="{'1': '{} collection', 'other': '{} collections'}"></span>, &amp; when="{'1': '{} folder', 'other': '{} folders'}"></span>,
<span ng-pluralize count="vaultCollections.length"
when="{'1': '{} collection', 'other': '{} collections'}"></span>, &amp;
<span ng-pluralize count="ciphers.length" when="{'1': '{} item', 'other': '{} items'}"></span> <span ng-pluralize count="ciphers.length" when="{'1': '{} item', 'other': '{} items'}"></span>
</small> </small>
</h1> </h1>
</section> </section>
<section class="content"> <section class="content">
<div ng-show="loading && !vaultGroupings.length"> <div ng-show="loadingCiphers">
<p>Loading...</p> <p>Loading...</p>
</div> </div>
<div class="box box-primary" ng-class="{'collapsed-box': favoriteCollapsed}" style="margin-bottom: 40px;" <div class="box" ng-show="!loadingCiphers">
ng-show="vaultGroupings.length && groupingIdFilter === undefined && (!main.searchVaultText || favoriteCiphers.length)">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"> <h3 class="box-title">
<i class="fa fa-star"></i> <i class="fa {{selectedIcon}}"></i>
Favorites {{selectedFolder ? selectedFolder.name : selectedCollection ? selectedCollection.name : selectedTitle}}
<small ng-pluralize count="favoriteCiphers.length" when="{'1': '{} item', 'other': '{} items'}"></small> <small ng-pluralize count="filteredCiphers.length" when="{'1': '{} item', 'other': '{} items'}"></small>
</h3> </h3>
<div class="box-tools"> <div class="box-tools" ng-if="selectedFolder && selectedFolder.id">
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"> <button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-cog"></i> <span class="caret"></span> <i class="fa fa-cog"></i> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li> <li>
<a href="#" stop-click ng-click="addCipher(null, true)"> <a href="#" stop-click ng-click="editFolder(selectedFolder)">
<i class="fa fa-fw fa-plus-circle"></i> New Item
</a>
</li>
</ul>
</div>
<button type="button" class="btn btn-box-tool" data-widget="collapse" title="Collapse/Expand"
ng-click="collapseExpand(null, true)">
<i class="fa" ng-class="{'fa-minus': !favoriteCollapsed, 'fa-plus': favoriteCollapsed}"></i>
</button>
</div>
</div>
<div class="box-body" ng-class="{'no-padding': favoriteCiphers.length}">
<div ng-show="!favoriteCiphers.length">
<p>No favorite items.</p>
<button type="button" ng-click="addCipher(null, true)" class="btn btn-default btn-flat">Add an Item</button>
</div>
<div class="table-responsive" ng-show="favoriteCiphers.length">
<table class="table table-striped table-hover table-vmiddle">
<tbody>
<tr ng-repeat="cipher in favoriteCiphers = (ciphers | filter: { favorite: true } |
filter: cipherFilter(null) | filter: (main.searchVaultText || '')) track by cipher.id">
<td style="width: 70px;">
<div class="btn-group" data-append-to="body">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-cog"></i> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li>
<a href="#" stop-click ng-click="editCipher(cipher)">
<i class="fa fa-fw fa-pencil"></i> Edit
</a>
</li>
<li>
<a href="#" stop-click ng-click="attachments(cipher)">
<i class="fa fa-fw fa-paperclip"></i> Attachments
</a>
</li>
<li ng-show="!cipher.organizationId">
<a href="#" stop-click ng-click="share(cipher)">
<i class="fa fa-fw fa-share-alt"></i> Share
</a>
</li>
<li ng-show="cipher.organizationId && cipher.edit">
<a href="#" stop-click ng-click="editCollections(cipher)">
<i class="fa fa-fw fa-cubes"></i> Collections
</a>
</li>
<li ng-show="cipher.meta.password">
<a href="#" stop-click ngclipboard ngclipboard-error="clipboardError(e)"
data-clipboard-text="{{cipher.meta.password}}">
<i class="fa fa-fw fa-clipboard"></i> Copy Password
</a>
</li>
<li ng-show="cipher.edit">
<a href="#" stop-click ng-click="deleteCipher(cipher)" class="text-red">
<i class="fa fa-fw fa-trash"></i> Delete
</a>
</li>
</ul>
</div>
</td>
<td class="action-select" ng-click="select($event)">
<input type="checkbox" value="{{::cipher.id}}" name="cipherSelection" stop-prop />
</td>
<td class="vault-icon" ng-click="select($event)">
<i class="fa fa-fw fa-lg {{::cipher.icon}}" ng-if="!cipher.meta.image"></i>
<img alt="" ng-if="cipher.meta.image" ng-src="{{cipher.meta.image}}"
fallback-src="images/fa-globe.png" />
</td>
<td ng-click="select($event)">
<a href="#" stop-click ng-click="editCipher(cipher)" stop-prop>{{cipher.name}}</a>
<i class="fa fa-share-alt text-muted" title="Shared" ng-if="cipher.organizationId"
stop-prop></i>
<i class="fa fa-paperclip text-muted" title="Attachments" ng-if="cipher.hasAttachments"
stop-prop></i><br />
<span class="text-sm text-muted" stop-prop>{{cipher.subTitle}}</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box" ng-class="{'collapsed-box': grouping.collapsed}"
ng-repeat="grouping in filteredVaultGroupings = (vaultGroupings | filter: groupingFilter) track by grouping.id"
ng-show="vaultGroupings.length && (!main.searchVaultText || groupingCiphers.length)"
ng-style="firstCollectionId && grouping.id === firstCollectionId &&
groupingIdFilter !== grouping.id && {'margin-top': '40px'}">
<div class="box-header with-border">
<h3 class="box-title">
<i class="fa" ng-if="grouping.folder"
ng-class="{'fa-folder-open': grouping.id !== null, 'fa-folder-open-o': grouping.id === null}"></i>
<i class="fa fa-cube" ng-if="grouping.collection"></i>
{{grouping.name}}
<small ng-pluralize count="groupingCiphers.length" when="{'1': '{} item', 'other': '{} items'}"></small>
</h3>
<div class="box-tools">
<div class="btn-group">
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-cog"></i> <span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right" ng-if="grouping.folder">
<li>
<a href="#" stop-click ng-click="addCipher(grouping)">
<i class="fa fa-fw fa-plus-circle"></i> New Item
</a>
</li>
<li ng-show="grouping.id">
<a href="#" stop-click ng-click="editFolder(grouping)">
<i class="fa fa-fw fa-pencil"></i> Edit Folder <i class="fa fa-fw fa-pencil"></i> Edit Folder
</a> </a>
</li> </li>
<li ng-show="canDeleteFolder(grouping)"> <li>
<a href="#" stop-click ng-click="deleteFolder(grouping)" class="text-red"> <a href="#" stop-click ng-click="deleteFolder(selectedFolder)" class="text-red">
<i class="fa fa-fw fa-trash"></i> Delete Folder <i class="fa fa-fw fa-trash"></i> Delete Folder
</a> </a>
</li> </li>
<li>
<a href="#" stop-click ng-click="selectFolder(grouping, $event)">
<i class="fa fa-fw fa-check-square-o"></i> Select All
</a>
</li>
</ul>
<ul class="dropdown-menu dropdown-menu-right" ng-if="grouping.collection">
<li>
<a href="#" stop-click ng-click="selectFolder(grouping, $event)">
<i class="fa fa-fw fa-check-square-o"></i> Select All
</a>
</li>
</ul> </ul>
</div> </div>
<button type="button" class="btn btn-box-tool" data-widget="collapse" title="Collapse/Expand" </div>
ng-click="collapseExpand(grouping)"> </div>
<i class="fa" ng-class="{'fa-minus': !grouping.collapsed, 'fa-plus': grouping.collapsed}"></i> <div class="box-body" ng-class="{'no-padding': filteredCiphers.length}">
<div ng-show="!filteredCiphers.length">
<p>No items to list.</p>
<button type="button" ng-click="addCipher()" class="btn btn-default btn-flat">
Add an Item
</button> </button>
</div> </div>
</div> <div class="table-responsive" ng-show="filteredCiphers.length">
<div class="box-body" ng-class="{'no-padding': groupingCiphers.length}">
<div ng-show="!groupingCiphers.length">
<div ng-if="grouping.folder">
<p>No items in this folder.</p>
<button type="button" ng-click="addCipher(grouping)" class="btn btn-default btn-flat">Add an Item</button>
</div>
<div ng-if="!grouping.folder">
<p>No items in this collection.</p>
</div>
</div>
<div class="table-responsive" ng-show="groupingCiphers.length">
<table class="table table-striped table-hover table-vmiddle"> <table class="table table-striped table-hover table-vmiddle">
<tbody> <tbody>
<tr ng-repeat="cipher in groupingCiphers = (ciphers | filter: cipherFilter(grouping) | <tr ng-repeat="cipher in filteredCiphers = (ciphers | filter: cipherFilter() |
filter: (main.searchVaultText || '')) track by cipher.id"> filter: (searchVaultText || '')) track by cipher.id">
<td style="width: 70px;"> <td style="width: 70px;">
<div class="btn-group" data-append-to="body"> <div class="btn-group" data-append-to="body">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
@ -281,80 +149,82 @@
</section> </section>
<aside class="control-sidebar control-sidebar-light"> <aside class="control-sidebar control-sidebar-light">
<div class="tab-content"> <div class="tab-content">
<form class="search-form">
<label for="search" class="sr-only">Search</label>
<div class="form-group has-feedback">
<input type="search" id="search" class="form-control" placeholder="Search my vault..."
ng-model="searchVaultText" />
<span class="fa fa-search form-control-feedback" aria-hidden="true"></span>
</div>
</form>
<ul class="control-sidebar-menu"> <ul class="control-sidebar-menu">
<li> <li ng-class="{active: selectedAll}">
<a href="#" stop-click ng-click="clearFilters()"> <a href="#" stop-click ng-click="filterAll()">
Clear All Filters <i class="fa fa-th fa-fw"></i> All Items
</a>
</li>
<li ng-class="{active: selectedFavorites}">
<a href="#" stop-click ng-click="filterFavorites()">
<i class="fa fa-star fa-fw"></i> Favorites
</a> </a>
</li> </li>
</ul> </ul>
<h3 class="control-sidebar-heading"> <h3 class="control-sidebar-heading">Types</h3>
<i class="fa fa-tag fa-fw"></i> Types
</h3>
<div class="control-sidebar-section"> <div class="control-sidebar-section">
<ul class="control-sidebar-menu"> <ul class="control-sidebar-menu">
<li> <li ng-class="{active: constants.cipherType.login === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.login)"> <a href="#" stop-click ng-click="filterType(constants.cipherType.login)">
<i class="fa fa-check fa-fw" ng-if="constants.cipherType.login === typeFilter"></i> <i class="fa fa-globe fa-fw"></i> Login
<i class="fa fa-globe fa-fw" ng-if="constants.cipherType.login !== typeFilter"></i> Login
</a> </a>
</li> </li>
<li> <li ng-class="{active: constants.cipherType.card === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.card)"> <a href="#" stop-click ng-click="filterType(constants.cipherType.card)">
<i class="fa fa-check fa-fw" ng-if="constants.cipherType.card === typeFilter"></i> <i class="fa fa-credit-card fa-fw"></i> Card
<i class="fa fa-credit-card fa-fw" ng-if="constants.cipherType.card !== typeFilter"></i> Card
</a> </a>
</li> </li>
<li> <li ng-class="{active: constants.cipherType.identity === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.identity)"> <a href="#" stop-click ng-click="filterType(constants.cipherType.identity)">
<i class="fa fa-check fa-fw" ng-if="constants.cipherType.identity === typeFilter"></i> <i class="fa fa-id-card-o fa-fw"></i> Identity
<i class="fa fa-id-card-o fa-fw" ng-if="constants.cipherType.identity !== typeFilter"></i> Identity
</a> </a>
</li> </li>
<li> <li ng-class="{active: constants.cipherType.secureNote === selectedType}">
<a href="#" stop-click ng-click="filterType(constants.cipherType.secureNote)"> <a href="#" stop-click ng-click="filterType(constants.cipherType.secureNote)">
<i class="fa fa-check fa-fw" ng-if="constants.cipherType.secureNote === typeFilter"></i> <i class="fa fa-sticky-note-o fa-fw"></i> Secure Note
<i class="fa fa-sticky-note-o fa-fw" ng-if="constants.cipherType.secureNote !== typeFilter"></i> Secure Note
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<h3 class="control-sidebar-heading"> <h3 class="control-sidebar-heading">Folders</h3>
<i class="fa fa-folder fa-fw"></i> Folders <div ng-show="loadingGroupings">
</h3>
<div ng-show="loading && !vaultGroupings.length">
<p>Loading...</p> <p>Loading...</p>
</div> </div>
<div class="control-sidebar-section"> <div class="control-sidebar-section" ng-show="!loadingGroupings">
<ul class="control-sidebar-menu" ng-show="!loading && folders.length"> <ul class="control-sidebar-menu">
<li ng-repeat="folder in folders = (vaultGroupings | filter: {folder: true}) track by folder.id"> <li ng-repeat="folder in vaultFolders | orderBy: [groupingSort] track by folder.id"
<a href="#" stop-click ng-click="filterGrouping(folder)"> ng-class="{active: selectedFolder && folder.id === selectedFolder.id}">
<i class="fa fa-check fa-fw" ng-if="folder.id === groupingIdFilter"></i> <a href="#" stop-click ng-click="filterFolder(folder)">
<i class="fa fa-caret-right fa-fw" ng-if="folder.id !== groupingIdFilter"></i> <i class="fa fa-caret-right fa-fw"></i>
{{folder.name}} {{folder.name}}
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<h3 class="control-sidebar-heading"> <h3 class="control-sidebar-heading">Collections</h3>
<i class="fa fa-cubes fa-fw"></i> Collections <div ng-show="loadingGroupings">
</h3>
<div ng-show="loading && !vaultGroupings.length">
<p>Loading...</p> <p>Loading...</p>
</div> </div>
<div ng-show="!loading && !collections.length"> <div ng-show="!loadingGroupings && !vaultCollections.length">
<p>No collections are being shared with you. <i class="fa fa-frown-o"></i></p> <p>No collections are being shared with you. <i class="fa fa-frown-o"></i></p>
<a ui-sref="backend.user.settingsCreateOrg" class="btn btn-default btn-lint"> <a ui-sref="backend.user.settingsCreateOrg" class="btn btn-default btn-lint">
Create an Organization Create an Organization
</a> </a>
</div> </div>
<div class="control-sidebar-section"> <div class="control-sidebar-section" ng-show="!loadingGroupings && vaultCollections.length">
<ul class="control-sidebar-menu" ng-show="!loading && collections.length"> <ul class="control-sidebar-menu">
<li ng-repeat="collection in collections = <li ng-repeat="collection in vaultCollections | orderBy: [groupingSort] track by collection.id"
(vaultGroupings | filter: {collection: true}) track by collection.id"> ng-class="{active: selectedCollection && collection.id === selectedCollection.id}">
<a href="#" stop-click ng-click="filterGrouping(collection)"> <a href="#" stop-click ng-click="filterCollection(collection)">
<i class="fa fa-check fa-fw" ng-if="collection.id === groupingIdFilter"></i> <i class="fa fa-caret-right fa-fw"></i>
<i class="fa fa-caret-right fa-fw" ng-if="collection.id !== groupingIdFilter"></i>
{{collection.name}} {{collection.name}}
</a> </a>
</li> </li>

View File

@ -39,26 +39,7 @@
</div> </div>
</div> </div>
</div> </div>
<div ng-if="cipher.type === constants.cipherType.login"> <div ng-if="cipher.type === constants.cipherType.login">
<div class="form-group" show-errors>
<label for="uri">URI</label>
<div class="input-group">
<input type="text" id="uri" name="Login.Uri" ng-model="cipher.login.uri" class="form-control"
placeholder="http://..." ng-readonly="readOnly" api-field />
<span class="input-group-btn">
<button class="btn btn-default btn-flat" type="button" uib-tooltip="Copy URI"
tooltip-placement="left" ngclipboard ngclipboard-error="clipboardError(e)"
data-clipboard-target="#uri">
<i class="fa fa-clipboard"></i>
</button>
<a href="{{cipher.login.uri}}" target="_blank" class="btn btn-default btn-flat"
uib-tooltip="Go To Website" tooltip-placement="left">
<i class="fa fa-share"></i>
</a>
</span>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<div class="form-group" show-errors> <div class="form-group" show-errors>
@ -120,6 +101,58 @@
</div> </div>
</div> </div>
</div> </div>
<div ng-repeat="u in cipher.login.uris" ng-if="cipher.login.uris && cipher.login.uris.length">
<div class="row">
<div class="col-sm-7">
<div class="form-group" show-errors>
<label for="uri{{$index}}">URI {{$index + 1}}</label>
<div class="input-group">
<input type="text" id="uri{{$index}}" name="Login.Uris[{{$index}}].Uri"
ng-model="u.uri" class="form-control"
placeholder="http://..." ng-readonly="readOnly" api-field />
<span class="input-group-btn">
<button class="btn btn-default btn-flat" type="button" uib-tooltip="Copy URI"
tooltip-placement="left" ngclipboard ngclipboard-error="clipboardError(e)"
data-clipboard-target="#uri{{$index}}">
<i class="fa fa-clipboard"></i>
</button>
<a href="{{u.uri}}" target="_blank" class="btn btn-default btn-flat"
uib-tooltip="Go To Website" tooltip-placement="left">
<i class="fa fa-share"></i>
</a>
</span>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="uri_match_{{$index}}">Match Detection</label>
<select id="uri_match_{{$index}}" name="Login.Uris[{{$index}}].Match"
class="form-control" ng-model="u.matchValue" ng-change="uriMatchChanged(u)">
<option value="">Default</option>
<option value="0">Base domain</option>
<option value="1">Host</option>
<option value="2">Starts with</option>
<option value="4">Regular Expression</option>
<option value="3">Exact</option>
<option value="5">Never</option>
</select>
</div>
</div>
<div class="col-sm-1">
<br class="hidden-xs" />
<a href="#" ng-click="removeUri(u)" stop-click>
<i class="fa fa-window-close-o fa-lg"></i>
<span class="visible-xs-inline">Remove URI</span>
</a>
</div>
</div>
<hr class="visible-xs-block" />
</div>
<a href="#" ng-click="addUri()" stop-click>
<i class="fa fa-plus-circle"></i> New URI
</a>
<br /><br />
</div> </div>
<div ng-if="cipher.type === constants.cipherType.card"> <div ng-if="cipher.type === constants.cipherType.card">
<div class="row"> <div class="row">
@ -505,7 +538,6 @@
<div ng-if="cipher.type === constants.cipherType.secureNote"> <div ng-if="cipher.type === constants.cipherType.secureNote">
<!-- Nothing for now --> <!-- Nothing for now -->
</div> </div>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="notes">Notes</label> <label for="notes">Notes</label>
<textarea id="notes" name="Notes" class="form-control" ng-model="cipher.notes" api-field <textarea id="notes" name="Notes" class="form-control" ng-model="cipher.notes" api-field

View File

@ -33,24 +33,6 @@
</div> </div>
<div ng-if="cipher.type === constants.cipherType.login"> <div ng-if="cipher.type === constants.cipherType.login">
<div class="form-group" show-errors>
<label for="uri">URI</label>
<div class="input-group">
<input type="text" id="uri" name="Login.Uri" ng-model="cipher.login.uri" class="form-control"
placeholder="http://..." ng-readonly="readOnly" api-field />
<span class="input-group-btn">
<button class="btn btn-default btn-flat" type="button" uib-tooltip="Copy URI"
tooltip-placement="left" ngclipboard ngclipboard-error="clipboardError(e)"
data-clipboard-target="#uri">
<i class="fa fa-clipboard"></i>
</button>
<a href="{{cipher.login.uri}}" target="_blank" class="btn btn-default btn-flat"
uib-tooltip="Go To Website" tooltip-placement="left">
<i class="fa fa-share"></i>
</a>
</span>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<div class="form-group" show-errors> <div class="form-group" show-errors>
@ -112,6 +94,60 @@
</div> </div>
</div> </div>
</div> </div>
<div ng-repeat="u in cipher.login.uris" ng-if="cipher.login.uris && cipher.login.uris.length">
<div class="row">
<div class="col-sm-7">
<div class="form-group" show-errors>
<label for="uri{{$index}}">URI {{$index + 1}}</label>
<div class="input-group">
<input type="text" id="uri{{$index}}" name="Login.Uris[{{$index}}].Uri"
ng-model="u.uri" class="form-control"
placeholder="http://..." ng-readonly="readOnly" api-field />
<span class="input-group-btn">
<button class="btn btn-default btn-flat" type="button" uib-tooltip="Copy URI"
tooltip-placement="left" ngclipboard ngclipboard-error="clipboardError(e)"
data-clipboard-target="#uri{{$index}}">
<i class="fa fa-clipboard"></i>
</button>
<a href="{{u.uri}}" target="_blank" class="btn btn-default btn-flat"
uib-tooltip="Go To Website" tooltip-placement="left">
<i class="fa fa-share"></i>
</a>
</span>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="uri_match_{{$index}}">Match Detection</label>
<select id="uri_match_{{$index}}" name="Login.Uris[{{$index}}].Match" ng-disabled="readOnly"
class="form-control" ng-model="u.matchValue" ng-change="uriMatchChanged(u)">
<option value="">Default</option>
<option value="0">Base domain</option>
<option value="1">Host</option>
<option value="2">Starts with</option>
<option value="4">Regular Expression</option>
<option value="3">Exact</option>
<option value="5">Never</option>
</select>
</div>
</div>
<div class="col-sm-1" ng-if="!readOnly">
<br class="hidden-xs" />
<a href="#" ng-click="removeUri(u)" stop-click>
<i class="fa fa-window-close-o fa-lg"></i>
<span class="visible-xs-inline">Remove URI</span>
</a>
</div>
</div>
<hr class="visible-xs-block" />
</div>
<div ng-if="!readOnly">
<a href="#" ng-click="addUri()" stop-click>
<i class="fa fa-plus-circle"></i> New URI
</a>
<br /><br />
</div>
</div> </div>
<div ng-if="cipher.type === constants.cipherType.card"> <div ng-if="cipher.type === constants.cipherType.card">
<div class="row"> <div class="row">
@ -552,9 +588,9 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-1"> <div class="col-sm-1" ng-if="!readOnly">
<br class="hidden-xs" /> <br class="hidden-xs" />
<a href="#" ng-click="removeField(field)" stop-click ng-if="!readOnly"> <a href="#" ng-click="removeField(field)" stop-click>
<i class="fa fa-window-close-o fa-lg"></i> <i class="fa fa-window-close-o fa-lg"></i>
<span class="visible-xs-inline">Remove Custom Field</span> <span class="visible-xs-inline">Remove Custom Field</span>
</a> </a>

View File

@ -14,7 +14,7 @@
<p ng-show="loading">Loading...</p> <p ng-show="loading">Loading...</p>
<div ng-show="!loading && !organizations.length" class="callout callout-default"> <div ng-show="!loading && !organizations.length" class="callout callout-default">
<h4><i class="fa fa-info-circle"></i> No Organizations</h4> <h4><i class="fa fa-info-circle"></i> No Organizations</h4>
<p>You do not belong to any organizations. Organizations allow you to share items with other bitwarden users.</p> <p>You do not belong to any organizations. Organizations allow you to share items with other Bitwarden users.</p>
<a ng-click="createOrg()" class="btn btn-default btn-flat"> <a ng-click="createOrg()" class="btn btn-default btn-flat">
Create an Organization Create an Organization
</a> </a>

View File

@ -1,135 +0,0 @@
<section class="content-header">
<h1>
Apps
<small>for all of your devices</small>
</h1>
</section>
<section class="content">
<div class="box box-default box-apps">
<div class="box-header with-border">
<h3 class="box-title">Desktop/Browser</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-sm-6">
<ul class="fa-ul">
<li>
<a href="https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb" target="_blank">
<i class="fa fa-chrome fa-lg fa-fw fa-li"></i> Google Chrome
</a>
</li>
<li>
<a href="https://addons.mozilla.org/firefox/addon/bitwarden-password-manager/" target="_blank">
<i class="fa fa-firefox fa-lg fa-fw fa-li"></i> Mozilla Firefox
</a>
</li>
<li>
<a href="https://addons.opera.com/extensions/details/bitwarden-free-password-manager/" target="_blank">
<i class="fa fa-opera fa-lg fa-fw fa-li"></i> Opera
</a>
</li>
<li>
<a href="https://www.microsoft.com/store/p/bitwarden-free-password-manager/9p6kxl0svnnl" target="_blank">
<i class="fa fa-edge fa-lg fa-fw fa-li"></i> Microsoft Edge
</a>
</li>
</ul>
</div>
<div class="col-sm-6">
Others:
<ul>
<li>
<a href="https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb" target="_blank">
Vivaldi
</a>
</li>
<li>
<a href="https://brave.com/" target="_blank">
Brave
</a>
</li>
<li>
<a href="https://addons.mozilla.org/firefox/addon/bitwarden-password-manager/" target="_blank">
Tor Browser
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="box box-default box-apps">
<div class="box-header with-border">
<h3 class="box-title">Mobile</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-sm-6">
<ul class="fa-ul">
<li>
<a href="https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8" target="_blank">
<i class="fa fa-apple fa-lg fa-fw fa-li"></i> iOS
</a>
</li>
<li>
<a href="https://play.google.com/store/apps/details?id=com.x8bit.bitwarden" target="_blank">
<i class="fa fa-android fa-lg fa-fw fa-li"></i> Android
</a>
</li>
</ul>
</div>
<div class="col-sm-6">
<ul class="fa-ul">
<li>
<a href="#" stop-click>
<i class="fa fa-windows fa-lg fa-fw fa-li"></i> Windows
<small class="text-muted">(coming soon)</small>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="box box-default box-apps">
<div class="box-header with-border">
<h3 class="box-title">Other</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-sm-6">
<ul class="fa-ul">
<li>
<a href="#" stop-click>
<i class="fa fa-windows fa-lg fa-fw fa-li"></i> Desktop Windows
<small class="text-muted">(coming soon)</small>
</a>
</li>
<li>
<a href="#" stop-click>
<i class="fa fa-apple fa-lg fa-fw fa-li"></i> Desktop macOS
<small class="text-muted">(coming soon)</small>
</a>
</li>
</ul>
</div>
<div class="col-sm-6">
<ul class="fa-ul">
<li>
<a href="#" stop-click>
<i class="fa fa-linux fa-lg fa-fw fa-li"></i> Desktop Linux
<small class="text-muted">(coming soon)</small>
</a>
</li>
<li>
<a href="#" stop-click>
<i class="fa fa-terminal fa-lg fa-fw fa-li"></i> CLI
<small class="text-muted">(coming soon)</small>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</section>

View File

@ -32,14 +32,6 @@
<a ui-sref="backend.user.vault"><i class="fa fa-arrow-left"></i> Return to my vault</a> <a ui-sref="backend.user.vault"><i class="fa fa-arrow-left"></i> Return to my vault</a>
</div> </div>
</div> </div>
<form class="sidebar-form">
<label for="search" class="sr-only">Search</label>
<div class="form-group has-feedback">
<input type="text" id="search" class="form-control" placeholder="Search org. vault..."
ng-focus="searchOrganizationVault()" ng-model="main.searchVaultText" />
<span class="fa fa-search form-control-feedback" aria-hidden="true"></span>
</div>
</form>
<ul class="sidebar-menu"> <ul class="sidebar-menu">
<li class="header">MY ORGANIZATION</li> <li class="header">MY ORGANIZATION</li>
<li ng-class="{active: $state.is('backend.org.dashboard')}"> <li ng-class="{active: $state.is('backend.org.dashboard')}">

View File

@ -32,14 +32,6 @@
<a ui-sref="frontend.logout">Log Out</a> <a ui-sref="frontend.logout">Log Out</a>
</div> </div>
</div> </div>
<form class="sidebar-form">
<label for="search" class="sr-only">Search</label>
<div class="form-group has-feedback">
<input type="text" id="search" class="form-control" placeholder="Search my vault..."
ng-focus="searchVault()" ng-model="main.searchVaultText" />
<span class="fa fa-search form-control-feedback" aria-hidden="true"></span>
</div>
</form>
<ul class="sidebar-menu"> <ul class="sidebar-menu">
<li class="header">WEB VAULT</li> <li class="header">WEB VAULT</li>
<li class="treeview" ng-class="{active: $state.includes('backend.user.vault')}"> <li class="treeview" ng-class="{active: $state.includes('backend.user.vault')}">
@ -104,7 +96,7 @@
</ul> </ul>
</li> </li>
<li ng-class="{active: $state.is('backend.user.apps')}"> <li ng-class="{active: $state.is('backend.user.apps')}">
<a ui-sref="backend.user.apps"> <a href="https://bitwarden.com/#download" target="_blank">
<small class="label pull-right bg-green">FREE</small> <small class="label pull-right bg-green">FREE</small>
<i class="fa fa-download fa-fw"></i> <span>Get the Apps</span> <i class="fa fa-download fa-fw"></i> <span>Get the Apps</span>
</a> </a>

File diff suppressed because one or more lines are too long

View File

@ -29,12 +29,12 @@
<meta name="theme-color" content="#3c8dbc"> <meta name="theme-color" content="#3c8dbc">
<base href="/" /> <base href="/" />
<title page-title>bitwarden Web Vault</title> <title page-title>Bitwarden Web Vault</title>
<meta name="x-stylesheet-test" content="" class="fa invisible" /> <meta name="x-stylesheet-test" content="" class="fa invisible" />
<script src="js/fallback-styles.min.js?v=twgcvb"></script> <script src="js/fallback-styles.min.js?v=h5k6l8"></script>
<link rel="stylesheet" href="css/vault.min.css?v=twgcvb" /> <link rel="stylesheet" href="css/vault.min.css?v=h5k6l8" />
<link rel="apple-touch-icon" sizes="180x180" href="images/icons/apple-touch-icon.png"> <link rel="apple-touch-icon" sizes="180x180" href="images/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="images/icons/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="16x16" href="images/icons/favicon-16x16.png">
@ -46,11 +46,11 @@
'control-sidebar-open': main.usingControlSidebar && main.openControlSidebar}"> 'control-sidebar-open': main.usingControlSidebar && main.openControlSidebar}">
<div ui-view></div> <div ui-view></div>
<script src="js/fallback-scripts.min.js?v=twgcvb"></script> <script src="js/fallback-scripts.min.js?v=h5k6l8"></script>
<script src="js/settings.js?v=twgcvb"></script> <script src="js/settings.js?v=h5k6l8"></script>
<script src="js/lib.min.js?v=twgcvb"></script> <script src="js/lib.min.js?v=h5k6l8"></script>
<script src="js/bw.min.js?v=twgcvb"></script> <script src="js/bw.min.js?v=h5k6l8"></script>
<script src="js/app.min.js?v=twgcvb"></script> <script src="js/app.min.js?v=h5k6l8"></script>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
var cacheTag="twgcvb";function loadStylesheetIfMissing(e,t,s){var i=document.getElementsByTagName("SCRIPT"),l=i[i.length-1].previousElementSibling,n=document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(l):l.currentStyle;if(n&&n[e]!==t)for(var o=0;o<s.length;o++)document.write('<link rel="stylesheet" href="'+s[o]+"?v="+cacheTag+'" />')}loadStylesheetIfMissing("visibility","hidden",["lib/bootstrap/css/bootstrap.min.css"]),loadStylesheetIfMissing("fontFamily","FontAwesome",["lib/font-awesome/css/font-awesome.min.css"]); var cacheTag="h5k6l8";function loadStylesheetIfMissing(e,t,s){var i=document.getElementsByTagName("SCRIPT"),l=i[i.length-1].previousElementSibling,n=document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(l):l.currentStyle;if(n&&n[e]!==t)for(var o=0;o<s.length;o++)document.write('<link rel="stylesheet" href="'+s[o]+"?v="+cacheTag+'" />')}loadStylesheetIfMissing("visibility","hidden",["lib/bootstrap/css/bootstrap.min.css"]),loadStylesheetIfMissing("fontFamily","FontAwesome",["lib/font-awesome/css/font-awesome.min.css"]);

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,6 @@
<title>U2F Connector</title> <title>U2F Connector</title>
</head> </head>
<body> <body>
<script src="js/u2f.min.js?v=twgcvb"></script> <script src="js/u2f.min.js?v=h5k6l8"></script>
</body> </body>
</html> </html>