Adjust extension ports (#1134)

* Adjust extension ports

* Also use ENV, if supplied

* Add env as part of tests

* Explicit override for polkadot{.js} storage

* test prefix

* Ensure backwards compat for non-configured

* Re-add throw Error

* PORT_PREFIX test
This commit is contained in:
Jaco 2022-08-31 16:31:07 +02:00 committed by GitHub
parent 884c89bdda
commit f9a15514a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 41 additions and 11 deletions

View File

@ -1,5 +1,12 @@
# CHANGELOG
## master
Changes:
- Ensure that `EXTENSION_PREFIX` is always set as part of `@polkadot/extension-base`
## 0.44.6 Aug 21, 2022
- **Important** Not published to the stores, aligns with latest released packages.

View File

@ -32,8 +32,8 @@
"lint": "polkadot-dev-run-lint",
"postinstall": "polkadot-dev-yarn-only",
"start": "yarn watch",
"test": "polkadot-dev-run-test --detectOpenHandles",
"test:one": "polkadot-dev-run-test --detectOpenHandles",
"test": "EXTENSION_PREFIX='test' polkadot-dev-run-test --detectOpenHandles",
"test:one": "EXTENSION_PREFIX='test' polkadot-dev-run-test --detectOpenHandles",
"watch": "cd packages/extension && yarn polkadot-exec-webpack --config webpack.watch.cjs --mode development --watch"
},
"devDependencies": {

View File

@ -1,16 +1,26 @@
// Copyright 2019-2022 @polkadot/extension-base authors & contributors
// SPDX-License-Identifier: Apache-2.0
// this _must_ be changed for each extension
const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX || '';
if (!EXTENSION_PREFIX && !process.env.PORT_PREFIX) {
throw new Error('CRITICAL: The extension does not define an own EXTENSION_PREFIX environment variable as part of the build, this is required to ensure that messages are not shared between extensions. Failure to do so will yield messages sent to multiple extensions.');
}
const PORT_PREFIX = `${EXTENSION_PREFIX || 'unknown'}-${process.env.PORT_PREFIX || 'unknown'}`;
const PORT_CONTENT = `${PORT_PREFIX}-content`;
const PORT_EXTENSION = `${PORT_PREFIX}-extension`;
const MESSAGE_ORIGIN_PAGE = `${PORT_PREFIX}-page`;
const MESSAGE_ORIGIN_CONTENT = `${PORT_PREFIX}-content`;
const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json'] as const;
const PHISHING_PAGE_REDIRECT = '/phishing-page-detected';
const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX as string || '';
const PORT_CONTENT = `${EXTENSION_PREFIX}content`;
const PORT_EXTENSION = `${EXTENSION_PREFIX}extension`;
const MESSAGE_ORIGIN_PAGE = `${EXTENSION_PREFIX}page`;
const MESSAGE_ORIGIN_CONTENT = `${EXTENSION_PREFIX}content`;
const PASSWORD_EXPIRY_MIN = 15;
const PASSWORD_EXPIRY_MS = PASSWORD_EXPIRY_MIN * 60 * 1000;
// console.log(`Extension is sending and receiving messages on ${PORT_PREFIX}-*`);
export {
ALLOWED_PATH,
PASSWORD_EXPIRY_MIN,

View File

@ -8,7 +8,11 @@ import BaseStore from './Base';
export default class AccountsStore extends BaseStore<KeyringJson> implements KeyringStore {
constructor () {
super(EXTENSION_PREFIX ? `${EXTENSION_PREFIX}accounts` : null);
super(
EXTENSION_PREFIX && EXTENSION_PREFIX !== 'polkadot{.js}'
? `${EXTENSION_PREFIX}accounts`
: null
);
}
public override set (key: string, value: KeyringJson, update?: () => void): void {

View File

@ -8,6 +8,10 @@ import BaseStore from './Base';
export default class MetadataStore extends BaseStore<MetadataDef> {
constructor () {
super(`${EXTENSION_PREFIX}metadata`);
super(
EXTENSION_PREFIX && EXTENSION_PREFIX !== 'polkadot{.js}'
? `${EXTENSION_PREFIX}metadata`
: 'metadata'
);
}
}

View File

@ -3,13 +3,16 @@
const path = require('path');
const webpack = require('webpack');
const CopyPlugin = require('copy-webpack-plugin');
const ManifestPlugin = require('webpack-extension-manifest-plugin');
const { blake2AsHex } = require('@polkadot/util-crypto');
const pkgJson = require('./package.json');
const manifest = require('./manifest.json');
const EXT_NAME = manifest.short_name;
const packages = [
'extension',
'extension-base',
@ -70,7 +73,9 @@ module.exports = (entry, alias = {}) => ({
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
EXTENSION_PREFIX: JSON.stringify(process.env.EXTENSION_PREFIX || EXT_NAME),
NODE_ENV: JSON.stringify('production'),
PORT_PREFIX: JSON.stringify(blake2AsHex(JSON.stringify(manifest), 64))
}
}),
new CopyPlugin({ patterns: [{ from: 'public' }] }),