web.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/env python3
  2. import os
  3. import json
  4. from http.server import BaseHTTPRequestHandler, HTTPServer
  5. from qmanager import qManager
  6. import urllib
  7. # Port on which server will run.
  8. PORT = 8080
  9. BASE_PATH="/backend/" #changes based on webserver
  10. FILE_PATH="/tmp/"
  11. class HTTPRequestHandler(BaseHTTPRequestHandler):
  12. q = qManager()
  13. def do_GET(self):
  14. if self.path==BASE_PATH:
  15. #self.wfile.write(bytes()) #fileHandle.read().encode()
  16. self.send_200()
  17. out=json.dumps(self.q.task_status())
  18. self.wfile.write(bytes(out,"utf-8")) #fileHandle.read().encode()
  19. return
  20. p=urllib.parse.unquote(self.path.replace(BASE_PATH,""))
  21. path=FILE_PATH+p
  22. print(path)
  23. #mime=mimetypes.guess_type(path) #fails on mobi, epub
  24. mime=""
  25. if p.endswith("mobi"):
  26. mime="application/x-mobipocket-ebook"
  27. if p.endswith("epub"):
  28. mime="application/epub+zip"
  29. if p.endswith("pdf"):
  30. mime="application/pdf"
  31. if p.endswith("html"):
  32. mime="text/html"
  33. self.send_response(200)
  34. self.send_header('Content-type', mime)
  35. self.send_header('Content-Disposition', 'attachment;filename="%s"'%p)
  36. self.end_headers()
  37. fp = open(path,'rb')
  38. while True:
  39. b = fp.read(8192)
  40. if b:
  41. self.wfile.write(b) #fileHandle.read().encode()
  42. else:
  43. break
  44. def send_400(self):
  45. self.send_response(400, 'NOT OK')
  46. self.send_header('Content-type', 'text/json')
  47. self.end_headers()
  48. def send_200(self):
  49. self.send_response(200)
  50. self.send_header('Content-type', 'text/json')
  51. self.end_headers()
  52. def do_POST(self):
  53. # Check if path is there.
  54. if self.path:
  55. length = self.headers['content-length']
  56. if length is None:
  57. self.send_400()
  58. return
  59. data = self.rfile.read(int(length))
  60. data = data.decode("utf-8")
  61. try:
  62. d=json.loads(data)
  63. except:
  64. print("no json")
  65. self.send_400()
  66. return
  67. if not "type" in d or not "book" in d:
  68. self.send_400()
  69. return
  70. if d["type"].upper()=="SEARCH":
  71. self.q.new_search(d["book"],d["extension"])
  72. self.send_200()
  73. return
  74. if d["type"]=="BOOK":
  75. self.q.new_dl(d["book"])
  76. self.send_200()
  77. return
  78. if __name__ == '__main__':
  79. HTTPDeamon = HTTPServer(('', PORT), HTTPRequestHandler)
  80. print("Listening at port", PORT)
  81. try:
  82. HTTPDeamon.serve_forever()
  83. except KeyboardInterrupt:
  84. pass
  85. HTTPDeamon.server_close()
  86. print("Server stopped")