Closed Milix-M closed 3 months ago
毎回contextMenuを全登録し直すほうが良いかも(後から弄ることを考えると)
右クリックで表示されるサービスを追加したり、削除できるようにしてほしい
ブランチリセットする(reason: gitの操作ミス)
import { Account } from "./models/account";
chrome.runtime.onInstalled.addListener(() => { chrome.contextMenus.create({ id: "insertTwoFactorCodeMenu", title: "二段階認証コードを挿入", contexts: ["all"], }); });
chrome.runtime.onMessage.addListener((request) => { if (request.addAccount) { insertAccountMenuToParent(request.addAccount); } else if (request.deleteAccount) { removeAccountMenu(request.deleteAccount); } });
export function insertAccountMenuToParent(account: Account) { chrome.contextMenus.create({ id: account.accountUUID, parentId: "insertTwoFactorCodeMenu", title: account.label, contexts: ["all"], }); }
export function removeAccountMenu(accountUUID: string) { chrome.contextMenus.remove(accountUUID); }
- storage.ts
import { Account } from "./models/account"; import crypto from "crypto-js"; import CryptoJS from "crypto-js"; import { getBucket } from "@extend-chrome/storage"; import { v4 as uuidv4 } from "uuid";
/**
シークレット, カウンタなどの情報をinput, outputするクラス */ export class StorageProvider { private readonly bucket = getBucket("acc-bucket", "sync");
/**
await this.bucket .set({ }) .then(() => { // コンテキストメニューに追加 chrome.runtime.sendMessage({ addAccount: account }); }); }
public async getSecrets() { const secrets = await this.bucket.get();
// Accountの配列に入れてあげる const accounts: Account[] = []; // Mapにすべき? for (const [_, v] of Object.entries(secrets)) { accounts.push(this.decodeEncryptAccount(v)); }
// 降順ソート return [...accounts].sort((a, b) => b.addedAt - a.addedAt); }
/**
await this.bucket .remove(accountUUID) .then(() => chrome.runtime.sendMessage({ deleteAccount: accountUUID })); }
/**
// 暗号化して返却 return crypto.AES.encrypt(accountJson, this.readPassword()).toString(); }
/**
// Accountクラスに戻す const account: Account = Object.assign( new Account(uuidv4(), "", "totp", "", 0), JSON.parse(decodedAccount) );
return account; }
/**
if (import.meta.env.VITE_ENCRYPT_PASSWORD !== undefined) { password = import.meta.env.VITE_ENCRYPT_PASSWORD; }
return password; } }
アカウントをeditするとduplicate idエラーが発生するのでどうにかする
案:
contextMenuに追加する方式厳しそうなので他の方法考えたい
background側でcontextMenuを追加する際に今までのcontextMenuをremoveAll()してからStorageProviderのgetAccountsでアカウントを取ってきてforでcontextMenuで再度登録する.
こうすることでcontextMenuの並び順が保証される