mirror of
https://github.com/keepassxreboot/keepassxc-browser.git
synced 2026-03-11 08:54:43 +00:00
Add cookies permission to all manifests (#2134)
Add cookies permission to all manifests
This commit is contained in:
parent
71a7782cfa
commit
14f2c9ae19
14 changed files with 104 additions and 81 deletions
|
|
@ -1,3 +1,8 @@
|
|||
1.9.0.1 (2024-03-06)
|
||||
=========================
|
||||
- Add cookies permission to missing manifest file [#2134]
|
||||
- Fix showing filter logins input in the extension popup [#2137]
|
||||
|
||||
1.9.0 (2024-03-04)
|
||||
=========================
|
||||
- Add support for Manifest V3 with Chromium-based browsers [#1723]
|
||||
|
|
|
|||
30
build.js
30
build.js
|
|
@ -13,19 +13,33 @@ const BROWSERS = {
|
|||
'Chromium': 'manifest_chromium.json',
|
||||
};
|
||||
|
||||
async function getDestinationFilename(manifest) {
|
||||
const getVersion = async () => {
|
||||
const manifestFile = await fs.readFile(DEFAULT, { encoding: 'utf8' });
|
||||
const data = JSON.parse(manifestFile);
|
||||
return data['version'];
|
||||
};
|
||||
|
||||
const setVersion = async (manifest, version) => {
|
||||
const manifestFile = await fs.readFile(manifest, { encoding: 'utf8' });
|
||||
const data = JSON.parse(manifestFile);
|
||||
|
||||
data['version'] = version;
|
||||
if (Object.hasOwn(data, 'version_name')) {
|
||||
data['version_name'] = version;
|
||||
}
|
||||
fs.writeFile(manifest, JSON.stringify(data, null, 4));
|
||||
};
|
||||
|
||||
const getDestinationFilename = async (manifest, version) => {
|
||||
const browser = manifest.substring(manifest.indexOf('_') + 1, manifest.indexOf('.'));
|
||||
return `keepassxc-browser_${version}_${browser}.zip`;
|
||||
};
|
||||
|
||||
return `keepassxc-browser_${data['version']}_${browser}.zip`;
|
||||
}
|
||||
|
||||
async function updateTranslations() {
|
||||
const updateTranslations = async () => {
|
||||
console.log('Pulling translations from Transifex, please wait...');
|
||||
const { stdout } = await exec('tx pull -af');
|
||||
console.log(stdout);
|
||||
}
|
||||
};
|
||||
|
||||
(async() => {
|
||||
const params = process.argv.slice(2);
|
||||
|
|
@ -34,11 +48,13 @@ async function updateTranslations() {
|
|||
}
|
||||
|
||||
await fs.copyFile(`${DEST}/manifest.json`, `./${DEFAULT}`);
|
||||
const version = await getVersion();
|
||||
|
||||
for (const browser in BROWSERS) {
|
||||
console.log(`KeePassXC-Browser: Creating extension package for ${browser}`);
|
||||
|
||||
const fileName = await getDestinationFilename(BROWSERS[browser]);
|
||||
const fileName = await getDestinationFilename(BROWSERS[browser], version);
|
||||
setVersion(`./dist/${BROWSERS[browser]}`, version);
|
||||
await fs.copyFile(`./dist/${BROWSERS[browser]}`, `${DEST}/manifest.json`);
|
||||
|
||||
if (await fs.exists(fileName)) {
|
||||
|
|
|
|||
7
dist/manifest_chromium.json
vendored
7
dist/manifest_chromium.json
vendored
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"manifest_version": 3,
|
||||
"name": "KeePassXC-Browser",
|
||||
"version": "1.9.0",
|
||||
"version_name": "1.9.0",
|
||||
"version": "1.9.0.1",
|
||||
"version_name": "1.9.0.1",
|
||||
"minimum_chrome_version": "93",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"author": "KeePassXC Team",
|
||||
|
|
@ -138,8 +138,9 @@
|
|||
}],
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"contextMenus",
|
||||
"clipboardWrite",
|
||||
"contextMenus",
|
||||
"cookies",
|
||||
"nativeMessaging",
|
||||
"notifications",
|
||||
"storage",
|
||||
|
|
|
|||
5
dist/manifest_firefox.json
vendored
5
dist/manifest_firefox.json
vendored
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "KeePassXC-Browser",
|
||||
"version": "1.9.0",
|
||||
"version": "1.9.0.1",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"author": "KeePassXC Team",
|
||||
"icons": {
|
||||
|
|
@ -142,8 +142,9 @@
|
|||
],
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"contextMenus",
|
||||
"clipboardWrite",
|
||||
"contextMenus",
|
||||
"cookies",
|
||||
"nativeMessaging",
|
||||
"notifications",
|
||||
"storage",
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "Източникът е празен или забранен.",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "Ефективният домейн не е приемлив домейн.",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Източникът и RP ID не съвпадат.",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "Не са предоставени поддържани алгоритми.",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "Изчакайте отброяването да приключи.",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "Неочаквана грешка на Passkey.",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "Предизвикването е по-късо от изискваната минимална дължина.",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id не отговаря на изискваната дължина.",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "Контекстът не е сигурен.",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "De oorsprong is leeg of niet toegestaan.",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "Effectief domein is geen geldig domein.",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Oorsprong en RP ID komen niet overeen.",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "Geen ondersteunde algoritmes zijn verstrekt.",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "Wacht tot de timer verloopt.",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "Onbekende Passkeys-fout.",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "De challenge is korter dan de vereiste minimale lengte.",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id voldoet niet aan de vereiste lengte.",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "Context is niet veilig.",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "Źródło jest puste lub niedozwolone.",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "Domena efektywna nie jest domeną prawidłową.",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Źródło i identyfikator RP nie są zgodne.",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "Nie zapewniono obsługiwanych algorytmów.",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "Poczekaj, aż upłynie limit czasu.",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "Nieznany błąd klucza dostępu.",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "Wyzwanie jest krótsze niż wymagana długość minimalna.",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id nie ma wymaganej długości.",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "Kontekst nie jest bezpieczny.",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "Источник пуст или не разрешен.",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "Эффективный домен не является действительным доменом.",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Источник и идентификатор RP не совпадают.",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "Не было предоставлено никаких поддерживаемых алгоритмов.",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "Дождитесь истечения таймера.",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "Неизвестная ошибка Passkeys.",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "Вызов короче требуемой минимальной длины.",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id не соответствует требуемой длине.",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "Контекст небезопасен.",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
@ -208,7 +208,7 @@
|
|||
"description": "Password icon title text."
|
||||
},
|
||||
"passwordGeneratorNotSupported": {
|
||||
"message": "Launching the password generator is not supported in this KeePassXC version. Please update KeePassXC to a newer version."
|
||||
"message": "Запуск генератора паролей не поддерживается в этой версии KeePassXC. Пожалуйста, обновите KeePassXC до более новой версии."
|
||||
},
|
||||
"usernameFieldText": {
|
||||
"message": "Заполнить учётные данные из KeePassXC",
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "Ursprung är tomt eller inte tillåtet.",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "Effektiv domän är inte en giltig domän.",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Ursprung och RP-ID matchar inte.",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "Inga algoritmer som stöds tillhandahölls.",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "Vänta på att tiduret skall löpa ut.",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "Okänt passnyckelfel.",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "Utmaningen är kortare än den minimilängd som krävs.",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id matchar inte den erforderliga längden.",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "Kontexten är inte säker.",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "Origin 为空或不被允许。",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "有效域名是无效的域名。",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Origin 与 RP ID 不匹配。",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "未提供受支持的算法。",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "等待计时器过期。",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "未知 Passkey 错误。",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "挑战不满足所需最小长度。",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id 不匹配所需长度。",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "上下文不安全。",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
|
|||
|
|
@ -148,39 +148,39 @@
|
|||
"description": "Invalid URL provided."
|
||||
},
|
||||
"errorMessagePasskeysOriginNotAllowed": {
|
||||
"message": "Origin is empty or not allowed.",
|
||||
"message": "Origin 為空或不被允許。",
|
||||
"description": "Origin is empty or not allowed."
|
||||
},
|
||||
"errorMessagePasskeysDomainNotValid": {
|
||||
"message": "Effective domain is not a valid domain.",
|
||||
"message": "有效域名是無效的域名。",
|
||||
"description": "Effective domain is not a valid domain."
|
||||
},
|
||||
"errorMessagePasskeysDomainRpIdMismatch": {
|
||||
"message": "Origin and RP ID do not match.",
|
||||
"message": "Origin 與 RP ID 不匹配。",
|
||||
"description": "Origin and RP ID do not match."
|
||||
},
|
||||
"errorMessagePasskeysNoSupportedAlgorithms": {
|
||||
"message": "No supported algorithms were provided.",
|
||||
"message": "未提供受支持的演算法。",
|
||||
"description": "No supported algorithms were provided."
|
||||
},
|
||||
"errorMessagePasskeysWaitforLifeTimer": {
|
||||
"message": "Wait for timer to expire.",
|
||||
"message": "等待計時器過期。",
|
||||
"description": "Wait for timer to expire."
|
||||
},
|
||||
"errorMessagePasskeysUnknownError": {
|
||||
"message": "Unknown Passkeys error.",
|
||||
"message": "未知的通行密鑰錯誤。",
|
||||
"description": "Unknown Passkeys error."
|
||||
},
|
||||
"errorMessagePasskeysInvalidChallenge": {
|
||||
"message": "Challenge is shorter than required minimum length.",
|
||||
"message": "挑戰不滿足所需最小長度。",
|
||||
"description": "Challenge is shorter than required minimum length."
|
||||
},
|
||||
"errorMessagePasskeysInvalidUserId": {
|
||||
"message": "user.id does not match the required length.",
|
||||
"message": "user.id 不匹配所需長度。",
|
||||
"description": "user.id does not match the required length."
|
||||
},
|
||||
"errorMessagePasskeysContextIsNotSecure": {
|
||||
"message": "Context is not secure.",
|
||||
"message": "上下文不安全。",
|
||||
"description": "Context is not secure."
|
||||
},
|
||||
"errorNotConnected": {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "KeePassXC-Browser",
|
||||
"version": "1.9.0",
|
||||
"version_name": "1.9.0",
|
||||
"version": "1.9.0.1",
|
||||
"version_name": "1.9.0.1",
|
||||
"minimum_chrome_version": "93",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"author": "KeePassXC Team",
|
||||
|
|
@ -144,9 +144,9 @@
|
|||
],
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"clipboardWrite",
|
||||
"contextMenus",
|
||||
"cookies",
|
||||
"clipboardWrite",
|
||||
"nativeMessaging",
|
||||
"notifications",
|
||||
"storage",
|
||||
|
|
|
|||
2
package-lock.json
generated
2
package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "keepassxc-browser",
|
||||
"version": "1.9.0",
|
||||
"version": "1.9.0.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "keepassxc-browser",
|
||||
"version": "1.9.0",
|
||||
"version": "1.9.0.1",
|
||||
"description": "KeePassXC-Browser",
|
||||
"main": "build.js",
|
||||
"devDependencies": {
|
||||
|
|
|
|||
Loading…
Reference in a new issue