diff --git a/xmrnodes/app.py b/xmrnodes/app.py index ca3281d..82c1fbe 100644 --- a/xmrnodes/app.py +++ b/xmrnodes/app.py @@ -7,6 +7,7 @@ from datetime import datetime from flask import Flask, request, redirect from flask import render_template, flash, url_for from urllib.parse import urlparse +from xmrnodes.helpers import is_monero from xmrnodes.forms import SubmitNode from xmrnodes.models import Node @@ -65,7 +66,7 @@ def add(): if Node.select().where(Node.url == url).exists(): flash("This node is already in the database.") else: - flash("Seems like a valid node. Added to the database and will check soon.") + flash("Seems like a valid node URL. Added to the database and will check soon.") node = Node(url=url) node.save() return redirect("/") @@ -79,7 +80,7 @@ def validate(): logging.info(f"Attempting to validate {node.url}") if is_onion: logging.info("onion address found") - node.tor = True + node.is_tor = True try: r = requests.get(node.url + "/get_info", timeout=3) r.raise_for_status() @@ -92,6 +93,7 @@ def validate(): node.available = True node.validated = True node.datetime_checked = now + node.is_monero = is_monero(node.url) node.save() else: logging.info("unexpected nettype") diff --git a/xmrnodes/helpers.py b/xmrnodes/helpers.py index ee65fb4..e82661b 100644 --- a/xmrnodes/helpers.py +++ b/xmrnodes/helpers.py @@ -2,11 +2,16 @@ from requests import get as r_get def is_monero(url): data = {"method": "get_block_header_by_height", "params": {"height": 0}} + known_hashes = [ + "418015bb9ae982a1975da7d79277c2705727a56894ba0fb246adaabb1f4632e3", #mainnet + "48ca7cd3c8de5b6a4d53d2861fbdaedca141553559f9be9520068053cda8430b", #testnet + "76ee3cc98646292206cd3e86f74d88b4dcc1d937088645e9b0cbca84b7ce74eb" #stagenet + ] try: r = r_get(url + "/json_rpc", json=data) r.raise_for_status() assert "result" in r.json() - is_xmr = r.json()["result"]["block_header"]["hash"] == "418015bb9ae982a1975da7d79277c2705727a56894ba0fb246adaabb1f4632e3" + is_xmr = r.json()["result"]["block_header"]["hash"] in known_hashes return is_xmr except: return False diff --git a/xmrnodes/models.py b/xmrnodes/models.py index af0a317..70d8b20 100644 --- a/xmrnodes/models.py +++ b/xmrnodes/models.py @@ -9,10 +9,11 @@ db = SqliteDatabase(f"{data_dir}/sqlite.db") class Node(Model): id = AutoField() url = CharField() - tor = BooleanField(default=False) + is_tor = BooleanField(default=False) available = BooleanField(default=False) validated = BooleanField(default=False) nettype = CharField(null=True) + is_monero = BooleanField(default=False) datetime_entered = DateTimeField(default=datetime.now) datetime_checked = DateTimeField(default=None, null=True) datetime_failed = DateTimeField(default=None, null=True) diff --git a/xmrnodes/templates/index.html b/xmrnodes/templates/index.html index 993bced..be6e36f 100644 --- a/xmrnodes/templates/index.html +++ b/xmrnodes/templates/index.html @@ -8,9 +8,27 @@

Add Node

- {% for node in nodes %} - {{ node.url }}
- {% endfor %} + + + + + + + + + + {% for node in nodes %} + + + + + + + + + {% endfor %} +
URLTorAvailableNetworkIs MoneroLast Checked
{{ node.url }}{{ node.is_tor }}{{ node.available }}{{ node.nettype }}{{ node.is_monero }}{{ node.datetime_checked }}
+
{{ form.csrf_token }}