Enhance private key validation for wallet recovery and improve error messaging
This commit is contained in:
parent
bb30be548a
commit
c40e09a794
74
index.html
74
index.html
@ -2345,11 +2345,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for TON/FLO/BTC private key format (WIF - Wallet Import Format)
|
// Check for TON/FLO/BTC private key format (WIF - Wallet Import Format)
|
||||||
const base58Regex = /^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/;
|
const base58Regex =
|
||||||
if (base58Regex.test(input) && input.length >= 51 && input.length <= 56) {
|
/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/;
|
||||||
|
if (
|
||||||
|
base58Regex.test(input) &&
|
||||||
|
input.length >= 51 &&
|
||||||
|
input.length <= 56
|
||||||
|
) {
|
||||||
// Only accept private keys with specific prefixes that can be converted to TON
|
// Only accept private keys with specific prefixes that can be converted to TON
|
||||||
const validPrivateKeyPrefixes = ['R',, 'K', 'L', 'T'];
|
const validPrivateKeyPrefixes = ["R", "K", "L", "T"];
|
||||||
if (validPrivateKeyPrefixes.some(prefix => input.startsWith(prefix))) {
|
if (
|
||||||
|
validPrivateKeyPrefixes.some((prefix) => input.startsWith(prefix))
|
||||||
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false; // Reject other Base58 strings (like BTC addresses)
|
return false; // Reject other Base58 strings (like BTC addresses)
|
||||||
@ -2898,6 +2905,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validation function for recover wallet (only private keys,)
|
||||||
|
function isValidRecoverPrivateKey(input) {
|
||||||
|
// Check if it's a hex private key (64 or 128 characters) - TON format
|
||||||
|
const hexOnly = /^[0-9a-fA-F]+$/.test(input);
|
||||||
|
if (hexOnly && (input.length === 64 || input.length === 128)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for TON/FLO/BTC private key format (WIF - Wallet Import Format)
|
||||||
|
const base58Regex =
|
||||||
|
/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/;
|
||||||
|
if (
|
||||||
|
base58Regex.test(input) &&
|
||||||
|
input.length >= 51 &&
|
||||||
|
input.length <= 56
|
||||||
|
) {
|
||||||
|
// Only accept private keys with specific prefixes for TON/FLO/BTC
|
||||||
|
const validPrivateKeyPrefixes = ["R", "K", "L", "T"];
|
||||||
|
if (
|
||||||
|
validPrivateKeyPrefixes.some((prefix) => input.startsWith(prefix))
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Recover wallet functionality
|
// Recover wallet functionality
|
||||||
async function recoverWallet() {
|
async function recoverWallet() {
|
||||||
const privateKeyInput = document
|
const privateKeyInput = document
|
||||||
@ -2913,6 +2948,27 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate private key format
|
||||||
|
if (!isValidRecoverPrivateKey(privateKeyInput)) {
|
||||||
|
output.innerHTML = `
|
||||||
|
<div class="error-state">
|
||||||
|
<div class="error-icon">
|
||||||
|
<i class="fas fa-exclamation-triangle"></i>
|
||||||
|
</div>
|
||||||
|
<div class="error-message">
|
||||||
|
<h3>Invalid Private Key Format</h3>
|
||||||
|
<p>Please enter a valid private key (TON/FLO/BTC format).</p>
|
||||||
|
<p>Addresses and other formats are not supported.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
showNotification(
|
||||||
|
"Invalid private key format - only TON/FLO/BTC private keys supported",
|
||||||
|
"error"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Show loading state
|
// Show loading state
|
||||||
const originalHTML = button.innerHTML;
|
const originalHTML = button.innerHTML;
|
||||||
button.disabled = true;
|
button.disabled = true;
|
||||||
@ -2921,7 +2977,7 @@
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
let wallet;
|
let wallet;
|
||||||
if (typeof tonCrypto !== "undefined" ) {
|
if (typeof tonCrypto !== "undefined") {
|
||||||
wallet = await tonCrypto.recoverFromInput(privateKeyInput);
|
wallet = await tonCrypto.recoverFromInput(privateKeyInput);
|
||||||
}
|
}
|
||||||
const tonData = wallet.TON || wallet;
|
const tonData = wallet.TON || wallet;
|
||||||
@ -3045,11 +3101,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="error-message">
|
<div class="error-message">
|
||||||
<h3>Recovery Failed</h3>
|
<h3>Recovery Failed</h3>
|
||||||
<p>Please check that you've entered a valid private key in the correct format.</p>
|
<p>Unable to recover address from the provided private key. Please ensure you've entered a valid TON/FLO/BTC private key.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
showNotification("Failed to recover ", "error");
|
showNotification(
|
||||||
|
"Failed to recover address from private key",
|
||||||
|
"error"
|
||||||
|
);
|
||||||
} finally {
|
} finally {
|
||||||
button.disabled = false;
|
button.disabled = false;
|
||||||
button.innerHTML = originalHTML;
|
button.innerHTML = originalHTML;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user