#!/usr/bin/env python3
from http.server import BaseHTTPRequestHandler, HTTPServer
import datetime
from time import perf_counter
import os
import json
import urllib.parse
import configuration
import socket
import requests
import re
import mangaParser
from userio import *
server = None
csvFilename = None
connectionResults = None
class MyServer(BaseHTTPRequestHandler):
def log_message(self, format, *args):
# To silence the default output of server (too verbose)
return
def do_GET(self):
global csvFilename
global csvFilenameTemp
global connectionResults
rootdir = 'pages/static/'
csvFilename = rootdir + server['csv']
csvFilenameTemp = rootdir + server['csvTemp']
if '/list.html' in self.path:
page=[]
data_begin = ""
with open(configuration.get_pageBegin(),'r') as fStart:
data_begin += fStart.read().replace( 'CSTAPPNAME', server['name'] )
data_end = ""
with open(configuration.get_pageEnd(),'r') as fEnd:
data_end += fEnd.read().replace( 'CSTAPPNAME', server['name'] ).replace( 'CSTAPPVERSION', server['version'] )
data_page = ""
with open("list.html", "rt") as f:
lines=f.readlines()
for line in lines:
data_page += "
"+line.split("@")[1]+""
f.close()
page.append(data_begin)
page.append(data_page)
page.append(data_end)
content = ''.join(page)
self.send_response(200)
self.send_header("Content-type", "text/html")
self.send_header('Server',server['name']+" v"+server['version'])
self.end_headers()
self.wfile.write(content.encode('utf-8'))
elif not os.path.exists(rootdir + self.path) or self.path == '/index.html' or self.path == '/':
if self.headers['X-Real-IP'] is None:
say("From: "+self.client_address[0]+" GET Received : "+self.path)
else:
say("From: "+self.headers['X-Real-IP']+" GET Received : "+self.path)
page=[]
data_begin = ""
with open(configuration.get_pageBegin(),'r') as fStart:
data_begin += fStart.read().replace( 'CSTAPPNAME', server['name'] )
data_end = ""
with open(configuration.get_pageEnd(),'r') as fEnd:
data_end += fEnd.read().replace( 'CSTAPPNAME', server['name'] ).replace( 'CSTAPPVERSION', server['version'] )
s = self.path
urlArgs = urllib.parse.parse_qs(s[2:])
url = None
if "url" in urlArgs:
url = urlArgs['url'][0]
opacity=-1
if "opacity" in urlArgs:
opacity = urlArgs['opacity'][0]
pageJump = 1
if "page" in urlArgs:
pageJump = urlArgs['page'][0]
data_page = ""
#Forging response
#if configuration.get_debug() != 0:
# data_page += "Request: "+self.path+"
\n"
# data_page += ""+json.dumps(urlArgs)+"\n"
if not url is None:
data_page = mangaParser.readManga(url,opacity,pageJump)
else:
try:
with open(server['favorite'], "rt") as f:
lines=f.readlines()
for line in lines:
data_page += ""+line+""
f.close()
except:
pass
data_form = "\n"
data_page += data_form
page.append(data_begin)
page.append(data_page)
page.append(data_end)
content = ''.join(page)
self.send_response(200)
self.send_header("Content-type", "text/html")
self.send_header('Server',server['name']+" v"+server['version'])
self.end_headers()
self.wfile.write(content.encode('utf-8'))
elif not os.path.exists(rootdir + self.path):
self.send_header('Server',server['name']+" v"+server['version'])
self.send_error(404, 'file not found')
else:
try:
#say(self.path)
f = open(rootdir + self.path,'rb') #open requested file
self.send_response(200)
if self.path.endswith('.css'):
self.send_header('Content-type','text/css')
elif self.path.endswith('.bmp'):
self.send_header('Content-type','image/x-ms-bmp')
elif self.path.endswith('.png'):
self.send_header('Content-type','image/png')
elif self.path.endswith('.jpg'):
self.send_header('Content-type','image/jpeg')
else:
self.send_header('Content-type','text/html')
self.send_header('Server',server['name']+" v"+server['version'])
self.end_headers()
self.wfile.write(f.read())
f.close()
return
except IOError:
self.send_header('Server',server['name']+" v"+server['version'])
self.send_error(404, 'file not found')
if __name__ == "__main__":
#global server
server = configuration.get_server()
say(server['name']+" v"+server['version'])
webServer = HTTPServer((server['address'], server['port']), MyServer)
say("Server started http://%s:%s" % (server['address'], server['port']))
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")