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

Commit c4a16ad

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

File tree

1 file changed

+77
-22
lines changed

1 file changed

+77
-22
lines changed

client/main.py

Lines changed: 77 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@
66
import zlib
77
import random
88
import threading
9+
import hashlib
910

1011
from rich import print
1112
from rich.console import Console
1213
from rich.tree import Tree
1314
from rich.align import Align
1415

16+
from anonfile import AnonFile
17+
1518
global buffer
1619

1720
# Vars
1821
console = Console()
22+
anon = AnonFile()
1923
s = socket.socket()
2024
buffer = 1024
2125

22-
2326
"""
2427
def cls:
2528
Clear terminal screen
@@ -33,7 +36,6 @@ def cls():
3336
else:
3437
os.system("clear")
3538

36-
3739
class API:
3840
"""
3941
class Chat:
@@ -137,10 +139,10 @@ def banner(self):
137139
def get_server(self):
138140

139141
server_ip = console.input(
140-
"[b]Insert server address[/b] [purple]>>[/purple] ")
142+
"[b]Insert server address[/b] :laptop_computer: : ")
141143

142144
server_port = int(
143-
console.input("[b]Insert server port[/b] [purple]>>[/purple] "))
145+
console.input("[b]Insert server port[/b] : "))
144146

145147
# If server_ip == "local"... change server_ip to 127.0.0.1
146148

@@ -152,13 +154,18 @@ def get_server(self):
152154

153155
def get_username(self):
154156
username = console.input(
155-
"[b]Insert your username[/b] [purple]>>[/purple] ")
157+
"[b]Insert your username[/b] :ID: : ")
156158

157159
# Random color set
158160
color = self.random_color()
159161
username_styled = f"<[{color}]{username}[/{color}]>"
160162
return username, username_styled
161163

164+
def get_password(self):
165+
password = console.input("[b]Insert password[/b] :locked_with_key: : ")
166+
# Encrypt password
167+
return hashlib.md5(password.encode()).hexdigest()
168+
162169
def start(self):
163170
self.banner()
164171
ip, port = self.get_server()
@@ -187,6 +194,14 @@ def __init__(self, chat_api, username_styled, username) -> None:
187194
self.username_styled = username_styled
188195
self.username = username
189196

197+
def help_cmd(self):
198+
docs = """
199+
/help show the command list
200+
/nick show your nickname
201+
/upload upload your file
202+
"""
203+
print(docs)
204+
190205
def receive(self):
191206
while True:
192207
try:
@@ -197,21 +212,40 @@ def receive(self):
197212
def write(self):
198213
try:
199214
while True:
200-
msg = input()
201-
202-
# Remove line up
203-
sys.stdout.write("\033[F")
215+
msg = input("")
216+
try:
217+
msg_splited = msg.split()
218+
219+
# Remove line up
220+
sys.stdout.write("\033[F")
221+
222+
if (len(msg_splited[0].strip()) > 0):
223+
if msg_splited[0] == "/help":
224+
self.help_cmd()
225+
226+
elif msg_splited[0] == "/nick":
227+
print(self.username)
228+
229+
elif msg_splited[0] == "/upload":
230+
try:
231+
upload = anon.upload(msg_splited[1], progressbar=False)
232+
print("<[green][i]You[/i][/green]>" + " [b]Upload: [/b] " + str(upload.url.geturl()))
233+
self.chat_api.send(self.username_styled + " [b]Upload:[/b] " + str(upload.url.geturl()))
234+
except IndexError:
235+
print("Usage: /upload <path>")
236+
except FileNotFoundError:
237+
print("File not found")
238+
239+
elif not msg_splited[0].startswith("/"):
240+
self.chat_api.send(self.username_styled + " " + msg)
241+
242+
print("<[green][i]You[/i][/green]> " + msg)
243+
except IndexError:
244+
pass
204245

205-
if (len(msg.strip()) > 0):
206-
match msg:
207-
case "/nick":
208-
print(self.username)
209-
case _:
210-
self.chat_api.send(self.username_styled + " " + msg)
211-
212-
print("<[green][i]You[/i][/green]> " + msg)
213246
except KeyboardInterrupt:
214247
s.send("/exit".encode())
248+
sys.exit(1)
215249

216250
def run(self):
217251
receive_process = threading.Thread(target=self.receive)
@@ -234,6 +268,9 @@ def get_buffer:
234268
def get_welcome_message:
235269
Get welcome message from server
236270
271+
def send_password:
272+
Send password for login on server
273+
237274
def run:
238275
Where the code will start
239276
"""
@@ -242,18 +279,28 @@ def __init__(self) -> None:
242279
pass
243280

244281
def connect(self):
282+
ui = UI()
245283
while True:
246284
try:
247285
s.connect((self.ip, self.port))
248286
except ConnectionRefusedError:
249287
cls()
250288
print("[red]ERROR[/red]: Connection refused")
251-
UI = Main.UI()
252-
self.ip, self.port = UI.get_server()
253-
self.username, self.username_styled = UI.get_username()
289+
self.ip, self.port = ui.get_server()
290+
self.username, self.username_styled, = ui.get_username()
291+
is_protected = s.recv(1024).decode()
292+
if is_protected == "protected":
293+
self.password = ui.get_password()
294+
self.send_password(self.password)
295+
254296
else:
255297
break
256298

299+
is_protected = s.recv(1024).decode()
300+
if is_protected == "protected":
301+
self.password = ui.get_password()
302+
self.send_password(self.password)
303+
257304
# Send username to server and wait 0.5s
258305
self.send_username(self.username)
259306
time.sleep(0.5)
@@ -289,18 +336,26 @@ def send_username(self, username: str):
289336
s.close()
290337
quit()
291338

339+
def send_password(self, password: str):
340+
s.send(password.encode())
341+
confirm = s.recv(1024).decode()
342+
# Confirm: /exit or /accepted
343+
if confirm != "/accepted":
344+
print("[red]ERROR[/red]: Incorrect password")
345+
s.close()
346+
quit()
347+
292348
def get_buffer(self):
293349
return int(s.recv(buffer).decode())
294350

295351
def get_welcome_message(self):
296-
print(Align(self.chat_api.recv(1024), "center"))
352+
print(Align(self.chat_api.recv(buffer), "center"))
297353

298354
def run(self):
299355
ui = UI()
300356
self.ip, self.port, self.username, self.username_styled = ui.start()
301357
self.connect()
302358

303-
304359
if __name__ == "__main__":
305360
main = Main()
306361
main.run()

0 commit comments

Comments
 (0)