mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 16:23:44 +00:00
Add support for WebAuthn to browser extension (#1379)
This commit is contained in:
@@ -179,9 +179,6 @@ export default class MainBackground {
|
||||
this.apiService = new ApiService(this.tokenService, this.platformUtilsService,
|
||||
(expired: boolean) => this.logout(expired));
|
||||
this.userService = new UserService(this.tokenService, this.storageService);
|
||||
this.authService = new AuthService(this.cryptoService, this.apiService, this.userService,
|
||||
this.tokenService, this.appIdService, this.i18nService, this.platformUtilsService,
|
||||
this.messagingService, this.vaultTimeoutService, this.consoleLogService);
|
||||
this.settingsService = new SettingsService(this.userService, this.storageService);
|
||||
this.cipherService = new CipherService(this.cryptoService, this.userService, this.settingsService,
|
||||
this.apiService, this.storageService, this.i18nService, () => this.searchService);
|
||||
@@ -246,7 +243,7 @@ export default class MainBackground {
|
||||
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.environmentService, this.policyService, this.userService);
|
||||
this.environmentService, this.policyService, this.userService, this.messagingService);
|
||||
this.nativeMessagingBackground = new NativeMessagingBackground(this.storageService, this.cryptoService, this.cryptoFunctionService,
|
||||
this.vaultTimeoutService, this.runtimeBackground, this.i18nService, this.userService, this.messagingService, this.appIdService);
|
||||
this.commandsBackground = new CommandsBackground(this, this.passwordGenerationService,
|
||||
@@ -261,12 +258,24 @@ export default class MainBackground {
|
||||
this.webRequestBackground = new WebRequestBackground(this.platformUtilsService, this.cipherService,
|
||||
this.vaultTimeoutService);
|
||||
this.windowsBackground = new WindowsBackground(this);
|
||||
|
||||
const that = this;
|
||||
this.authService = new AuthService(this.cryptoService, this.apiService, this.userService,
|
||||
this.tokenService, this.appIdService, this.i18nService, this.platformUtilsService,
|
||||
new class extends MessagingServiceAbstraction {
|
||||
// AuthService should send the messages to the background not popup.
|
||||
send = (subscriber: string, arg: any = {}) => {
|
||||
const message = Object.assign({}, { command: subscriber }, arg);
|
||||
that.runtimeBackground.processMessage(message, that, null);
|
||||
}
|
||||
}(), this.vaultTimeoutService, this.consoleLogService);
|
||||
}
|
||||
|
||||
async bootstrap() {
|
||||
this.analytics.ga('send', 'pageview', '/background.html');
|
||||
this.containerService.attachToWindow(window);
|
||||
|
||||
(this.authService as AuthService).init();
|
||||
await (this.vaultTimeoutService as VaultTimeoutService).init(true);
|
||||
await (this.i18nService as I18nService).init();
|
||||
await (this.eventService as EventService).init(true);
|
||||
|
||||
@@ -7,6 +7,7 @@ import { LoginView } from 'jslib/models/view/loginView';
|
||||
import { CipherService } from 'jslib/abstractions/cipher.service';
|
||||
import { EnvironmentService } from 'jslib/abstractions/environment.service';
|
||||
import { I18nService } from 'jslib/abstractions/i18n.service';
|
||||
import { MessagingService } from 'jslib/abstractions/messaging.service';
|
||||
import { NotificationsService } from 'jslib/abstractions/notifications.service';
|
||||
import { PolicyService } from 'jslib/abstractions/policy.service';
|
||||
import { StorageService } from 'jslib/abstractions/storage.service';
|
||||
@@ -39,7 +40,7 @@ export default class RuntimeBackground {
|
||||
private analytics: Analytics, private notificationsService: NotificationsService,
|
||||
private systemService: SystemService, private vaultTimeoutService: VaultTimeoutService,
|
||||
private environmentService: EnvironmentService, private policyService: PolicyService,
|
||||
private userService: UserService) {
|
||||
private userService: UserService, private messagingService: MessagingService) {
|
||||
|
||||
// onInstalled listener must be wired up before anything else, so we do it in the ctor
|
||||
chrome.runtime.onInstalled.addListener((details: any) => {
|
||||
@@ -176,6 +177,22 @@ export default class RuntimeBackground {
|
||||
}
|
||||
catch { }
|
||||
break;
|
||||
case 'webAuthnResult':
|
||||
let vaultUrl2 = this.environmentService.getWebVaultUrl();
|
||||
if (vaultUrl2 == null) {
|
||||
vaultUrl2 = 'https://vault.bitwarden.com';
|
||||
}
|
||||
|
||||
if (msg.referrer == null || Utils.getHostname(vaultUrl2) !== msg.referrer) {
|
||||
return;
|
||||
}
|
||||
|
||||
const params = `webAuthnResponse=${encodeURIComponent(msg.data)};remember=${msg.remember}`;
|
||||
BrowserApi.createNewTab(`popup/index.html?uilocation=popout#/2fa;${params}`, undefined, false);
|
||||
break;
|
||||
case 'reloadPopup':
|
||||
this.messagingService.send('reloadPopup');
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user