#!/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\ Url:\n\ \n\ \n\
    \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.")