| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/usr/bin/env python3
- import os
- import json
- from http.server import BaseHTTPRequestHandler, HTTPServer
- from qmanager import qManager
- import urllib
- # Port on which server will run.
- PORT = 8080
- BASE_PATH="/backend/" #changes based on webserver
- FILE_PATH="/tmp/"
- class HTTPRequestHandler(BaseHTTPRequestHandler):
- q = qManager()
- def do_GET(self):
- if self.path==BASE_PATH:
- #self.wfile.write(bytes()) #fileHandle.read().encode()
- self.send_200()
- out=json.dumps(self.q.task_status())
- self.wfile.write(bytes(out,"utf-8")) #fileHandle.read().encode()
- return
- p=urllib.parse.unquote(self.path.replace(BASE_PATH,""))
- path=FILE_PATH+p
- print(path)
- #mime=mimetypes.guess_type(path) #fails on mobi, epub
- mime=""
- if p.endswith("mobi"):
- mime="application/x-mobipocket-ebook"
- if p.endswith("epub"):
- mime="application/epub+zip"
- if p.endswith("pdf"):
- mime="application/pdf"
- if p.endswith("html"):
- mime="text/html"
-
- self.send_response(200)
- self.send_header('Content-type', mime)
- self.send_header('Content-Disposition', 'attachment;filename="%s"'%p)
- self.end_headers()
- fp = open(path,'rb')
- while True:
- b = fp.read(8192)
- if b:
- self.wfile.write(b) #fileHandle.read().encode()
- else:
- break
- def send_400(self):
- self.send_response(400, 'NOT OK')
- self.send_header('Content-type', 'text/json')
- self.end_headers()
- def send_200(self):
- self.send_response(200)
- self.send_header('Content-type', 'text/json')
- self.end_headers()
- def do_POST(self):
- # Check if path is there.
- if self.path:
- length = self.headers['content-length']
- if length is None:
- self.send_400()
- return
- data = self.rfile.read(int(length))
- data = data.decode("utf-8")
- try:
- d=json.loads(data)
- except:
- print("no json")
- self.send_400()
- return
- if not "type" in d or not "book" in d:
- self.send_400()
- return
- if d["type"].upper()=="SEARCH":
- self.q.new_search(d["book"],d["extension"])
- self.send_200()
- return
- if d["type"]=="BOOK":
- self.q.new_dl(d["book"])
- self.send_200()
- return
- if __name__ == '__main__':
- HTTPDeamon = HTTPServer(('', PORT), HTTPRequestHandler)
- print("Listening at port", PORT)
- try:
- HTTPDeamon.serve_forever()
- except KeyboardInterrupt:
- pass
- HTTPDeamon.server_close()
- print("Server stopped")
|