└── PythonWebServer ├── WebServerCreator.py └── consts.py /PythonWebServer/WebServerCreator.py: -------------------------------------------------------------------------------- 1 | try: 2 | import sys 3 | import socket 4 | import platform 5 | import threading 6 | import webbrowser 7 | from flask import Flask 8 | from typing import List 9 | from time import strftime 10 | from datetime import date 11 | from subprocess import run 12 | from consts import (CONST_COLORS , HOST , PORT , CONTENT_TYPE , ENCODE , HTTP_TYPE) 13 | from builtins import (str , int ,Exception , open) 14 | from tkinter import font 15 | from tkinter.tix import Button 16 | from tkinter.ttk import (Label , Entry , Notebook , Frame , Combobox) 17 | from tkinter.__init__ import (Tk , StringVar , Text) 18 | from tkinter.constants import (RAISED , FLAT , BOTH , CENTER , RIDGE , END) 19 | from http.server import (BaseHTTPRequestHandler , HTTPServer) 20 | 21 | except: 22 | raise Exception 23 | 24 | 25 | class StartFlaskServerClass: 26 | def __init__(self) -> str: 27 | self.flaskServer = Flask(__name__) 28 | 29 | 30 | class WebServerCreationClass: 31 | def __init__(self) -> str: 32 | super(WebServerCreationClass , self).__init__() 33 | self.root = Tk() 34 | self.root.title("WebServer Creator") 35 | self.root.geometry("{0}x{1}".format(350 , 550)) 36 | self.root.resizable(0 , 0) 37 | self.root.config(bg = CONST_COLORS[0][0] , cursor = None) 38 | self.tabDashboard = Notebook(master = self.root) 39 | self.firstTab = Frame(self.tabDashboard) 40 | self.secondTab = Frame(self.tabDashboard) 41 | self.outputTab = Frame(self.tabDashboard) 42 | self.svEntryPort = StringVar(self.firstTab) 43 | self.svOptionChs = StringVar(self.firstTab) 44 | self.sock = socket.socket(socket.AF_INET , socket.SOCK_STREAM) 45 | self.sock.bind((HOST , PORT)) 46 | self.sock.listen(5) 47 | self.getTime = strftime("%H:%M:%S %p") 48 | self.optionChoices : List[str] = [ 49 | "Nginx" , 50 | "Ngrok" , 51 | "Python http Server" , 52 | "Django Server" , 53 | "Flask Server" , 54 | "Socket Server" , 55 | "Default (Socket Server)" 56 | ] 57 | self.svEntryPort.set(PORT) 58 | self.svOptionChs.set(self.optionChoices[5]) 59 | 60 | 61 | def click_event(param): 62 | if (param == "click"): 63 | new_cached = self.textToTemplate.get(1.0 , END) 64 | with open(r"C:\Users\Shervin\Desktop\Scripts\PythonWebServer\static\index.html" , "w") as F: 65 | F.write(new_cached) 66 | F.close() 67 | 68 | while True: 69 | csock , caddr = self.sock.accept() 70 | print("Connection From : {0}".format(str(caddr))) 71 | 72 | req = csock.recv(1024) 73 | print(req) 74 | 75 | csock.sendall(str.encode(HTTP_TYPE , ENCODE)) 76 | csock.sendall(str.encode(CONTENT_TYPE , ENCODE)) 77 | csock.sendall(str.encode("\n\r")) 78 | 79 | with open(r"C:\Users\Shervin\Desktop\Scripts\PythonWebServer\static\index.html" , "r") as R: 80 | for i in R.readlines(): 81 | print("Sent" , repr(i)) 82 | csock.sendall(str.encode(f" {i} " , ENCODE)) 83 | continue 84 | 85 | 86 | self.tabDashboard.add( 87 | child = self.firstTab , 88 | text = "Config" 89 | ) 90 | 91 | self.tabDashboard.add( 92 | child = self.secondTab , 93 | text = "Mode" 94 | ) 95 | 96 | self.tabDashboard.add( 97 | child = self.outputTab , 98 | text = "Output/Terminal" 99 | ) 100 | 101 | self.firstTabLabel = Label( 102 | master = self.firstTab , 103 | text = None , 104 | background = CONST_COLORS[0][0] , 105 | width = 82 106 | ) 107 | 108 | self.labelPort = Label( 109 | master = self.firstTab , 110 | text = "Port :" , 111 | background = CONST_COLORS[0][0] , 112 | foreground = CONST_COLORS[0][1] , 113 | font = ("Vani" , 22 , font.BOLD) , 114 | relief = FLAT 115 | ) 116 | 117 | self.labelServer = Label( 118 | master = self.firstTab , 119 | text = "Server :" , 120 | background = CONST_COLORS[0][0] , 121 | foreground = CONST_COLORS[0][1] , 122 | font = ("Vani" , 22 , font.BOLD) , 123 | relief = FLAT 124 | ) 125 | 126 | self.secondTabLabel = Label( 127 | master = self.secondTab , 128 | text = None , 129 | background = CONST_COLORS[0][0] , 130 | width = 82 131 | ) 132 | 133 | self.outputtabLabel = Label( 134 | master = self.outputTab , 135 | text = None , 136 | background = CONST_COLORS[0][0] , 137 | width = 82 138 | ) 139 | 140 | self.entryPort = Entry( 141 | master = self.firstTab , 142 | textvariable = self.svEntryPort , 143 | background = CONST_COLORS[0][1] , 144 | foreground = CONST_COLORS[0][0] , 145 | font = ("Vani" , 13 , font.BOLD) , 146 | justify = CENTER , 147 | width = 25 148 | ) 149 | 150 | self.optionSelect = Combobox( 151 | master = self.firstTab , 152 | textvariable = self.svOptionChs , 153 | values = self.optionChoices , 154 | font = ("Vani" , 13 , font.BOLD) , 155 | justify = CENTER 156 | ) 157 | 158 | self.htmlLabel = Label( 159 | master = self.firstTab , 160 | text = "HTML" , 161 | background = CONST_COLORS[0][0] , 162 | foreground = CONST_COLORS[0][1] , 163 | font = ("Vani" , 22 , font.BOLD) , 164 | relief = RIDGE , 165 | borderwidth = 8 , 166 | width = 12 , 167 | justify = CENTER 168 | ) 169 | 170 | self.textToTemplate = Text( 171 | master = self.firstTab , 172 | width = 36 173 | ) 174 | 175 | self.outputTerminal = Text( 176 | master = self.outputTab , 177 | width = 43 , 178 | font = ("Courier" , 15 , font.BOLD) , 179 | background = CONST_COLORS[0][3] , 180 | foreground = CONST_COLORS[0][2] 181 | ) 182 | 183 | self.outputTerminal.insert(1.0 , f"Date : {date.today()}\nTime : {self.getTime}") 184 | 185 | self.createServerButton = Button( 186 | master = self.firstTab , 187 | text = "Create Server" , 188 | command = lambda : click_event("click") , 189 | bg = CONST_COLORS[0][4] , 190 | fg = CONST_COLORS[0][1] , 191 | font = ("Vani" , 15 , font.BOLD) , 192 | relief = RAISED , 193 | bd = 5 194 | ) 195 | 196 | self.tabDashboard.pack( 197 | expand = 1 , 198 | fill = BOTH 199 | ) 200 | 201 | self.firstTabLabel.place( 202 | x = 0 , 203 | y = 0 , 204 | height = 600 205 | ) 206 | 207 | self.secondTabLabel.place( 208 | x = 0 , 209 | y = 0 , 210 | height = 600 211 | ) 212 | 213 | self.outputtabLabel.place( 214 | x = 0 , 215 | y = 0 , 216 | height = 600 217 | ) 218 | 219 | self.labelPort.place( 220 | x = 0 , 221 | y = 0 222 | ) 223 | 224 | self.labelServer.place( 225 | x = 0 , 226 | y = 60 227 | ) 228 | 229 | self.entryPort.place( 230 | x = 90 , 231 | y = 8 232 | ) 233 | 234 | self.optionSelect.place( 235 | x = 120 , 236 | y = 68 237 | ) 238 | 239 | self.createServerButton.place( 240 | x = 100 , 241 | y = 450 242 | ) 243 | 244 | self.htmlLabel.place( 245 | x = 78 , 246 | y = 110 247 | ) 248 | 249 | self.textToTemplate.place( 250 | x = 25 , 251 | y = 160 , 252 | height = 275 253 | ) 254 | 255 | self.outputTerminal.place( 256 | x = 0 , 257 | y = 0 , 258 | height = 524 259 | ) 260 | 261 | self.htmlLabel.configure(anchor = CENTER) 262 | 263 | self.root.mainloop() 264 | 265 | 266 | 267 | if (platform.system()[0].upper() == "W"): 268 | WebServerCreationClass() 269 | else: 270 | sys.exit(0) -------------------------------------------------------------------------------- /PythonWebServer/consts.py: -------------------------------------------------------------------------------- 1 | from typing import (Dict , List) 2 | from builtins import (int , str) 3 | 4 | 5 | CONST_COLORS : List[Dict[int , str]] = [ 6 | { 7 | 0 : "#1D2934" , 8 | 1 : "#ffffff" , 9 | 2 : "#00C300" , 10 | 3 : "#000000" , 11 | 4 : "#33485B" 12 | } 13 | ] 14 | 15 | HOST : str = "" 16 | PORT : int = 8080 17 | CONTENT_TYPE : str = "Content-type: text/html\n" 18 | HTTP_TYPE : str = "HTTP/1.0 200 OK\n" 19 | ENCODE : str = "iso-8859-1" 20 | --------------------------------------------------------------------------------