various safeguards, minor fixes/improvements
This commit is contained in:
@@ -49,16 +49,17 @@ export async function find_payment(db: MongoClient, domain: string, send_to: str
|
|||||||
}
|
}
|
||||||
|
|
||||||
//todo: technically possible for there to be race condition with payment_already_pending
|
//todo: technically possible for there to be race condition with payment_already_pending
|
||||||
export async function create_payment(db: MongoClient, domain: string, send_to: string, receive_seed: string) {
|
export async function create_payment(db: MongoClient, domain: string, send_to: string, receive_seed: string): bool {
|
||||||
const price = get_price(domain.length);
|
const price = get_price(domain.length);
|
||||||
const payments = db.db("bns_backend").collection("payments");
|
const payments = db.db("bns_backend").collection("payments");
|
||||||
await payments.insertOne({
|
const result = await payments.insertOne({
|
||||||
domain,
|
domain,
|
||||||
receive_seed, //seed to receive payment from
|
receive_seed, //seed to receive payment from
|
||||||
send_to, //Domain Address (banano address) to send domain to after payment received
|
send_to, //Domain Address (banano address) to send domain to after payment received
|
||||||
price,
|
price,
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
});
|
});
|
||||||
|
return result.acknowledged;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -7,32 +7,40 @@
|
|||||||
let error: String = $state("");
|
let error: String = $state("");
|
||||||
let price: String = $state("");
|
let price: String = $state("");
|
||||||
|
|
||||||
|
let address_register_safeguard: bool = true;
|
||||||
|
|
||||||
function domain_keydown(event: KeyboardEvent) {
|
function domain_keydown(event: KeyboardEvent) {
|
||||||
let key = event.key.toLowerCase();
|
let key = event.key.toLowerCase();
|
||||||
if (!ALLOWED.includes(key)) {
|
if (!ALLOWED.includes(key)) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
} else {
|
|
||||||
price = "";
|
|
||||||
if (domain_content.length > 3) {
|
|
||||||
price = `Price: ${get_price(domain_content.length)} BAN`;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function domain_keyup() {
|
function domain_keyup(event: KeyboardEvent) {
|
||||||
|
if (domain_content.length > 3) {
|
||||||
|
price = `Price: ${get_price(domain_content.length)} BAN`;
|
||||||
|
} else {
|
||||||
|
price = "";
|
||||||
|
}
|
||||||
domain_content = domain_content.toLowerCase();
|
domain_content = domain_content.toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function domain_next() {
|
async function domain_next() {
|
||||||
|
error = "";
|
||||||
domain_content = domain_content.toLowerCase();
|
domain_content = domain_content.toLowerCase();
|
||||||
if (domain_content.length < 4) {
|
if (domain_content.length < 4) {
|
||||||
error = "Domain name must be more than 3 characters";
|
error = "Domain name must be more than 3 characters";
|
||||||
} else {
|
} else {
|
||||||
|
//safeguard to make people don't accidentally paste in their banano address and register that
|
||||||
|
if (domain_content.startsWith("ban_") && domain_content.length === 32 && address_register_safeguard) {
|
||||||
|
alert("It seems like you entered a Banano address instead of the .ban domain name you want to register. Are you sure you want to do this? Try again if so.");
|
||||||
|
address_register_safeguard = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
const resp = await (await fetch("/api/domain_issued?domain=" + domain_content)).json();
|
const resp = await (await fetch("/api/domain_issued?domain=" + domain_content)).json();
|
||||||
if (resp.issued) {
|
if (resp.issued) {
|
||||||
error = "Domain name already issued, choose another one";
|
error = `Domain name <a href="https://creeper.banano.cc/account/${domain_content}.ban">already issued</a>, choose another one`;
|
||||||
} else {
|
} else {
|
||||||
error = "";
|
|
||||||
goto("/register?domain=" + domain_content);
|
goto("/register?domain=" + domain_content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,7 +105,7 @@
|
|||||||
<input placeholder="Get your .ban on" maxlength="32" onkeydown={domain_keydown} onkeyup={domain_keyup} bind:value={domain_content} type="text"/><span>.ban</span><input onclick={domain_next} type="button" value="-->"/>
|
<input placeholder="Get your .ban on" maxlength="32" onkeydown={domain_keydown} onkeyup={domain_keyup} bind:value={domain_content} type="text"/><span>.ban</span><input onclick={domain_next} type="button" value="-->"/>
|
||||||
</div>
|
</div>
|
||||||
<span id="price">{price}</span>
|
<span id="price">{price}</span>
|
||||||
<span class="error">{error}</span>
|
<span class="error">{@html error}</span>
|
||||||
<div>
|
<div>
|
||||||
<h2>Supported by:</h2>
|
<h2>Supported by:</h2>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -23,7 +23,10 @@ export const POST: RequestHandler = async ({ request }) => {
|
|||||||
return error(500, "Payment for domain already pending, wait 5 minutes or so");
|
return error(500, "Payment for domain already pending, wait 5 minutes or so");
|
||||||
}
|
}
|
||||||
const payment_wallet = Wallet.gen_random_wallet();
|
const payment_wallet = Wallet.gen_random_wallet();
|
||||||
await create_payment(db, domain, get_address_from_public_key(send_to_pub_key), payment_wallet.seed);
|
const success = await create_payment(db, domain, get_address_from_public_key(send_to_pub_key), payment_wallet.seed);
|
||||||
|
if (!success) {
|
||||||
|
return error(500, "Server error, try again");
|
||||||
|
}
|
||||||
return json({
|
return json({
|
||||||
payment_address: payment_wallet.address,
|
payment_address: payment_wallet.address,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user