Update server.py

This commit is contained in:
Nova Cat 2025-01-12 22:31:01 -08:00
parent 31223530d7
commit 81249ca89c

View file

@ -1,5 +1,5 @@
#!/usr/bin/python3 #!/usr/bin/python3
import asyncio, traceback import asyncio, traceback, socket, ssl
from flask import Flask, request, redirect from flask import Flask, request, redirect
from hypercorn.config import Config from hypercorn.config import Config
from hypercorn.asyncio import serve from hypercorn.asyncio import serve
@ -33,7 +33,51 @@ def relay():
code = "<h1>Something went wrong...</h1>\n" code = "<h1>Something went wrong...</h1>\n"
title = "Something went wrong..." title = "Something went wrong..."
try: try:
raise Exception("Not implemented") gsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
gemsocket = ssl.wrap_socket(gsocket)
gemsocket.connect((url, 1965))
gemsocket.send(bytes("gemini://" + url + "\r\n", "UTF-8"))
received = ""
while True:
gemresponse = gemsocket.recv(2048)
if gemresponse:
received += gemresponse.decode()
else:
break
received = received.replace("\r", "")
firstline = True
redirected = False
gemtext = True
code = ""
for i in received.split("\n"):
if firstline:
if i.split(" ")[0][0] == "3":
return redirect("/gem?gemini=" + i.split(" ")[1])
elif i.split(" ")[0][0] != "2":
return f'<!DOCTYPE html>\n<html><head><meta charset="UTF-8"><link rel="stylesheet" href="https://swee.codes/style.css"><title>Something went wrong...</title></head><body><h1>Something went wrong...</h1><p>The specified Gemini server returned a status of: {i}</p></body></html>'
else:
firstline = False
if i.split(" ")[1] != "text/gemini":
return f'<!DOCTYPE html>\n<html><head><meta charset="UTF-8"><link rel="stylesheet" href="https://swee.codes/style.css"><title>Something went wrong...</title></head><body><h1>Something went wrong...</h1><p>This path returned a file that isn\'t Gemtext, which Gem2Browser doesn\'t support downloading files.</p></body></html>'
else:
if i[0:1] == "# ":
if title == "Something went wrong...":
title = i[2:]
temp = i[2:]
code += f"<h1>{temp}</h1>\n"
elif i[0:2] == "## "
temp = i[3:]
code += f"<h2>{temp}</h2>\n"
elif i[0:3] == "### ":
temp = i[4:]
code += f"<h3>{temp}</h3>\n"
elif i[0:1] == "* ":
temp = i[2:]
code += f"<ul><li>{temp}</li></ul>"
else:
code += f"<p>{code}</p>\n"
if title == "Something went wrong...":
title = "gemini://" + url
except: except:
code += traceback.format_exc() code += traceback.format_exc()
return f'<!DOCTYPE html>\n<html><head><meta charset="UTF-8"><link rel="stylesheet" href="https://swee.codes/style.css"><title>{title}</title></head><body>{code}</body></html>' return f'<!DOCTYPE html>\n<html><head><meta charset="UTF-8"><link rel="stylesheet" href="https://swee.codes/style.css"><title>{title}</title></head><body>{code}</body></html>'