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:
parent
88ebb6a4b0
commit
dc91cfda69
apps/browser/src
libs/common/src/services/fido2
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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) => {
|
||||
|
@ -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({
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user