|
1 | | -from threading import Thread |
2 | 1 | import socket |
3 | 2 | import rsa |
4 | 3 | import zlib |
5 | | -import sys |
6 | 4 | import time |
7 | 5 | import json |
| 6 | +import hashlib |
8 | 7 |
|
| 8 | +from threading import Thread |
9 | 9 | from rich import print |
10 | 10 |
|
11 | 11 | # Read config file |
|
30 | 30 | port: int = config_json["port"] |
31 | 31 | buffer: int = config_json["buffer"] |
32 | 32 | welcome_message: str = config_json["welcome_message"] |
| 33 | +protected_by_password: bool = config_json["protected_by_password"] |
| 34 | +password: str = config_json["password"] |
33 | 35 |
|
34 | 36 | # Create socket |
35 | 37 | server = socket.socket() |
36 | 38 |
|
37 | 39 | # Start listing |
38 | 40 | server.bind((ip, port)) |
| 41 | +print(f"[[green]![/green]] Listing: {ip}:{port}") |
39 | 42 | server.listen(32) |
40 | 43 |
|
41 | 44 |
|
@@ -187,19 +190,61 @@ def middle(self): |
187 | 190 |
|
188 | 191 | # If the length of the message is zero or content is "exit" |
189 | 192 | # Remove client connection |
190 | | - |
191 | | - if msg == b"/exit" or len(msg) <= 0: |
192 | | - self.remove_client(self.client) |
193 | | - break |
194 | | - |
| 193 | + |
195 | 194 | self.send_to_clients(msg) |
196 | 195 |
|
197 | 196 | except BaseException: |
198 | 197 | self.remove_client(self.client) |
199 | 198 | break |
200 | 199 |
|
201 | 200 | 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 | + |
203 | 248 | time.sleep(0.5) |
204 | 249 | send_keys = API.Send_keys( |
205 | 250 | self.public_key, |
@@ -235,37 +280,10 @@ def run(): |
235 | 280 |
|
236 | 281 | while True: |
237 | 282 | client, addr = server.accept() |
| 283 | + chat = Chat(client, private_key, public_key) |
238 | 284 |
|
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() |
269 | 287 |
|
270 | 288 | if __name__ == "__main__": |
271 | 289 | Main.run() |
0 commit comments