Distraction! I've got to do with my `file-server`. Previously i deploy cloud
servers with no docker.
Therefore the
sshfs , a remote filesystem over SSH, works best! But then i found out
that
it does not work as-is in docker service.
Ok, lets not crunch too much and deal with it a.s.a.p, since i have to resume
back my
coding-journals regarding my bitcoint-programming
(cryptocurreny). So i decided to
use python (https.server) a minimal http
server that would work great, and it is :D.
The intuition is to utilized the os.listdir() and os.path.isfile(), so
real_path = os.getenv('PREFIX_PATH') + '/' + post_data
ls = os.listdir(real_path)
files = []
for filenm in ls:
if os.path.isfile(real_path + '/' + filenm) == True:
print("File is ", filenm)
files.append(l)
else:
pass
pass
Oke now we have the files reader handler, we stitch all of them in
http.server
from http.server import BaseHTTPRequestHandler, HTTPServer from dotenv import load_dotenv import os import logging import json load_dotenv('./.env') ''' TODO sanitize the incoming data make sure does not traverse ''' class S(BaseHTTPRequestHandler): def _set_response(self, **kwargs): self.send_response(200) if 'output_type' in kwargs and kwargs['output_type'] == 'json': self.send_header('Content-type', 'application/json') elif 'output_type' in kwargs and kwargs['output_type'] == 'text': self.send_header('Content-type', 'text/plain') else: self.send_header('Content-type', 'text/html') self.end_headers() pass def do_POST(self): content_length = int(self.headers['Content-length']) post_data = self.rfile.read(content_length).decode('utf-8') logging.info("POST Req, \nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n" %( str(self.path), str(self.headers), post_data ) ) real_path = os.getenv('PREFIX_PATH') + '/' + post_data ls = os.listdir(real_path) files = [] for l in ls: if os.path.isfile(real_path + '/' + l) == True: print("File is ", l) files.append(l) else: pass pass self._set_response() self.wfile.write(json.dumps(files).encode('utf-8')) def run(server_class=HTTPServer, handler_class=S, port=8080): logging.basicConfig(level=logging.INFO, filename='file_server.log', format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s', datefmt='%H:%M:%S.%f' ) server_address = ('', port) httpd = server_class(server_address, handler_class) logging.info('Starting httpd...\n') try: httpd.serve_forever() except KeyboardInterrupt: pass httpd.server_close() logging.info('Stopping httpd...\n') if __name__ == '__main__': from sys import argv if len(argv) == 2: run(port=int(argv[1])) else: run()
The result at PHP endpoint would need to be parsed with json_decode().
Comments