-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
Links
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
>
-
+
>
+
+
-
-
+ }
+ });
+ }
-
\ No newline at end of file
+ });
+ }
+
\ No newline at end of file
diff --git a/Client/widget.html b/Client/widget.html
deleted file mode 100644
index 8aadb50..0000000
--- a/Client/widget.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/readme.md b/readme.md
index 1669e20..b25db2e 100644
--- a/readme.md
+++ b/readme.md
@@ -4,9 +4,8 @@
[Demo video](https://storage.gabe.rocks/LibreSolutionsNetwork/Interverse%20Demo.mp4)
## A decentralized discovery service that allows you to easily discover like-minded sites.
-Interverse aims to enable [small-tech](https://small-tech.org#small-tech-is).
-That means
+
* No complicated software to run (beyond an existing website)
* No Cryptocurrency/NFT
* Scalable
@@ -37,8 +36,10 @@ https://libresolutions.network/Interverse?url=your.website
### Can I create my own client?
Please do!
-## If you need any help getting started feel free to get in touch with me by e-mailing gabriel@libresolutions.network
+If you need any help getting started feel free to get in touch with me by e-mailing gabriel@libresolutions.network
+---
+Compatible with [Discover](https://codeberg.org/onasaft/Discover)
diff --git a/server/interverse-proxy.py b/server/interverse-proxy.py
new file mode 100644
index 0000000..69944a1
--- /dev/null
+++ b/server/interverse-proxy.py
@@ -0,0 +1,22 @@
+from flask import Flask,request,redirect
+import json,requests,time
+import simple_cache
+
+
+
+app = Flask('interverse-proxy')
+cache = simple_cache.Cache()
+
+
+
+@app.route("/", methods=['GET'])
+def interverse_proxy():
+ url = request.args.get('url')
+ if url == None:
+ return redirect("https://codeberg.org/gabe/Interverse",307)
+ return "See
Interverse"
+ data = cache.load_data(url)
+ return json.dumps(data)
+
+if __name__ == '__main__':
+ app.run()
\ No newline at end of file
diff --git a/server/simple_cache.py b/server/simple_cache.py
new file mode 100644
index 0000000..f09ecb9
--- /dev/null
+++ b/server/simple_cache.py
@@ -0,0 +1,62 @@
+import requests,time,json
+ideal_delta = 60*5 #5 minutes
+
+crawler_header = {'User-agent': 'interverse-crawler','info':'https://libresolutions.network/videos/interverse-demo-1/'}
+schemes = ['http://','https://']
+locations = [
+ '/.well-known/discover.json',
+ '/.well-known/interverse',
+ '/interverse.json',
+ '/discover.json'
+ ]
+
+
+
+class Cache:
+ def __init__(self,delta=None):
+ if delta==None:
+ self.delta = ideal_delta
+ else:
+ self.delta = delta
+ self.links={}
+ # link = key:{data,time}
+
+
+ def load_data(self,url):
+ data = None
+ t = time.time()
+ if url in self.links:
+ if t - self.links[url]['time'] <= self.delta:
+ print(f"Using cached result for {url}")
+ return self.links[url]['data']
+ for s in schemes:
+ for l in locations:
+ try:
+ data = requests.get(s+url+l,headers=crawler_header,timeout=3).json()
+ if l.find('discover'):
+ #translate discover to interverse
+ data = json.loads(json.dumps(data).replace("preview_connections","connection_groups"))
+ print(f"Interverse connection found at {l}")
+ t = time.time()
+ self.links[url] = {
+ 'time':t,
+ 'data':data,
+ }
+
+ return data
+ except:
+ pass
+ if data != None:
+ t = time.time()
+ self.links[url] = {
+ 'time':t,
+ 'data':data,
+ }
+
+ if data == None:
+ #If no data is returned, wait longer before attempting again
+ self.links[url] = {
+ 'data':None,
+ 'time':t+ideal_delta
+ }
+ return data