From 7172f448d6a7ddb33bd891e0d51cbf8eb0ed78e6 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Wed, 8 Nov 2023 12:32:05 +1100 Subject: [PATCH] feat: Add domain buying and gifting --- gift.py | 61 ++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++- templates/error.html | 2 +- 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/gift.py b/gift.py index f3321da..591cfbf 100644 --- a/gift.py +++ b/gift.py @@ -1,10 +1,19 @@ import os import dotenv import json +import requests +import pyotp +import time + dotenv.load_dotenv() loaded = False gifts = [] +nbcookie = os.getenv('cookie') +cookies = {"namebase-main": nbcookie} +nb_endpoint = "https://www.namebase.io/" + +max_price = 4 # Max price to buy a domain at (in HNS) def gift(name,email,referer, ip): @@ -51,4 +60,56 @@ def gift(name,email,referer, ip): with open(path, 'w') as f: json.dump(gifts, f) + headers = {"Accept": "application/json", "Content-Type": "application/json"} + params = {"recipientEmail": email, "senderName": "Woodburn Faucet", + "note": "Enjoy your free domain! - Woodburn Faucet"} + + names = requests.get(nb_endpoint + "/api/user/domains/owned?offset=0&sortKey=acquiredAt&sortDirection=desc&limit=100" + ,headers=headers, cookies=cookies) + if names.status_code != 200: + return "Error getting names:
" + names.text + + names = names.json() + if len(names['domains']) == 0: + domains_market = requests.get(nb_endpoint + "/api/domains/marketplace?offset=0&buyNowOnly=true&sortKey=price&sortDirection=asc&exclude=%2Cnumbers%2Chyphens%2Cunderscores&maxLength=10&offersOnly=false" + ,headers=headers, cookies=cookies) + if domains_market.status_code != 200: + return "Error getting names:
" + domains_market.text + + domains_market = domains_market.json() + if len(domains_market['domains']) == 0: + return "No domains available to gift
Check back in a few minutes" + + domain = domains_market['domains'][0]['name'] + print("Buying: " + domain,flush=True) + price = int(domains_market['domains'][0]['ammount']) + if price > max_price*1000000: + return "Domain price too high
Check back in a few minutes" + + + + payload = { + "listingId": domains_market['domains'][0]['id'] + } + buy = requests.post(nb_endpoint + "/api/v0/marketplace/"+domain+"/buynow",headers=headers,data=json.dumps(payload), cookies=cookies) + if buy.status_code != 200: + return "Error buying name:
" + buy.text + + + else: + domain = names['domains'][0]['name'] + + print("Gifting: " + domain,flush=True) + + # Add this name to gifts record + gifts[-1]['domain'] = domain + + + + send_name = requests.post(nb_endpoint + "/api/gift/" + domain.strip(),headers=headers,data=json.dumps(params), cookies=cookies) + + if send_name.status_code != 200: + return "Error sending gift:
" + send_name.text + + return True \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index f640785..d806e62 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ flask python-dotenv gunicorn -requests \ No newline at end of file +requests +pyotp \ No newline at end of file diff --git a/templates/error.html b/templates/error.html index 2e6b67a..3964afe 100644 --- a/templates/error.html +++ b/templates/error.html @@ -46,7 +46,7 @@ Claim a free Handshake domain">

Sorry there was an error with your transfer

-

{{error}}

+

{{error | safe}}

If you need any help with your domain you can ask in the Namebase discord server or by emailing my at faucet@nathan.woodburn.au