mirror of
https://github.com/bitwarden/web
synced 2025-12-22 03:03:26 +00:00
Update 2018-02-21T04:31:38.188Z
This commit is contained in:
@@ -63,7 +63,8 @@
|
||||
</p>
|
||||
<div class="form-group" show-errors>
|
||||
<label for="code" class="sr-only">Token</label>
|
||||
<input type="password" id="code" name="Token" class="form-control" ng-model="token" required api-field />
|
||||
<input type="password" id="code" name="Token" class="form-control" ng-model="token"
|
||||
autocomplete="new-password" required api-field />
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-7">
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
Loading...
|
||||
</div>
|
||||
<div ng-show="!loading">
|
||||
You plan currently has a total of <b>{{plan.seats}}</b> seats.
|
||||
Your plan currently has a total of <b>{{plan.seats}}</b> seats.
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-footer" ng-if="!selfHosted && !noSubscription && canAdjustSeats">
|
||||
@@ -134,7 +134,7 @@
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<p>
|
||||
You plan has a total of {{storage.maxGb}} GB of encrypted file storage.
|
||||
Your plan has a total of {{storage.maxGb}} GB of encrypted file storage.
|
||||
You are currently using {{storage.currentName}}.
|
||||
</p>
|
||||
<div class="progress" style="margin: 0;">
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<p>
|
||||
You membership has a total of {{storage.maxGb}} GB of encrypted file storage.
|
||||
Your membership has a total of {{storage.maxGb}} GB of encrypted file storage.
|
||||
You are currently using {{storage.currentName}}.
|
||||
</p>
|
||||
<div class="progress" style="margin: 0;">
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<div class="form-group" show-errors>
|
||||
<label for="skey">Secret Key</label>
|
||||
<input type="password" id="skey" name="SecretKey" ng-model="updateModel.skey" class="form-control"
|
||||
required api-field />
|
||||
required api-field autocomplete="new-password" />
|
||||
</div>
|
||||
<div class="form-group" show-errors>
|
||||
<label for="host">API Hostname</label>
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
{{updateModel.key1.existingKey}}
|
||||
</div>
|
||||
<input type="password" id="key1" name="Key1" ng-model="updateModel.key1.key" class="form-control" api-field
|
||||
ng-show="!updateModel.key1.existingKey" />
|
||||
ng-show="!updateModel.key1.existingKey" autocomplete="new-password" />
|
||||
</div>
|
||||
<div class="form-group" show-errors>
|
||||
<label for="key2">YubiKey #2</label>
|
||||
@@ -88,7 +88,7 @@
|
||||
{{updateModel.key2.existingKey}}
|
||||
</div>
|
||||
<input type="password" id="key2" name="Key2" ng-model="updateModel.key2.key" class="form-control" api-field
|
||||
ng-show="!updateModel.key2.existingKey" />
|
||||
ng-show="!updateModel.key2.existingKey" autocomplete="new-password" />
|
||||
</div>
|
||||
<div class="form-group" show-errors>
|
||||
<label for="key3">YubiKey #3</label>
|
||||
@@ -99,7 +99,7 @@
|
||||
{{updateModel.key3.existingKey}}
|
||||
</div>
|
||||
<input type="password" id="key3" name="Key3" ng-model="updateModel.key3.key" class="form-control" api-field
|
||||
ng-show="!updateModel.key3.existingKey" />
|
||||
ng-show="!updateModel.key3.existingKey" autocomplete="new-password" />
|
||||
</div>
|
||||
<strong>NFC Support</strong>
|
||||
<div class="checkbox">
|
||||
|
||||
@@ -87,7 +87,8 @@
|
||||
<label for="password">Password</label>
|
||||
<div class="input-group">
|
||||
<input type="password" id="password" name="Login.Password" ng-model="cipher.login.password"
|
||||
class="form-control monospaced" ng-readonly="readOnly" api-field />
|
||||
class="form-control monospaced" ng-readonly="readOnly" api-field
|
||||
autocomplete="new-password" />
|
||||
<span class="input-group-btn" uib-tooltip="Copy Password" tooltip-placement="left">
|
||||
<button class="btn btn-default btn-flat" type="button" ngclipboard
|
||||
ngclipboard-success="clipboardSuccess(e)" ngclipboard-error="clipboardError(e, true)"
|
||||
|
||||
@@ -79,7 +79,8 @@
|
||||
<label for="password">Password</label>
|
||||
<div class="input-group">
|
||||
<input type="password" id="password" name="Login.Password" ng-model="cipher.login.password"
|
||||
class="form-control monospaced" ng-readonly="readOnly" api-field />
|
||||
class="form-control monospaced" ng-readonly="readOnly" api-field
|
||||
autocomplete="new-password" />
|
||||
<span class="input-group-btn" uib-tooltip="Copy Password" tooltip-placement="left">
|
||||
<button class="btn btn-default btn-flat" type="button" ngclipboard
|
||||
ngclipboard-success="clipboardSuccess(e)" ngclipboard-error="clipboardError(e, true)"
|
||||
|
||||
@@ -26,47 +26,6 @@
|
||||
</head>
|
||||
<body>
|
||||
<script src="js/duo.js"></script>
|
||||
<script>
|
||||
!(function () {
|
||||
var frameElement = document.createElement('iframe');
|
||||
frameElement.setAttribute('id', 'duo_iframe');
|
||||
setFrameHeight();
|
||||
document.body.appendChild(frameElement);
|
||||
|
||||
var hostParam = getQsParam('host');
|
||||
var requestParam = getQsParam('request');
|
||||
Duo.init({
|
||||
host: hostParam,
|
||||
sig_request: requestParam,
|
||||
submit_callback: function (form) {
|
||||
invokeCSCode(form.elements.sig_response.value);
|
||||
}
|
||||
});
|
||||
|
||||
window.onresize = setFrameHeight;
|
||||
function setFrameHeight() {
|
||||
frameElement.style.height = window.innerHeight + 'px';
|
||||
}
|
||||
})();
|
||||
|
||||
function getQsParam(name) {
|
||||
var url = window.location.href;
|
||||
name = name.replace(/[\[\]]/g, '\\$&');
|
||||
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
|
||||
results = regex.exec(url);
|
||||
if (!results) return null;
|
||||
if (!results[2]) return '';
|
||||
return decodeURIComponent(results[2].replace(/\+/g, ' '));
|
||||
}
|
||||
|
||||
function invokeCSCode(data) {
|
||||
try {
|
||||
invokeCSharpAction(data);
|
||||
}
|
||||
catch (err) {
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="js/duo-connector.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
69
index.html
69
index.html
@@ -2,53 +2,6 @@
|
||||
<html ng-app="bit" ng-csp>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="Content-Security-Policy" content="
|
||||
default-src
|
||||
'self';
|
||||
script-src
|
||||
'self'
|
||||
'sha256-ryoU+5+IUZTuUyTElqkrQGBJXr1brEv6r2CA62WUw8w='
|
||||
https://www.google-analytics.com
|
||||
https://js.stripe.com
|
||||
https://js.braintreegateway.com
|
||||
https://www.paypalobjects.com
|
||||
https://maxcdn.bootstrapcdn.com
|
||||
https://ajax.googleapis.com;
|
||||
style-src
|
||||
'self'
|
||||
'unsafe-inline'
|
||||
https://maxcdn.bootstrapcdn.com
|
||||
https://assets.braintreegateway.com
|
||||
https://*.paypal.com
|
||||
https://fonts.googleapis.com;
|
||||
img-src
|
||||
'self'
|
||||
data:
|
||||
https://icons.bitwarden.com
|
||||
https://*.paypal.com
|
||||
https://www.paypalobjects.com
|
||||
https://q.stripe.com
|
||||
https://haveibeenpwned.com
|
||||
https://chart.googleapis.com
|
||||
https://www.google-analytics.com;
|
||||
font-src
|
||||
'self'
|
||||
https://maxcdn.bootstrapcdn.com
|
||||
https://fonts.gstatic.com;
|
||||
child-src
|
||||
'self'
|
||||
https://js.stripe.com
|
||||
https://assets.braintreegateway.com
|
||||
https://*.paypal.com
|
||||
https://*.duosecurity.com;
|
||||
frame-src
|
||||
'self'
|
||||
https://js.stripe.com
|
||||
https://assets.braintreegateway.com
|
||||
https://*.paypal.com
|
||||
https://*.duosecurity.com;
|
||||
connect-src
|
||||
*;">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<meta name="theme-color" content="#3c8dbc">
|
||||
<base href="/" />
|
||||
@@ -62,9 +15,9 @@
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
|
||||
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
<meta name="x-stylesheet-test" content="" class="fa invisible" />
|
||||
<script src="js/fallback-styles.min.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="js/fallback-styles.min.js?v=no5c09"></script>
|
||||
|
||||
<link rel="stylesheet" href="css/vault.min.css?v=a0gylewuuesrx9u8ilik9" />
|
||||
<link rel="stylesheet" href="css/vault.min.css?v=no5c09" />
|
||||
<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="16x16" href="images/icons/favicon-16x16.png">
|
||||
@@ -76,17 +29,17 @@
|
||||
'control-sidebar-open': main.usingControlSidebar && main.openControlSidebar}">
|
||||
<div ui-view></div>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"
|
||||
integrity="sha384-rY/jv8mMhqDabXSo+UCggqKtdmBfd3qC2/KvyTDNQ6PcUJXaxK1tMepoQda4g5vB" crossorigin="anonymous"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"
|
||||
integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
|
||||
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.min.js"
|
||||
integrity="sha384-AH/e+s4V4kUifvnNED2x1XZqArO5qTFU4YKRzUXbz4IgPG1H0Xmz6fP1XUmO4vT/" crossorigin="anonymous"></script>
|
||||
<script src="js/fallback-scripts.min.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="js/settings.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"
|
||||
integrity="sha384-R6kAKgTgRiD5889XyzYD/aMryNA4Yr9EBnt6rIXuukLgVONifQDnHNaadrSNakQl" crossorigin="anonymous"></script>
|
||||
<script src="js/fallback-scripts.min.js?v=no5c09"></script>
|
||||
<script src="js/settings.js?v=no5c09"></script>
|
||||
|
||||
<script src="js/lib.min.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="js/bw.min.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="js/app.min.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="js/lib.min.js?v=no5c09"></script>
|
||||
<script src="js/bw.min.js?v=no5c09"></script>
|
||||
<script src="js/app.min.js?v=no5c09"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
2
js/app.min.js
vendored
2
js/app.min.js
vendored
File diff suppressed because one or more lines are too long
2
js/bw.min.js
vendored
2
js/bw.min.js
vendored
File diff suppressed because one or more lines are too long
40
js/duo-connector.js
Normal file
40
js/duo-connector.js
Normal file
@@ -0,0 +1,40 @@
|
||||
!(function () {
|
||||
var frameElement = document.createElement('iframe');
|
||||
frameElement.setAttribute('id', 'duo_iframe');
|
||||
setFrameHeight();
|
||||
document.body.appendChild(frameElement);
|
||||
|
||||
var hostParam = getQsParam('host');
|
||||
var requestParam = getQsParam('request');
|
||||
Duo.init({
|
||||
host: hostParam,
|
||||
sig_request: requestParam,
|
||||
submit_callback: function (form) {
|
||||
invokeCSCode(form.elements.sig_response.value);
|
||||
}
|
||||
});
|
||||
|
||||
window.onresize = setFrameHeight;
|
||||
function setFrameHeight() {
|
||||
frameElement.style.height = window.innerHeight + 'px';
|
||||
}
|
||||
})();
|
||||
|
||||
function getQsParam(name) {
|
||||
var url = window.location.href;
|
||||
name = name.replace(/[\[\]]/g, '\\$&');
|
||||
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
|
||||
results = regex.exec(url);
|
||||
if (!results) return null;
|
||||
if (!results[2]) return '';
|
||||
return decodeURIComponent(results[2].replace(/\+/g, ' '));
|
||||
}
|
||||
|
||||
function invokeCSCode(data) {
|
||||
try {
|
||||
invokeCSharpAction(data);
|
||||
}
|
||||
catch (err) {
|
||||
|
||||
}
|
||||
}
|
||||
2
js/fallback-styles.min.js
vendored
2
js/fallback-styles.min.js
vendored
@@ -1 +1 @@
|
||||
function loadStylesheetIfMissing(e,t,i){var s=document.getElementsByTagName("SCRIPT"),l=s[s.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<i.length;o++)document.write('<link rel="stylesheet" href="'+i[o]+"?v="+cacheTag+'" />')}var cacheTag="a0gylewuuesrx9u8ilik9";loadStylesheetIfMissing("visibility","hidden",["lib/bootstrap/css/bootstrap.min.css"]),loadStylesheetIfMissing("fontFamily","FontAwesome",["lib/font-awesome/css/font-awesome.min.css"]);
|
||||
var cacheTag="no5c09";function loadStylesheetIfMissing(e,t,s){var i=document.getElementsByTagName("SCRIPT"),n=i[i.length-1].previousElementSibling,o=document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(n):n.currentStyle;if(o&&o[e]!==t)for(var l=0;l<s.length;l++)document.write('<link rel="stylesheet" href="'+s[l]+"?v="+cacheTag+'" />')}loadStylesheetIfMissing("visibility","hidden",["lib/bootstrap/css/bootstrap.min.css"]),loadStylesheetIfMissing("fontFamily","FontAwesome",["lib/font-awesome/css/font-awesome.min.css"]);
|
||||
2
js/lib.min.js
vendored
2
js/lib.min.js
vendored
File diff suppressed because one or more lines are too long
2
js/u2f.min.js
vendored
2
js/u2f.min.js
vendored
File diff suppressed because one or more lines are too long
17
manifest.json
Normal file
17
manifest.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "bitwarden vault",
|
||||
"icons": [
|
||||
{
|
||||
"src": "images/icons/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "images/icons/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#3c8dbc",
|
||||
"background_color": "#3c8dbc"
|
||||
}
|
||||
@@ -5,6 +5,6 @@
|
||||
<title>U2F Connector</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="js/u2f.min.js?v=a0gylewuuesrx9u8ilik9"></script>
|
||||
<script src="js/u2f.min.js?v=no5c09"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user