diff --git a/plugins/varo.py b/plugins/varo.py index f9cb972..4247e46 100644 --- a/plugins/varo.py +++ b/plugins/varo.py @@ -2,7 +2,9 @@ import json import account import requests import os -import dotenv + +if not os.path.exists("user_data"): + os.mkdir("user_data") # Plugin Data info = { @@ -17,7 +19,7 @@ functions = { "status":{ "name": "Check connection", "type": "dashboard", - "description": "You need to set varo_instance to the ICANN domain of the chosen Varo instance and varo_api to your varo API key before you can connect", + "description": "You need to login to the varo instance before you can use this function.", "params": {}, "returns": { "status": @@ -27,6 +29,28 @@ functions = { } } }, + "login":{ + "name": "Login to Varo", + "type": "default", + "description": "Login to Varo
Use the domain of the varo instance (eg. domains.hns.au) and API key from the dashboard.", + "params": { + "instance": { + "name":"Varo instance", + "type":"text" + }, + "api": { + "name":"API key", + "type":"text" + } + }, + "returns": { + "status": + { + "name": "Status of the function", + "type": "text" + } + } + }, "addDomain":{ "name": "Add domain", "type": "default", @@ -50,13 +74,18 @@ functions = { def status(params, authentication): # Try to connect to Varo - dotenv.load_dotenv() - api = os.getenv("varo_api") - instance = os.getenv("varo_instance") - - if not api or not instance: + if not os.path.exists("user_data/varo.json"): return {"status": "Missing Varo API or instance"} - + + with open("user_data/varo.json", "r") as f: + auth = json.load(f) + if not auth: + return {"status": "Missing Varo API or instance"} + if 'api' not in auth or 'instance' not in auth: + return {"status": "Missing Varo API or instance"} + api = auth["api"] + instance = auth["instance"] + headers = {"Authorization": f"Bearer {api}"} data = { "action": "getInfo" @@ -66,18 +95,49 @@ def status(params, authentication): return {"status": "Error connecting to Varo"} if response.json()["success"] != True: return {"status": "Error connecting to Varo"} + return {"status": f"Connected to {instance}"} + +def login(params, authentication): + # Verify the user has entered the correct details + instance = params["instance"] + api = params["api"] + + # Strip the https:// from the instance + instance = instance.replace("https://", "") + instance = instance.replace("http://", "") + + response = requests.post(f"https://{instance}/api", json={"action": "getInfo"}, headers={"Authorization": f"Bearer {api}"}) + if response.status_code != 200: + return {"status": "Error connecting to Varo"} + + if response.json()["success"] != True: + return {"status": "Error connecting to Varo"} + + auth = { + "instance": instance, + "api": api + } + # Save the API key to the varo.json file + with open("user_data/varo.json", "w") as f: + json.dump(auth, f) + return {"status": "Success"} def addDomain(params, authentication): # Add a domain to Varo domain = params["domain"] - dotenv.load_dotenv() - api = os.getenv("varo_api") - instance = os.getenv("varo_instance") - - if not api or not instance: + if not os.path.exists("user_data/varo.json"): return {"status": "Missing Varo API or instance"} + + with open("user_data/varo.json", "r") as f: + auth = json.load(f) + if not auth: + return {"status": "Missing Varo API or instance"} + if 'api' not in auth or 'instance' not in auth: + return {"status": "Missing Varo API or instance"} + api = auth["api"] + instance = auth["instance"] headers = {"Authorization": f"Bearer {api}"} data = {