Skip to content

Commit cd3fedb

Browse files
committed
feat: create wallet from secret phrase in url
1 parent bf95414 commit cd3fedb

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

src/App.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import FAQ from './pages/FAQ';
1818
import ConfigDevice from './pages/ConfigDevice';
1919
import Passcode from './pages/Passcode';
2020
import { getServerIpAddress } from "./api";
21+
import { parseQueryParams } from "./utils/utils";
2122

2223
global.Buffer = require('buffer').Buffer;
2324

@@ -67,7 +68,15 @@ function App() {
6768
const vpnTimeUsedInMin = parseInt(localStorage.getItem("vpnTimeUsedInMin") || "0");
6869
_vpnTimeUsedInMin.current = vpnTimeUsedInMin;
6970

70-
await createOrGetWallet();
71+
const queryParams = parseQueryParams(window.location.search);
72+
let secretPhrase: string | null = null;
73+
74+
if (window.location.search && queryParams) {
75+
secretPhrase = queryParams.get("secretPhrase");
76+
secretPhrase = secretPhrase ? secretPhrase.replaceAll("-", " ") : null;
77+
}
78+
79+
await createOrGetWallet(secretPhrase);
7180
listenProfileVer(setProfile);
7281

7382
if (!window?.webkit) {

src/services/wallets.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ let isGetFaucetProcess = false;
2020

2121
let getFaucetRoop = 0;
2222

23-
const createOrGetWallet = async () => {
23+
const createOrGetWallet = async (secretPhrase: string | null) => {
2424
await checkStorage();
2525

2626
if (!CoNET_Data || !CoNET_Data?.profiles) {
27-
const acc = createKeyHDWallets();
27+
const acc = createKeyHDWallets(secretPhrase);
2828

2929
const key = await createGPGKey("", "", "");
3030

@@ -123,10 +123,11 @@ const createOrGetWallet = async () => {
123123
return profile;
124124
};
125125

126-
const createKeyHDWallets = () => {
126+
const createKeyHDWallets = (secretPhrase: string | null) => {
127127
try {
128-
const root = ethers.Wallet.createRandom();
129-
return root;
128+
if (!secretPhrase) return ethers.Wallet.createRandom();
129+
130+
return ethers.Wallet.fromPhrase(secretPhrase);
130131
} catch (ex) {
131132
return null;
132133
}

src/utils/utils.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,26 @@ export const getRemainingTime = (timestamp: number): string => {
137137
"0"
138138
)}:${String(seconds).padStart(2, "0")}`;
139139
};
140+
141+
export const parseQueryParams = (queryString: string) => {
142+
const params = new Map();
143+
144+
// Remove the leading '?' if present
145+
const cleanQueryString = queryString.startsWith("?")
146+
? queryString.slice(1)
147+
: queryString;
148+
149+
// Split the string into key-value pairs
150+
const pairs = cleanQueryString.split("&");
151+
152+
for (const pair of pairs) {
153+
// Split each pair into key and value
154+
const [key, value] = pair.split("=").map(decodeURIComponent);
155+
// Only add if key is not undefined
156+
if (key) {
157+
params.set(key, value || "");
158+
}
159+
}
160+
161+
return params;
162+
};

0 commit comments

Comments
 (0)