-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
80 lines (66 loc) · 2.39 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import socket
import threading
import sqlite3
import custom_functions.sql_funcs as sql_funcs
import custom_functions.server_func as server_func
import custom_functions.note as note
import os
import time
#TODO
# Create server-wide windows netcat checks for compatibility
# Leave comments on server functions, note functions, and sql helper functions
# Remove extra functions/move to correct classes
# Standardize response codes
def init_database_location(directory=None):
"""Takes in a directory and creates a database in that location"""
if directory is None:
directory = os.path.expanduser("~")
# print(filename)
else:
if not os.path.exists(directory):
os.makedirs(directory)
filename = os.path.join(directory, "notes-database.db")
os.environ['DATABASE_LOCATION'] = filename
sql_funcs.init_sql_vars()
server_func.init_server_vars()
note.init_note_vars()
def handle_client(client_socket):
server_func.clear_screen(client_socket)
client_socket.send("Welcome to the Online Notepad!\n\n".encode())
resp_code = -1
user_id = -1
while resp_code == -1:
resp_code = server_func.print_main_menu(client_socket)
user_id = resp_code
if resp_code == -2:
return
cont = True
while cont:
server_func.print_session_menu(client_socket)
client_socket.send("Please enter your choice: ".encode())
choice = client_socket.recv(1024).strip().decode()
opcode = server_func.handle_session_input(choice, user_id, client_socket)
if opcode == 4:
client_socket.send("Goodbye!".encode())
time.sleep(2)
client_socket.close()
return
server_func.clear_screen(client_socket)
client_socket.close()
def main():
init_database_location()
sql_funcs.check_database()
host = "0.0.0.0" # Bind to all available network interfaces
port = 12345
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((host, port))
server.listen(5)
print(f"[*] Listening on {host}:{port}")
while True:
client, addr = server.accept()
print(f"[*] Connection accepted from {addr[0]}:{addr[1]}")
client_handler = threading.Thread(target=handle_client, args=(client,))
client_handler.start()
if __name__ == "__main__":
main()