diff --git a/chainlink.py b/chainlink.py
index ebd5f33..ffe82e5 100755
--- a/chainlink.py
+++ b/chainlink.py
@@ -1,25 +1,34 @@
#!/usr/bin/env python
"""Utilize crypto domains DNS and either redirect, or display information."""
-from bottle import Bottle, run, response, request
+from bottle import Bottle, run, response, request, static_file
import json
import requests
import json2html
-VERSION = '0.0.1'
+VERSION = '0.1.0'
app = Bottle()
def domainLookup(domain):
- apibase = 'https://unstoppabledomains.com/api/v1/'
- dnslookup = requests.get(apibase + domain)
- domainJSON = json.loads(dnslookup.content)
- print(domainJSON)
- return domainJSON
+ """Return a dictionary from JSON results of API call
+ or return False if there is an error
+ """
+ try:
+ apibase = 'https://unstoppabledomains.com/api/v1/'
+ dnslookup = requests.get(apibase + domain)
+ if dnslookup.status_code == 200:
+ domainInfo = json.loads(dnslookup.content)
+ return domainInfo
+ else:
+ return False
+ except requests.exceptions.ConnectionError:
+ return False
@app.route("/")
def root():
+ """Index page, just displays information about URL formatting"""
host = request.get_header('host')
helptext = f"""
General format is {host}/<domain>/<action>
@@ -49,10 +58,22 @@ def root():
@app.route("//")
@app.route("//")
def redirectDomain(domain, action=None):
+ """Handle the actual redirect for the domain queried"""
lookupResult = domainLookup(domain)
- redirect_url = lookupResult['ipfs']['redirect_domain']
- html = lookupResult['ipfs']['html']
- if action == 'redir':
+ if lookupResult:
+ redirect_url = lookupResult['ipfs']['redirect_domain']
+ ipfs_hash = lookupResult['ipfs']['html']
+ else:
+ return f"Unable to get info for {domain}"
+ if action is None or action == 'html':
+ response.status = 302
+ if not ipfs_hash.startswith('/ip'):
+ ipfshash = "ipfs/" + ipfs_hash
+ else:
+ ipfshash = ipfs_hash
+ response.set_header('Location',
+ f"https://cloudflare-ipfs.com/{ipfshash}")
+ elif action == 'redir':
try:
if not redirect_url.startswith('http'):
redirect_url = "http://" + redirect_url
@@ -60,17 +81,15 @@ def redirectDomain(domain, action=None):
response.set_header('Location', redirect_url)
except KeyError:
return f'Did not find a redirect for {domain}'
- elif action is None or action == 'html':
- response.status = 302
- if not html.startswith('/ip'):
- ipfshash = "ipfs/" + html
- else:
- ipfshash = html
- response.set_header('Location',
- f"https://cloudflare-ipfs.com/{ipfshash}")
elif action == 'raw':
return json2html.json2html.convert(json=lookupResult)
+@app.route("/favicon.ico")
+def favicon():
+ """Display a favicon to make the errors go away :)"""
+ return static_file('favicon.ico', root='images')
+
+
if __name__ == "__main__":
run(app, host='0.0.0.0', port='5000', reloader=True)
diff --git a/images/favicon.ico b/images/favicon.ico
new file mode 100644
index 0000000..f62f4e6
Binary files /dev/null and b/images/favicon.ico differ