1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-12 22:33:35 +00:00

Add new login with save from notification bar

This commit is contained in:
Kyle Spearrin
2016-12-30 14:25:57 -05:00
parent 5890449ca9
commit 2310f5ebdf
5 changed files with 142 additions and 38 deletions

View File

@@ -57,10 +57,10 @@ chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
messageCurrentTab('closeOverlayPopup');
}
else if (msg.command === 'bgOpenNotificationBar') {
messageCurrentTab('openNotificationBar', msg.data);
messageTab(sender.tab.id, 'openNotificationBar', msg.data);
}
else if (msg.command === 'bgCloseNotificationBar') {
messageCurrentTab('closeNotificationBar');
messageTab(sender.tab.id, 'closeNotificationBar');
}
else if (msg.command === 'bgCollectPageDetails') {
collectPageDetailsForContentScript(sender.tab);
@@ -68,6 +68,12 @@ chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
else if (msg.command === 'bgAddLogin') {
addLogin(msg.login, sender.tab);
}
else if (msg.command === 'bgAddClose') {
removeAddLogin(sender.tab);
}
else if (msg.command === 'bgAddSave') {
saveAddLogin(sender.tab);
}
else if (msg.command === 'collectPageDetailsResponse') {
// messageCurrentTab('openNotificationBar', { type: 'add', typeData: null });
if (msg.contentScript) {
@@ -222,28 +228,23 @@ function loadMenuAndUpdateBadge(url, tabId, loadContextMenuOptions) {
return;
}
var count = 0;
chrome.browserAction.setBadgeBackgroundColor({ color: '#294e5f' });
siteService.getAllDecrypted().then(function (sites) {
siteService.getAllDecryptedForDomain(tabDomain).then(function (sites) {
sortSites(sites);
for (var i = 0; i < sites.length; i++) {
if (sites[i].domain && tabDomain === sites[i].domain) {
count++;
if (loadContextMenuOptions) {
loadSiteContextMenuOptions(sites[i]);
}
if (loadContextMenuOptions) {
loadSiteContextMenuOptions(sites[i]);
}
}
if (count > 0 && count < 9) {
if (sites.length > 0 && sites.length < 9) {
chrome.browserAction.setBadgeText({
text: count.toString(),
text: sites.length.toString(),
tabId: tabId
});
}
else if (count > 0) {
else if (sites.length > 0) {
chrome.browserAction.setBadgeText({
text: '9+',
tabId: tabId
@@ -356,14 +357,77 @@ function addLogin(login, tab) {
return;
}
loginsToAdd.push({
username: login.username,
password: login.password,
name: loginDomain,
uri: login.url,
tabId: tab.id
siteService.getAllDecryptedForDomain(loginDomain).then(function (sites) {
var match = false;
for (var i = 0; i < sites.length; i++) {
if (sites[i] === login.username) {
match = true;
break;
}
}
if (!match) {
// remove any old logins for this tab
removeAddLogin(tab);
loginsToAdd.push({
username: login.username,
password: login.password,
name: loginDomain,
uri: login.url,
tabId: tab.id,
expires: new Date((new Date()).getTime() + 30 * 60000) // 30 minutes
});
checkLoginsToAdd();
}
});
checkLoginsToAdd();
}
cleanupLoginsToAdd();
setInterval(cleanupLoginsToAdd, 2 * 60 * 1000); // check every 2 minutes
function cleanupLoginsToAdd() {
var now = new Date();
for (var i = loginsToAdd.length - 1; i >= 0 ; i--) {
if (loginsToAdd[i].expires < now) {
loginsToAdd.splice(i, 1);
}
}
}
function removeAddLogin(tab) {
for (var i = loginsToAdd.length - 1; i >= 0 ; i--) {
if (loginsToAdd[i].tabId === tab.id) {
loginsToAdd.splice(i, 1);
}
}
}
function saveAddLogin(tab) {
for (var i = loginsToAdd.length - 1; i >= 0 ; i--) {
if (loginsToAdd[i].tabId === tab.id) {
var loginToAdd = loginsToAdd[i];
loginsToAdd.splice(i, 1);
siteService.encrypt({
id: null,
folderId: null,
favorite: false,
name: loginToAdd.name,
uri: loginToAdd.uri,
username: loginToAdd.username,
password: loginToAdd.password,
notes: null
}).then(function (siteModel) {
var site = new Site(siteModel, true);
siteService.saveWithServer(site).then(function (site) {
ga('send', {
hitType: 'event',
eventAction: 'Added Site from Notification Bar'
});
});
});
messageTab(tab.id, 'closeNotificationBar');
}
}
}
function checkLoginsToAdd() {