Skip to content

Commit 0233a3b

Browse files
authored
Merge pull request #1422 from crypto-com/dev
Internal Release v1.4.9
2 parents 9cd3774 + 4e62c58 commit 0233a3b

File tree

11 files changed

+155
-25
lines changed

11 files changed

+155
-25
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
55
*Unreleased*
66

77
*Released*
8+
## [v1.4.9] - 2024-03-07
9+
### Additions
10+
- Security enhancement on DApp Browser
11+
- Governance Proposal UX enhancement
812
## [v1.4.8] - 2024-01-25
913
### Additions
1014
- Security enhancement & package dependencies bump

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "chain-desktop-wallet",
3-
"version": "1.4.8",
3+
"version": "1.4.9",
44
"description": "Crypto.com DeFi Desktop Wallet App",
55
"repository": "github:crypto-com/chain-desktop-wallet",
66
"author": "Crypto.com <contact@crypto.com>",
@@ -9,7 +9,7 @@
99
"main": "build/electron/main.js",
1010
"private": true,
1111
"scripts": {
12-
"run-audit": "yarn audit-ci --high -a 1094574 1094894",
12+
"run-audit": "yarn audit-ci --high -a 1094574 1096494 1096640",
1313
"start": "node scripts/start.js",
1414
"build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 && yarn clean-builds && node scripts/build.js",
1515
"test": "node scripts/test.js --watchAll=false",

src/language/en-US.json

+1
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@
592592
"staking.modal6.note.part5": "in order to broadcast this transaction successfully",
593593
"governance.title": "Governance",
594594
"governance.description": "You may see all proposals and cast your votes here.",
595+
"governance.warning": "This proposal contains external links that may lead to suspicious websites. Please open with caution.",
595596
"governance.votingHistoryBtn": "View Voting History",
596597
"governance.tab1": "All",
597598
"governance.tab2": "Voting",

src/language/ko-KR.json

+1
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@
589589
"staking.modal6.note.part5": "이 거래를 성공적으로 발송하기 위해서",
590590
"governance.title": "거버넌스",
591591
"governance.description": "여기에서 모든 제안을 보고 투표할 수 있습니다.",
592+
"governance.warning": "이 제안서에는 의심스러운 웹사이트로 이동할 수 있는 외부 링크가 포함되어 있습니다. 주의해서 열어주세요.",
592593
"governance.votingHistoryBtn": "투표 기록 보기",
593594
"governance.tab1": "모두",
594595
"governance.tab2": "투표",

src/language/zh-CN.json

+1
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@
592592
"staking.modal6.note.part5": "以完成此交易",
593593
"governance.title": "治理",
594594
"governance.description": "你可以在这里看到所有提案并行使你的投票权。",
595+
"governance.warning": "此提案包含可能导向可疑网站的外部连结。请谨慎开启。",
595596
"governance.votingHistoryBtn": "查看投票历史",
596597
"governance.tab1": "所有",
597598
"governance.tab2": "投票中",

src/language/zh-HK.json

+1
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@
592592
"staking.modal6.note.part5": "以完成此交易",
593593
"governance.title": "治理",
594594
"governance.description": "你可以在這裡看到所有提案並行使你的投票權。",
595+
"governance.warning": "此提案包含可能導向可疑網站的外部連結。請謹慎開啟。",
595596
"governance.votingHistoryBtn": "查看投票歷史",
596597
"governance.tab1": "所有",
597598
"governance.tab2": "投票中",

src/pages/dapp/browser/DappBrowser.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ const DappBrowser = forwardRef<DappBrowserRef, DappBrowserProps>((props: DappBro
120120
errorCallback: Function;
121121
}>();
122122

123+
useEffect(() => {
124+
if (isDOMReady && cronosAsset) {
125+
webviewRef.current?.send('getAddress', [cronosAsset.address!]);
126+
}
127+
}, [cronosAsset, isDOMReady]);
128+
123129
const onRequestAddress = useRefCallback((onSuccess: (address: string) => void) => {
124130
onSuccess(cronosAsset?.address!);
125131
});
@@ -425,7 +431,7 @@ const DappBrowser = forwardRef<DappBrowserRef, DappBrowserProps>((props: DappBro
425431
preload={ProviderPreloadScriptPath}
426432
ref={webviewRef}
427433
allowpopups={'true' as any}
428-
webpreferences="contextIsolation=false, nodeIntegration=false, javascript=yes, allowpopup=yes"
434+
webpreferences="contextIsolation=true, sandbox=true, nodeIntegration=false, javascript=yes, allowpopup=yes"
429435
useragent={window.navigator.userAgent.replace(
430436
'chain-desktop-wallet',
431437
'Desktop Wallet Build',

src/pages/dapp/browser/preload.js

+105-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// !! if you change the location of this file, remember to change `extraResources` in package.json as well !!
22
/* eslint-disable max-classes-per-file */
33
/* eslint-disable */
4-
const { Buffer } = require('buffer');
5-
const { ipcRenderer } = require('electron');
4+
const { ipcRenderer, contextBridge } = require('electron');
65
const EventEmitter = require('events');
76

87
class RPCServer {
@@ -568,4 +567,107 @@ const providerConfig = {
568567
rpcUrl: 'https://evm.cronos.org',
569568
isDebug: true,
570569
};
571-
window.ethereum = new window.desktopWallet.Provider(providerConfig);
570+
571+
const provider = new Web3Provider(providerConfig);
572+
573+
ipcRenderer.on('getAddress', (event, args) => {
574+
const address = args[0];
575+
576+
contextBridge.exposeInMainWorld('ethereum', {
577+
address,
578+
ready: true,
579+
isDesktopWallet: true,
580+
setConfig: (config, emitChanges) => {
581+
provider.setConfig(config, emitChanges);
582+
},
583+
request: payload => {
584+
return provider.request(payload);
585+
},
586+
setAddress: address => {
587+
provider.setAddress(address);
588+
},
589+
sendResponse: (id, result) => {
590+
provider.sendResponse(id, result);
591+
},
592+
sendError: (id, error) => {
593+
provider.sendError(id, error);
594+
},
595+
eth_accounts: () => {
596+
return provider.eth_accounts();
597+
},
598+
eth_coinbase: () => {
599+
return provider.eth_coinbase();
600+
},
601+
net_version: () => {
602+
return provider.net_version();
603+
},
604+
eth_chainId: () => {
605+
return provider.eth_chainId();
606+
},
607+
eth_sign: payload => {
608+
return provider.eth_sign(payload);
609+
},
610+
personal_sign: payload => {
611+
return provider.personal_sign(payload);
612+
},
613+
personal_ecRecover: payload => {
614+
return provider.personal_ecRecover(payload);
615+
},
616+
eth_signTypedData: (payload, useV4) => {
617+
return provider.eth_signTypedData(payload, useV4);
618+
},
619+
eth_sendTransaction: payload => {
620+
return provider.eth_sendTransaction(payload);
621+
},
622+
eth_requestAccounts: payload => {
623+
return provider.eth_requestAccounts(payload);
624+
},
625+
wallet_watchAsset: payload => {
626+
return provider.wallet_watchAsset(payload);
627+
},
628+
wallet_addEthereumChain: payload => {
629+
return provider.wallet_addEthereumChain(payload);
630+
},
631+
wallet_switchEthereumChain: payload => {
632+
return provider.wallet_switchEthereumChain(payload);
633+
},
634+
isConnected: () => {
635+
return provider.isConnected();
636+
},
637+
enable: () => {
638+
return provider.enable();
639+
},
640+
send: payload => {
641+
return provider.send(payload);
642+
},
643+
sendAsync: (payload, callback) => {
644+
return provider.sendAsync(payload, callback);
645+
},
646+
addEventListener: (event, callback) => {
647+
provider.addListener(event, callback);
648+
},
649+
on: (event, callback) => {
650+
provider.on(event, callback);
651+
},
652+
once: (event, callback) => {
653+
provider.once(event, callback);
654+
},
655+
removeListener: (event, callback) => {
656+
provider.removeListener(event, callback);
657+
},
658+
removeAllListeners: event => {
659+
provider.removeAllListeners(event);
660+
},
661+
emit: (event, ...args) => {
662+
provider.emit(event, ...args);
663+
},
664+
})
665+
contextBridge.exposeInMainWorld('desktopWallet', {
666+
Provider: Web3Provider,
667+
postMessage: arg => {
668+
ipcRenderer.sendToHost('dapp', arg);
669+
},
670+
})
671+
672+
})
673+

src/pages/governance/components/ProposalView.tsx

+16-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Big from 'big.js';
44
import '../governance.less';
55
import 'antd/dist/antd.css';
66
// eslint-disable-next-line @typescript-eslint/no-unused-vars
7-
import { Layout, Radio, Button, Card, Progress, Form, InputNumber, Spin } from 'antd';
7+
import { Layout, Radio, Button, Card, Progress, Form, InputNumber, Spin, Alert } from 'antd';
88
import { LoadingOutlined } from '@ant-design/icons';
99
import { useRecoilValue, useRecoilState } from 'recoil';
1010
import { useTranslation } from 'react-i18next';
@@ -307,11 +307,22 @@ export const ProposalView = (props: any) => {
307307
{allProps?.proposal?.proposal_id}
308308
</div>
309309
</div>
310-
310+
{allProps.proposal?.content?.description.includes('http') ?
311+
<div className="warning">
312+
<Alert
313+
type="warning"
314+
message={t('governance.warning')}
315+
showIcon
316+
/>
317+
</div>
318+
: <></>}
311319
<div className="description">
312-
{allProps.proposal?.content?.description ? allProps.proposal?.content.description.split('\\n').map((p, i) => (
313-
<p key={i}>{p}</p>
314-
)) : <p key={0}>(No description)</p>}
320+
{allProps.proposal?.content?.description ?
321+
allProps.proposal?.content.description.split(/\n|\\n/).map((p, i) => (
322+
<p key={i}>{p}</p>
323+
))
324+
: <p key={0}>(No description)</p>
325+
}
315326
</div>
316327
<div className="item">
317328
{allProps.proposal?.status === ProposalStatuses.PROPOSAL_STATUS_VOTING_PERIOD ? (

src/pages/governance/governance.less

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
margin-bottom: 20px;
88
color: @font-color;
99
}
10+
.warning{
11+
margin-bottom: 20px;
12+
}
1013
.amount {
1114
.ant-form-item {
1215
margin: 0;

yarn.lock

+14-14
Original file line numberDiff line numberDiff line change
@@ -5547,9 +5547,9 @@ asap@~2.0.6:
55475547
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
55485548

55495549
asar@^3.1.0:
5550-
version "3.1.0"
5551-
resolved "https://registry.yarnpkg.com/asar/-/asar-3.1.0.tgz#70b0509449fe3daccc63beb4d3c7d2e24d3c6473"
5552-
integrity sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==
5550+
version "3.2.0"
5551+
resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221"
5552+
integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==
55535553
dependencies:
55545554
chromium-pickle-js "^0.2.0"
55555555
commander "^5.0.0"
@@ -6374,13 +6374,13 @@ buffer-crc32@~0.2.3:
63746374

63756375
buffer-equal@1.0.0:
63766376
version "1.0.0"
6377-
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz"
6378-
integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74=
6377+
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
6378+
integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==
63796379

63806380
buffer-fill@^1.0.0:
63816381
version "1.0.0"
63826382
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
6383-
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
6383+
integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
63846384

63856385
buffer-from@^1.0.0:
63866386
version "1.1.2"
@@ -7036,8 +7036,8 @@ colorette@^1.2.1, colorette@^1.2.2:
70367036

70377037
colors@1.0.3:
70387038
version "1.0.3"
7039-
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz"
7040-
integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
7039+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
7040+
integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==
70417041

70427042
combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
70437043
version "1.0.8"
@@ -7068,8 +7068,8 @@ command-line-usage@^6.1.0:
70687068

70697069
commander@2.9.0:
70707070
version "2.9.0"
7071-
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz"
7072-
integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
7071+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
7072+
integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==
70737073
dependencies:
70747074
graceful-readlink ">= 1.0.0"
70757075

@@ -8335,7 +8335,7 @@ diffie-hellman@^5.0.0:
83358335

83368336
dir-compare@^2.4.0:
83378337
version "2.4.0"
8338-
resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz"
8338+
resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631"
83398339
integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==
83408340
dependencies:
83418341
buffer-equal "1.0.0"
@@ -8731,7 +8731,7 @@ emoji-regex@^8.0.0:
87318731

87328732
emoji-regex@^9.0.0:
87338733
version "9.2.2"
8734-
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz"
8734+
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
87358735
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
87368736

87378737
emojis-list@^3.0.0:
@@ -10669,8 +10669,8 @@ graceful-fs@^4.2.9:
1066910669

1067010670
"graceful-readlink@>= 1.0.0":
1067110671
version "1.0.1"
10672-
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
10673-
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
10672+
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
10673+
integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==
1067410674

1067510675
growl@1.10.5:
1067610676
version "1.10.5"

0 commit comments

Comments
 (0)