Compare commits

...

4 Commits

Author SHA1 Message Date
randomuser d35296ef16 move log assignment and friends to be in-scope 2021-07-20 02:59:59 -05:00
randomuser b3a665448a add simple logging 2021-07-20 02:59:01 -05:00
randomuser c9f0dce189 add a simple logger 2021-07-20 02:55:32 -05:00
randomuser 08588b967f clean up the code 2021-07-20 02:44:48 -05:00
1 changed files with 39 additions and 7 deletions

46
esgd.py
View File

@ -1,9 +1,7 @@
import socketserver
import subprocess
import os
host = "localhost"
port = 77
import time
class GopherError(BaseException): pass
class RequestError(GopherError): pass
@ -42,6 +40,7 @@ class GopherLine:
try: self.port = split[3]
except IndexError:
if location == True: self.port = str(port)
def render(self):
return "{}{}\t{}\t{}\t{}".format(
self.item,
@ -51,6 +50,31 @@ class GopherLine:
self.port
)
class Logger:
def __init__(self, file=None):
if file != None: self.fd = open(file, "a+")
else: self.fd = False
def time(self):
return int(time.time())
def write(self, msg):
if self.fd: self.fd.write("{}\n")
def log(self, msg):
ct = self.time()
self.write("[{}] {}".format(str(ct), msg))
print("[{}] {}".format(str(ct), msg))
def warn(self, msg):
ct = self.time()
self.write("! [{}] {}".format(str(ct), msg))
print("! [{}] {}".format(str(ct), msg))
def error(self, msg):
ct = self.time()
self.write("!! [{}] {}".format(str(ct), msg))
print("!! [{}] {}".format(str(ct), msg))
self.close()
raise SystemExit
def close(self):
self.fd.close()
class GopherServerLogic:
def recieveRequest(self):
data = b""
@ -97,10 +121,10 @@ class GopherServerLogic:
fd.close()
return ret
def sendFileArray(self, arr):
def sendFileArray(self, fileArray):
[self.request.sendall(
(i.rstrip() + "\r\n").encode("utf-8")
) for i in arr]
) for i in fileArray]
self.request.sendall(b".\r\n")
def cgi(self, file, query):
@ -135,6 +159,7 @@ class GopherServerLogic:
if self.fileCGI(file): fa = self.cgi(file, query)
elif self.fileSendable(file): fa = self.fileToFileArray(file)
else:
log.log("selector not found")
self.notFound()
return
if gph: fa = self.gopherRenderer(fa)
@ -142,19 +167,26 @@ class GopherServerLogic:
class GopherHandler(socketserver.BaseRequestHandler, GopherServerLogic):
def handle(self):
log.log("request from {}".format(self.client_address[0]))
decoded = self.recieveRequest()
try:
parsed = self.requestParser(decoded)
try: parsed = self.requestParser(decoded)
except RequestError:
log.log("request was invalid")
self.invalid()
return
try: file = self.returnRelative(parsed[0])
except RequestError:
log.log("selector not found")
self.notFound()
return
log.log("serving {}".format(file[0]))
self.serveFile(file[0], parsed[1], file[1])
log = Logger()
host = "localhost"
port = 77
if __name__ == "__main__":
with socketserver.TCPServer((host, port), GopherHandler) as server:
server.serve_forever()