Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 808bac3

Browse files
authored
Add files via upload
1 parent da0d8a8 commit 808bac3

File tree

1 file changed

+56
-38
lines changed

1 file changed

+56
-38
lines changed

server/main.py

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from threading import Thread
21
import socket
32
import rsa
43
import zlib
5-
import sys
64
import time
75
import json
6+
import hashlib
87

8+
from threading import Thread
99
from rich import print
1010

1111
# Read config file
@@ -30,12 +30,15 @@
3030
port: int = config_json["port"]
3131
buffer: int = config_json["buffer"]
3232
welcome_message: str = config_json["welcome_message"]
33+
protected_by_password: bool = config_json["protected_by_password"]
34+
password: str = config_json["password"]
3335

3436
# Create socket
3537
server = socket.socket()
3638

3739
# Start listing
3840
server.bind((ip, port))
41+
print(f"[[green]![/green]] Listing: {ip}:{port}")
3942
server.listen(32)
4043

4144

@@ -187,19 +190,61 @@ def middle(self):
187190

188191
# If the length of the message is zero or content is "exit"
189192
# Remove client connection
190-
191-
if msg == b"/exit" or len(msg) <= 0:
192-
self.remove_client(self.client)
193-
break
194-
193+
195194
self.send_to_clients(msg)
196195

197196
except BaseException:
198197
self.remove_client(self.client)
199198
break
200199

201200
def run(self):
202-
API.send_buffer(self.client, buffer)
201+
try:
202+
username_exist = False
203+
password_md5 = hashlib.md5(password.encode()).hexdigest()
204+
if protected_by_password:
205+
self.client.send("protected".encode())
206+
user_passwd = self.client.recv(1024).decode()
207+
if user_passwd == password_md5:
208+
self.client.send("/accepted".encode())
209+
else:
210+
self.client.send("/exit".encode())
211+
self.client.close()
212+
213+
else:
214+
self.client.send("no_protected".encode())
215+
216+
nickname = self.client.recv(buffer).decode()
217+
218+
# Check username existing
219+
220+
for list_nickname in nicknames:
221+
# If username_exist == False
222+
if not username_exist:
223+
if nickname == list_nickname:
224+
username_exist = True
225+
226+
# If username_exist == False
227+
if not username_exist:
228+
# Send message: "accepted" to client
229+
self.client.send("/accepted".encode())
230+
print("[[yellow]?[/yellow]] Client connected")
231+
232+
nicknames.append(nickname)
233+
clients.append(self.client)
234+
235+
else:
236+
# Send message: "exit" to client
237+
self.client.send("/exit".encode())
238+
self.client.close()
239+
except:
240+
pass
241+
242+
try:
243+
API.send_buffer(self.client, buffer)
244+
245+
except:
246+
pass
247+
203248
time.sleep(0.5)
204249
send_keys = API.Send_keys(
205250
self.public_key,
@@ -235,37 +280,10 @@ def run():
235280

236281
while True:
237282
client, addr = server.accept()
283+
chat = Chat(client, private_key, public_key)
238284

239-
nickname = client.recv(buffer).decode()
240-
241-
# Check username existing
242-
243-
for list_nickname in nicknames:
244-
# If username_exist == False
245-
if not username_exist:
246-
if nickname == list_nickname:
247-
username_exist = True
248-
249-
# If username_exist == False
250-
if not username_exist:
251-
# Send message: "accepted" to client
252-
client.send("/accepted".encode())
253-
print("[[yellow]?[/yellow]] Client connected")
254-
255-
nicknames.append(nickname)
256-
clients.append(client)
257-
258-
chat = Chat(client, private_key, public_key)
259-
260-
multi_conn = Thread(target=chat.run)
261-
multi_conn.start()
262-
else:
263-
# Send message: "exit" to client
264-
client.send("/exit".encode())
265-
client.close()
266-
# Reset username_exist
267-
username_exist = False
268-
285+
multi_conn = Thread(target=chat.run)
286+
multi_conn.start()
269287

270288
if __name__ == "__main__":
271289
Main.run()

0 commit comments

Comments
 (0)