#!/usr/bin/env python3.9
import http.server
from http.server import SimpleHTTPRequestHandler
import os
import json
import ssl
import hashlib
import subprocess

class CORSRequestHandler (SimpleHTTPRequestHandler):
    def end_headers (self):
        self.send_header('Access-Control-Allow-Origin', '*')
        self.send_header("Access-Control-Allow-Methods", "POST,OPTIONS")
        SimpleHTTPRequestHandler.end_headers(self)

    def do_OPTIONS(self):
        self.send_response(200, "ok")
        self.end_headers()

    def do_POST(self):
        try:
            content_len = int(self.headers.get('content-length', 0))
            post_body = self.rfile.read(content_len)
            jsonPayload=json.loads(post_body.decode('utf8'));
            hashValue=hashlib.sha1(jsonPayload['code'].encode('utf8')).hexdigest()
            text_file = open("./pythonCode/"+hashValue, "w")
            text_file.write(jsonPayload['code'])
            text_file.close()
            answer={'path':'users/OEEL/pythonCode:'+hashValue}
            answer=json.JSONEncoder().encode(answer)

            

            subprocess.run(["git", "add", "./"+hashValue],cwd=r'./pythonCode')
            subprocess.run(["git", "commit", "-m", "add "+hashValue],cwd=r'./pythonCode')
            subprocess.run(["git", "push"],cwd=r'./pythonCode')

            self.send_response(200)
            self.send_header("Content-type", "application/json; charset=utf-8")
            self.send_header("Content-Length", len(answer))
            self.end_headers()
            print(answer)
            self.wfile.write(answer.encode('utf-8'));
        except Exception as e:
            self.send_error(500, "Server Error")
            raise e
            
 
PORT = 18615
server_address = ("", PORT)

server = http.server.ThreadingHTTPServer
handler = CORSRequestHandler
print("Serveur actif sur le port :", PORT)

httpd = server(server_address, handler)
# httpd.socket = ssl.wrap_socket (httpd.socket,
#         keyfile="../ssl/privkey.pem",
#         certfile='../ssl/fullchain.pem', server_side=True)

httpd.serve_forever()