From e30aceb0a98e510bf6bb45cac71f6f2456dafb3c Mon Sep 17 00:00:00 2001
From: Nathan Woodburn <github@nathan.woodburn.au>
Date: Fri, 7 Mar 2025 14:11:03 +1100
Subject: [PATCH] feat: Add varo login

---
 example.py  | 175 ----------------------------------------------------
 hnslinks.py |  86 ++++++++++++++++++++++++++
 template.py |  32 ----------
 3 files changed, 86 insertions(+), 207 deletions(-)
 delete mode 100644 example.py
 create mode 100644 hnslinks.py
 delete mode 100644 template.py

diff --git a/example.py b/example.py
deleted file mode 100644
index bcf5cfa..0000000
--- a/example.py
+++ /dev/null
@@ -1,175 +0,0 @@
-import json
-import account
-import requests
-
-
-# Plugin Data
-info = {
-    "name": "Example Plugin",
-    "description": "This is a plugin to be used as an example",
-    "version": "1.0",
-    "author": "Nathan.Woodburn/"
-}
-
-
-# Functions
-functions = {
-    "search":{
-        "name": "Search Owned",
-        "type": "default",
-        "description": "Search for owned domains containing a string",
-        "params": {
-            "search": {
-                "name":"Search string",
-                "type":"text"
-            }
-        },
-        "returns": {
-            "domains": 
-            {
-                "name": "List of owned domains",
-                "type": "list"
-            }
-        }
-    },
-    "transfer":{
-        "name": "Bulk Transfer Domains",
-        "type": "default",
-        "description": "Transfer domains to another wallet",
-        "params": {
-            "address": {
-                "name":"Address to transfer to",
-                "type":"address"
-            },
-            "domains": {
-                "name":"List of domains to transfer",
-                "type":"longText"
-            }
-        },
-        "returns": {
-            "hash": {
-                "name": "Hash of the transaction",
-                "type": "tx"
-            },
-            "address":{
-                "name": "Address of the new owner",
-                "type": "text"
-            }
-        }
-    },
-    "dns":{
-        "name": "Set DNS for Domains",
-        "type": "default",
-        "description": "Set DNS for domains",
-        "params": {
-            "domains": {
-                "name":"List of domains to set DNS for",
-                "type":"longText"
-            },
-            "dns": {
-                "name":"DNS",
-                "type":"dns"
-            }
-        },
-        "returns": {
-            "hash": {
-                "name": "Hash of the transaction",
-                "type": "tx"
-            },
-            "dns":{
-                "name": "DNS",
-                "type": "dns"
-            }
-        }
-    },
-    "niami": {
-        "name": "Niami info",
-        "type": "domain",
-        "description": "Check the domains niami rating",
-        "params": {},
-        "returns": {
-            "rating": 
-            {
-                "name": "Niami Rating",
-                "type": "text"
-            }
-        }
-    },
-    "niamiSearch": {
-        "name": "Niami info",
-        "type": "search",
-        "description": "Check the domains niami rating",
-        "params": {},
-        "returns": {
-            "rating": 
-            {
-                "name": "Niami Rating",
-                "type": "text"
-            }
-        }
-    },
-    "connections":{
-        "name": "HSD Connections",
-        "type": "dashboard",
-        "description": "Show the number of connections the HSD node is connected to",
-        "params": {},
-        "returns": {
-            "connections": 
-            {
-                "name": "HSD Connections",
-                "type": "text"
-            }
-        }
-    }
-}
-
-def check(params, authentication):
-    domains = params["domains"]
-    domains = domains.splitlines()
-
-    wallet = authentication.split(":")[0]
-    owned = account.getDomains(wallet)
-    # Only keep owned domains ["name"]
-    ownedNames = [domain["name"] for domain in owned]
-
-    domains = [domain for domain in domains if domain in ownedNames]
-    
-
-    return {"domains": domains}
-
-def search(params, authentication):
-    search = params["search"].lower()
-    wallet = authentication.split(":")[0]
-    owned = account.getDomains(wallet)
-    # Only keep owned domains ["name"]
-    ownedNames = [domain["name"] for domain in owned]
-
-    domains = [domain for domain in ownedNames if search in domain]
-
-    return {"domains": domains}
-
-
-def transfer(params, authentication):
-    address = params["address"]
-    return {"hash":"f921ffe1bb01884bf515a8079073ee9381cb93a56b486694eda2cce0719f27c0","address":address}
-
-def dns(params,authentication):
-    dns = params["dns"]
-    return {"hash":"f921ffe1bb01884bf515a8079073ee9381cb93a56b486694eda2cce0719f27c0","dns":dns}
-
-def niami(params, authentication):
-    domain = params["domain"]
-    response = requests.get(f"https://api.handshake.niami.io/domain/{domain}")
-    data = response.json()["data"]
-    if 'rating' not in data:
-        return {"rating":"No rating found."}
-    rating = str(data["rating"]["score"]) + " (" + data["rating"]["rarity"] + ")"
-    return {"rating":rating}
-
-def niamiSearch(params, authentication):
-    return niami(params, authentication)
-
-
-def connections(params,authentication):
-    outbound = account.hsd.getInfo()['pool']['outbound']
-    return {"connections": outbound}
\ No newline at end of file
diff --git a/hnslinks.py b/hnslinks.py
new file mode 100644
index 0000000..1898a23
--- /dev/null
+++ b/hnslinks.py
@@ -0,0 +1,86 @@
+import json
+import account
+import requests
+
+
+# Plugin Data
+info = {
+    "name": "HNS Links",
+    "description": "This is a plugin to quickly setup a HNS Links site",
+    "version": "1.0",
+    "author": "Nathan.Woodburn/"
+}
+
+
+# Functions
+functions = {
+    "login":{
+        "name": "Login to Varo Instance",
+        "type": "default",
+        "description": "You need to connect to a varo instance to setup the dns for domains",
+        "params": {
+            "instance": {
+                "name":"Varo Instance",
+                "type":"text"
+            },
+            "key": {
+                "name":"API Key",
+                "type":"text"
+            }
+        },
+        "returns": {
+            "status": 
+            {
+                "name": "Status",
+                "type": "text"
+            }
+        }
+    },
+    "dns":{
+        "name": "Set Onchain DNS for Domains",
+        "type": "default",
+        "description": "Set onchain DNS for domains before HNS Links can work",
+        "params": {
+            "domain": {
+                "name":"Domain",
+                "type":"text"
+            }
+        },
+        "returns": {
+            "hash": {
+                "name": "Hash of the transaction",
+                "type": "tx"
+            }
+        }
+    }
+}
+
+def login(params, authentication):
+    instance = params["instance"]
+    key = params["key"]
+    
+    # Test Connection
+    if instance == "":
+        return {"status":"Please enter a valid instance"}
+    instance = instance.replace("https://","")
+    instance = instance.replace("http://","")
+    if instance[-1] == "/":
+        instance = instance[:-1]
+
+    try:
+        # Authorization: Bearer <API Key>
+        response = requests.post("https://" + instance + "/api", json={"action":"getInfo"}, headers={"Authorization": "Bearer " + key})
+        if response.status_code != 200:
+            return {"status":"Error connecting to instance"}
+    except:
+        return {"status":"Error connecting to instance"}
+        
+    with open("user_data/hnslinks.json", "w") as f:
+        json.dump({"instance":instance,"key":key},f)
+    return {"status":"Connected to " + instance}
+
+
+
+def dns(params,authentication):
+    dns = params["dns"]
+    return {"hash":"f921ffe1bb01884bf515a8079073ee9381cb93a56b486694eda2cce0719f27c0"}
\ No newline at end of file
diff --git a/template.py b/template.py
deleted file mode 100644
index 53ed5e1..0000000
--- a/template.py
+++ /dev/null
@@ -1,32 +0,0 @@
-import json
-import account
-import requests
-
-# Plugin Data
-info = {
-    "name": "Plugin Template",
-    "description": "Plugin Description",
-    "version": "1.0",
-    "author": "Nathan.Woodburn/"
-}
-
-# Functions
-functions = {
-    "main":{
-        "name": "Function name",
-        "type": "default",
-        "description": "Description",
-        "params": {},
-        "returns": {
-            "status": 
-            {
-                "name": "Status of the function",
-                "type": "text"
-            }
-        }
-    }
-}
-
-def main(params, authentication):
-    return {"status": "Success"}
-    
\ No newline at end of file