diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 5471171a60..12d9466742 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -1303,10 +1303,10 @@ "autoFillAndSave": { "message": "Auto-fill and Save" }, - "savedUri": { - "message": "Auto-filled and Saved Item" + "autoFillSuccessAndSavedUri": { + "message": "Auto-filled Item and Saved URI" }, "autoFillSuccess": { "message": "Auto-filled Item" } -} \ No newline at end of file +} diff --git a/src/background/main.background.ts b/src/background/main.background.ts index bbd455a52c..57e647fb4d 100644 --- a/src/background/main.background.ts +++ b/src/background/main.background.ts @@ -219,8 +219,8 @@ export default class MainBackground { // Background this.runtimeBackground = new RuntimeBackground(this, this.autofillService, this.cipherService, this.platformUtilsService as BrowserPlatformUtilsService, this.storageService, this.i18nService, - this.analytics, this.notificationsService, this.systemService, this.vaultTimeoutService, this.syncService, - this.authService, this.stateService, this.environmentService, this.popupUtilsService); + this.analytics, this.notificationsService, this.systemService, this.vaultTimeoutService, + this.environmentService); this.commandsBackground = new CommandsBackground(this, this.passwordGenerationService, this.platformUtilsService, this.analytics, this.vaultTimeoutService); diff --git a/src/background/runtime.background.ts b/src/background/runtime.background.ts index e74d8b44fa..b028911921 100644 --- a/src/background/runtime.background.ts +++ b/src/background/runtime.background.ts @@ -38,8 +38,7 @@ export default class RuntimeBackground { private storageService: StorageService, private i18nService: I18nService, private analytics: Analytics, private notificationsService: NotificationsService, private systemService: SystemService, private vaultTimeoutService: VaultTimeoutService, - private syncService: SyncService, private authService: AuthService, private stateService: StateService, - private environmentService: EnvironmentService, private popupUtilsService : PopupUtilsService) { + private environmentService: EnvironmentService) { this.isSafari = this.platformUtilsService.isSafari(); this.runtime = this.isSafari ? {} : chrome.runtime; @@ -165,25 +164,21 @@ export default class RuntimeBackground { } break; case 'authResult': - var vaultUrl = this.environmentService.webVaultUrl; - if(!vaultUrl) { - vaultUrl = 'https://vault.bitwarden.com'; - } + let vaultUrl = this.environmentService.webVaultUrl; + if (vaultUrl == null) { + vaultUrl = 'https://vault.bitwarden.com'; + } - if(!msg.referrer) { - return; - } - - if(!vaultUrl.includes(msg.referrer)) { - return; - } - - try { - chrome.tabs.create({ - url: 'popup/index.html?uilocation=popout#/sso?code=' + msg.code + '&state=' + msg.state - }); - } - catch { } + if (msg.referrer == null || Utils.getHostname(vaultUrl) !== msg.referrer) { + return; + } + + try { + chrome.tabs.create({ + url: 'popup/index.html?uilocation=popout#/sso?code=' + msg.code + '&state=' + msg.state + }); + } + catch { } break; default: break; diff --git a/src/background/tabs.background.ts b/src/background/tabs.background.ts index 78f177bad5..8f4d4e12b1 100644 --- a/src/background/tabs.background.ts +++ b/src/background/tabs.background.ts @@ -14,6 +14,8 @@ export default class TabsBackground { this.tabs.onActivated.addListener(async (activeInfo: any) => { await this.main.refreshBadgeAndMenu(); + this.main.messagingService.send('tabActivated'); + this.main.messagingService.send('tabChanged'); }); this.tabs.onReplaced.addListener(async (addedTabId: any, removedTabId: any) => { @@ -23,6 +25,8 @@ export default class TabsBackground { this.main.onReplacedRan = true; await this.main.checkNotificationQueue(); await this.main.refreshBadgeAndMenu(); + this.main.messagingService.send('tabReplaced'); + this.main.messagingService.send('tabChanged'); }); this.tabs.onUpdated.addListener(async (tabId: any, changeInfo: any, tab: any) => { @@ -32,6 +36,8 @@ export default class TabsBackground { this.main.onUpdatedRan = true; await this.main.checkNotificationQueue(); await this.main.refreshBadgeAndMenu(); + this.main.messagingService.send('tabUpdated'); + this.main.messagingService.send('tabChanged'); }); } } diff --git a/src/background/windows.background.ts b/src/background/windows.background.ts index c0fcc0b263..6239ddd782 100644 --- a/src/background/windows.background.ts +++ b/src/background/windows.background.ts @@ -18,6 +18,8 @@ export default class WindowsBackground { } await this.main.refreshBadgeAndMenu(); + this.main.messagingService.send('windowFocused'); + this.main.messagingService.send('windowChanged'); }); } } diff --git a/src/browser/browserApi.ts b/src/browser/browserApi.ts index a034a52bba..d806275416 100644 --- a/src/browser/browserApi.ts +++ b/src/browser/browserApi.ts @@ -215,11 +215,9 @@ export class BrowserApi { } static reloadOpenWindows() { - if(!BrowserApi.isSafariApi) - { - var sidebarName : string = 'sidebar'; - var sidebarWindows = chrome.extension.getViews({ type: sidebarName }); - if(sidebarWindows && sidebarWindows.length > 0) { + if (!BrowserApi.isSafariApi) { + const sidebarWindows = chrome.extension.getViews({ type: 'sidebar' }); + if (sidebarWindows && sidebarWindows.length > 0) { sidebarWindows[0].location.reload(); } } diff --git a/src/content/sso.ts b/src/content/sso.ts index cc936d91ab..326758b90a 100644 --- a/src/content/sso.ts +++ b/src/content/sso.ts @@ -1,13 +1,13 @@ -window.addEventListener("message", function(event) { - if (event.source != window) +window.addEventListener('message', (event) => { + if (event.source !== window) return; - if (event.data.command && (event.data.command == "authResult")) { + if (event.data.command && (event.data.command === 'authResult')) { chrome.runtime.sendMessage({ command: event.data.command, code: event.data.code, state: event.data.state, - referrer: event.source.location.hostname + referrer: event.source.location.hostname, }); } -}, false) \ No newline at end of file +}, false) diff --git a/src/popup/accounts/home.component.ts b/src/popup/accounts/home.component.ts index 49ec71d8a8..838f5b6d69 100644 --- a/src/popup/accounts/home.component.ts +++ b/src/popup/accounts/home.component.ts @@ -13,43 +13,40 @@ import { Utils } from 'jslib/misc/utils'; selector: 'app-home', templateUrl: 'home.component.html', }) -export class HomeComponent { - constructor( - protected platformUtilsService: PlatformUtilsService, - private passwordGenerationService : PasswordGenerationService, - private cryptoFunctionService: CryptoFunctionService, - private environmentService: EnvironmentService, - private storageService : StorageService) { } +export class HomeComponent { + constructor(protected platformUtilsService: PlatformUtilsService, + private passwordGenerationService: PasswordGenerationService, private storageService: StorageService, + private cryptoFunctionService: CryptoFunctionService, private environmentService: EnvironmentService) { } - async launchSsoBrowser() { - // Generate necessary sso params - const passwordOptions: any = { - type: 'password', - length: 64, - uppercase: true, - lowercase: true, - numbers: true, - special: false, - }; + async launchSsoBrowser() { + // Generate necessary sso params + const passwordOptions: any = { + type: 'password', + length: 64, + uppercase: true, + lowercase: true, + numbers: true, + special: false, + }; - const state = (await this.passwordGenerationService.generatePassword(passwordOptions)) + ':clientId=browser'; - let codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions); - const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, 'sha256'); - const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash); - - await this.storageService.save(ConstantsService.ssoCodeVerifierKey, codeVerifier); - await this.storageService.save(ConstantsService.ssoStateKey, state); + const state = (await this.passwordGenerationService.generatePassword(passwordOptions)) + ':clientId=browser'; + const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions); + const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, 'sha256'); + const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash); - let url = this.environmentService.getWebVaultUrl(); - if (url == null) { - url = 'https://vault.bitwarden.com'; - } + await this.storageService.save(ConstantsService.ssoCodeVerifierKey, codeVerifier); + await this.storageService.save(ConstantsService.ssoStateKey, state); - const redirectUri = url + '/sso-connector.html'; - - // Launch browser - this.platformUtilsService.launchUri(url + '/#/sso?clientId=browser' + - '&redirectUri=' + encodeURIComponent(redirectUri) + - '&state=' + state + '&codeChallenge=' + codeChallenge); - } + let url = this.environmentService.getWebVaultUrl(); + if (url == null) { + url = 'https://vault.bitwarden.com'; + } + + const redirectUri = url + '/sso-connector.html'; + + // Launch browser + this.platformUtilsService.launchUri(url + '/#/sso?clientId=browser' + + '&redirectUri=' + encodeURIComponent(redirectUri) + + '&state=' + state + '&codeChallenge=' + codeChallenge); + } } diff --git a/src/popup/accounts/login.component.ts b/src/popup/accounts/login.component.ts index 66873e538c..073d182df1 100644 --- a/src/popup/accounts/login.component.ts +++ b/src/popup/accounts/login.component.ts @@ -22,8 +22,8 @@ export class LoginComponent extends BaseLoginComponent { protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService, protected stateService: StateService, protected environmentService: EnvironmentService, protected passwordGenerationService: PasswordGenerationService, - protected cryptoFunctionService: CryptoFunctionService, - storageService: StorageService, syncService : SyncService) { + protected cryptoFunctionService: CryptoFunctionService, storageService: StorageService, + syncService: SyncService) { super(authService, router, platformUtilsService, i18nService, stateService, environmentService, passwordGenerationService, cryptoFunctionService, storageService); super.onSuccessfulLogin = () => { return syncService.fullSync(true); diff --git a/src/popup/accounts/sso.component.ts b/src/popup/accounts/sso.component.ts index e4f9a07c84..c88f3d1e60 100644 --- a/src/popup/accounts/sso.component.ts +++ b/src/popup/accounts/sso.component.ts @@ -29,23 +29,23 @@ export class SsoComponent extends BaseSsoComponent { storageService: StorageService, stateService: StateService, platformUtilsService: PlatformUtilsService, apiService: ApiService, cryptoFunctionService: CryptoFunctionService, passwordGenerationService: PasswordGenerationService, - syncService: SyncService, private environmentService: EnvironmentService ) { + syncService: SyncService, private environmentService: EnvironmentService) { super(authService, router, i18nService, route, storageService, stateService, platformUtilsService, apiService, cryptoFunctionService, passwordGenerationService); - + let url = this.environmentService.getWebVaultUrl(); if (url == null) { url = 'https://vault.bitwarden.com'; } - + this.redirectUri = url + '/sso-connector.html'; this.clientId = 'browser'; - + super.onSuccessfulLogin = () => { - BrowserApi.reloadOpenWindows(); - const thisWindow = window.open('', '_self'); - thisWindow.close(); - return syncService.fullSync(true); + BrowserApi.reloadOpenWindows(); + const thisWindow = window.open('', '_self'); + thisWindow.close(); + return syncService.fullSync(true); }; } } diff --git a/src/popup/vault/view.component.html b/src/popup/vault/view.component.html index e3f3da2165..439b3f2bfa 100644 --- a/src/popup/vault/view.component.html +++ b/src/popup/vault/view.component.html @@ -17,7 +17,7 @@
{{'name' | i18n}} - +
@@ -60,8 +60,7 @@ [ngClass]="{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}"> + (click)="copy(cipher.login.password, 'password', 'Password')" *ngIf="cipher.viewPassword">
@@ -238,7 +237,8 @@
+ *ngIf="field.type === fieldType.Hidden && cipher.viewPassword" + (click)="toggleFieldValue(field)"> @@ -268,7 +268,7 @@
-
-
-