1
0
mirror of https://github.com/bitwarden/web synced 2025-12-21 10:43:26 +00:00

Update 2018-02-21T04:31:38.188Z

This commit is contained in:
Kyle Spearrin
2018-02-20 23:31:41 -05:00
parent b29bc1ec11
commit 66eacea870
18 changed files with 90 additions and 119 deletions

1
CNAME
View File

@@ -1 +0,0 @@
vault.bitwarden.com

View File

@@ -49,7 +49,7 @@
<p class="login-box-msg"> <p class="login-box-msg">
Complete logging in with YubiKey. Complete logging in with YubiKey.
</p> </p>
<form name="twoFactorForm" ng-submit="twoFactorForm.$valid && twoFactor(token)" api-form="twoFactorPromise" <form name="twoFactorForm" ng-submit="twoFactorForm.$valid && twoFactor(token)" api-form="twoFactorPromise"
autocomplete="off"> autocomplete="off">
<div class="callout callout-danger validation-errors" ng-show="twoFactorForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="twoFactorForm.$errors">
<h4>Errors have occurred</h4> <h4>Errors have occurred</h4>
@@ -63,7 +63,8 @@
</p> </p>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="code" class="sr-only">Token</label> <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>
<div class="row"> <div class="row">
<div class="col-xs-7"> <div class="col-xs-7">
@@ -86,7 +87,7 @@
<p class="login-box-msg"> <p class="login-box-msg">
Complete logging in with Duo. Complete logging in with Duo.
</p> </p>
<form name="twoFactorForm" ng-submit="twoFactorForm.$valid && twoFactor(token)" api-form="twoFactorPromise" <form name="twoFactorForm" ng-submit="twoFactorForm.$valid && twoFactor(token)" api-form="twoFactorPromise"
autocomplete="off"> autocomplete="off">
<div class="callout callout-danger validation-errors" ng-show="twoFactorForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="twoFactorForm.$errors">
<h4>Errors have occurred</h4> <h4>Errors have occurred</h4>

View File

@@ -116,7 +116,7 @@
Loading... Loading...
</div> </div>
<div ng-show="!loading"> <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> </div>
<div class="box-footer" ng-if="!selfHosted && !noSubscription && canAdjustSeats"> <div class="box-footer" ng-if="!selfHosted && !noSubscription && canAdjustSeats">
@@ -134,7 +134,7 @@
</div> </div>
<div class="box-body"> <div class="box-body">
<p> <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}}. You are currently using {{storage.currentName}}.
</p> </p>
<div class="progress" style="margin: 0;"> <div class="progress" style="margin: 0;">

View File

@@ -96,7 +96,7 @@
</div> </div>
<div class="box-body"> <div class="box-body">
<p> <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}}. You are currently using {{storage.currentName}}.
</p> </p>
<div class="progress" style="margin: 0;"> <div class="progress" style="margin: 0;">

View File

@@ -57,7 +57,7 @@
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="skey">Secret Key</label> <label for="skey">Secret Key</label>
<input type="password" id="skey" name="SecretKey" ng-model="updateModel.skey" class="form-control" <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>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="host">API Hostname</label> <label for="host">API Hostname</label>

View File

@@ -77,7 +77,7 @@
{{updateModel.key1.existingKey}} {{updateModel.key1.existingKey}}
</div> </div>
<input type="password" id="key1" name="Key1" ng-model="updateModel.key1.key" class="form-control" api-field <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>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="key2">YubiKey #2</label> <label for="key2">YubiKey #2</label>
@@ -88,7 +88,7 @@
{{updateModel.key2.existingKey}} {{updateModel.key2.existingKey}}
</div> </div>
<input type="password" id="key2" name="Key2" ng-model="updateModel.key2.key" class="form-control" api-field <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>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="key3">YubiKey #3</label> <label for="key3">YubiKey #3</label>
@@ -99,7 +99,7 @@
{{updateModel.key3.existingKey}} {{updateModel.key3.existingKey}}
</div> </div>
<input type="password" id="key3" name="Key3" ng-model="updateModel.key3.key" class="form-control" api-field <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> </div>
<strong>NFC Support</strong> <strong>NFC Support</strong>
<div class="checkbox"> <div class="checkbox">

View File

@@ -87,7 +87,8 @@
<label for="password">Password</label> <label for="password">Password</label>
<div class="input-group"> <div class="input-group">
<input type="password" id="password" name="Login.Password" ng-model="cipher.login.password" <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"> <span class="input-group-btn" uib-tooltip="Copy Password" tooltip-placement="left">
<button class="btn btn-default btn-flat" type="button" ngclipboard <button class="btn btn-default btn-flat" type="button" ngclipboard
ngclipboard-success="clipboardSuccess(e)" ngclipboard-error="clipboardError(e, true)" ngclipboard-success="clipboardSuccess(e)" ngclipboard-error="clipboardError(e, true)"

View File

@@ -79,7 +79,8 @@
<label for="password">Password</label> <label for="password">Password</label>
<div class="input-group"> <div class="input-group">
<input type="password" id="password" name="Login.Password" ng-model="cipher.login.password" <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"> <span class="input-group-btn" uib-tooltip="Copy Password" tooltip-placement="left">
<button class="btn btn-default btn-flat" type="button" ngclipboard <button class="btn btn-default btn-flat" type="button" ngclipboard
ngclipboard-success="clipboardSuccess(e)" ngclipboard-error="clipboardError(e, true)" ngclipboard-success="clipboardSuccess(e)" ngclipboard-error="clipboardError(e, true)"

View File

@@ -26,47 +26,6 @@
</head> </head>
<body> <body>
<script src="js/duo.js"></script> <script src="js/duo.js"></script>
<script> <script src="js/duo-connector.js"></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>
</body> </body>
</html> </html>

View File

@@ -2,53 +2,6 @@
<html ng-app="bit" ng-csp> <html ng-app="bit" ng-csp>
<head> <head>
<meta charset="utf-8" /> <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="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="theme-color" content="#3c8dbc"> <meta name="theme-color" content="#3c8dbc">
<base href="/" /> <base href="/" />
@@ -62,9 +15,9 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"> integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<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=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="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">
@@ -76,17 +29,17 @@
'control-sidebar-open': main.usingControlSidebar && main.openControlSidebar}"> 'control-sidebar-open': main.usingControlSidebar && main.openControlSidebar}">
<div ui-view></div> <div ui-view></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js" <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"
integrity="sha384-rY/jv8mMhqDabXSo+UCggqKtdmBfd3qC2/KvyTDNQ6PcUJXaxK1tMepoQda4g5vB" crossorigin="anonymous"></script> integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.min.js" <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"
integrity="sha384-AH/e+s4V4kUifvnNED2x1XZqArO5qTFU4YKRzUXbz4IgPG1H0Xmz6fP1XUmO4vT/" crossorigin="anonymous"></script> integrity="sha384-R6kAKgTgRiD5889XyzYD/aMryNA4Yr9EBnt6rIXuukLgVONifQDnHNaadrSNakQl" crossorigin="anonymous"></script>
<script src="js/fallback-scripts.min.js?v=a0gylewuuesrx9u8ilik9"></script> <script src="js/fallback-scripts.min.js?v=no5c09"></script>
<script src="js/settings.js?v=a0gylewuuesrx9u8ilik9"></script> <script src="js/settings.js?v=no5c09"></script>
<script src="js/lib.min.js?v=a0gylewuuesrx9u8ilik9"></script> <script src="js/lib.min.js?v=no5c09"></script>
<script src="js/bw.min.js?v=a0gylewuuesrx9u8ilik9"></script> <script src="js/bw.min.js?v=no5c09"></script>
<script src="js/app.min.js?v=a0gylewuuesrx9u8ilik9"></script> <script src="js/app.min.js?v=no5c09"></script>
</body> </body>
</html> </html>

2
js/app.min.js vendored

File diff suppressed because one or more lines are too long

2
js/bw.min.js vendored

File diff suppressed because one or more lines are too long

40
js/duo-connector.js Normal file
View 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) {
}
}

View File

@@ -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

File diff suppressed because one or more lines are too long

2
js/u2f.min.js vendored

File diff suppressed because one or more lines are too long

17
manifest.json Normal file
View 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"
}

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=a0gylewuuesrx9u8ilik9"></script> <script src="js/u2f.min.js?v=no5c09"></script>
</body> </body>
</html> </html>