1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-03-02 03:41:09 +01:00

[EC-598] feat: add ability to return responses

This commit is contained in:
Andreas Coroiu 2022-11-18 15:24:46 +01:00
parent 88ebb6a4b0
commit dc91cfda69
No known key found for this signature in database
GPG Key ID: E70B5FFC81DFEC1A
5 changed files with 19 additions and 33 deletions
apps/browser/src
libs/common/src/services/fido2

View File

@ -205,11 +205,7 @@ export default class RuntimeBackground {
this.platformUtilsService.copyToClipboard(msg.identifier, { window: window });
break;
case "fido2RegisterCredentialRequest":
BrowserApi.tabSendMessageData(
sender.tab,
"fido2RegisterCredentialResponse",
await this.main.fido2Service.createCredential(msg.data)
);
sendResponse(await this.main.fido2Service.createCredential(msg.data));
break;
default:
break;

View File

@ -8,19 +8,24 @@ const s = document.createElement("script");
s.src = chrome.runtime.getURL("content/webauthn/page-script.js");
(document.head || document.documentElement).appendChild(s);
const messenger = Messenger.createInExtensionContext(window, chrome.runtime.connect());
const messenger = Messenger.forDOMCommunication(window);
messenger.addHandler(async (message) => {
if (message.type === MessageType.CredentialCreationRequest) {
chrome.runtime.sendMessage({
command: "fido2RegisterCredentialRequest",
data: message.data,
return new Promise((resolve, reject) => {
chrome.runtime.sendMessage(
{
command: "fido2RegisterCredentialRequest",
data: message.data,
},
(response) => {
resolve({
type: MessageType.CredentialCreationResponse,
approved: true,
});
}
);
});
return {
type: MessageType.CredentialCreationResponse,
approved: true,
};
}
return undefined;

View File

@ -2,7 +2,7 @@ import { concatMap, filter, firstValueFrom, Observable } from "rxjs";
import { Message } from "./message";
type PostMessageFunction = Window["postMessage"] | chrome.runtime.Port["postMessage"];
type PostMessageFunction = (message: MessageWithMetadata) => void;
type Channel = {
messages$: Observable<MessageWithMetadata>;
@ -17,22 +17,7 @@ type MessageWithMetadata = Message & { metadata: Metadata };
// If you see this in a code review please comment on it!
export class Messenger {
static createInPageContext(window: Window) {
return new Messenger({
postMessage: window.postMessage.bind(window),
messages$: new Observable((subscriber) => {
const eventListener = (event: MessageEvent<MessageWithMetadata>) => {
subscriber.next(event.data);
};
window.addEventListener("message", eventListener);
return () => window.removeEventListener("message", eventListener);
}),
});
}
static createInExtensionContext(window: Window, port: chrome.runtime.Port) {
static forDOMCommunication(window: Window) {
return new Messenger({
postMessage: window.postMessage.bind(window),
messages$: new Observable((subscriber) => {

View File

@ -9,7 +9,7 @@ const browserCredentials = {
get: navigator.credentials.get.bind(navigator.credentials),
};
const messenger = Messenger.createInPageContext(window);
const messenger = Messenger.forDOMCommunication(window);
navigator.credentials.create = async (options?: CredentialCreationOptions): Promise<Credential> => {
await messenger.request({

View File

@ -7,7 +7,7 @@ export class Fido2Service implements Fido2ServiceAbstraction {
createCredential(params: CredentialRegistrationParams): unknown {
// eslint-disable-next-line no-console
console.log("Fido2Service.registerCredential");
return undefined;
return "createCredential response";
}
assertCredential(): unknown {