Repository navigation
Expand file tree
/
Copy pathSocketHandler.py
More file actions
100 lines (97 loc) · 4.97 KB
/
Copy pathSocketHandler.py
File metadata and controls
100 lines (97 loc) · 4.97 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Socket Handler For Clients
import Database
import os
class SocketHandler:
def __init__(self, ServerSocket, Address):
self.ServerSocket = ServerSocket
self.Address = Address
self.dbHandle = Database.DatabaseHandler()
self.message = ""
self.answer = ""
self.canUpload = False
self.canDownload = False
def EngageClient(self):
if self.AskCredentials() == True:
self.AskFlags()
self.message = "option"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
while True:
self.answer = self.ServerSocket.recv(1024)
self.answer = self.answer.decode(encoding='ascii')
if self.answer == "list":
self.results = self.dbHandle.Get_Data()
self.message = str(len(self.results))
self.ServerSocket.send(self.message.encode(encoding='ascii'))
for row in self.results:
self.message = row[0]
#self.message = str(self.message)
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.ServerSocket.recv(32)
self.message = row[1]
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.ServerSocket.recv(32)
self.message = row[2]
self.message = str(self.message)
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.ServerSocket.recv(32)
elif self.answer == "upload":
if self.canUpload == True:
self.message = "start"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.answer = self.ServerSocket.recv(1024)
self.ServerSocket.send(("Ack").encode(encoding='ascii'))
filename = self.answer.decode(encoding='ascii')
self.answer = self.ServerSocket.recv(1024)
self.ServerSocket.send(("Ack").encode(encoding='ascii'))
filetype = self.answer.decode(encoding='ascii')
self.answer = self.ServerSocket.recv(1024)
self.ServerSocket.send(("Ack").encode(encoding='ascii'))
filesize = self.answer.decode(encoding='ascii')
filesize = int(filesize)
print ("File Size %d", (filesize))
file = open(filename,'wb')
filedata = self.ServerSocket.recv(filesize)
file.write(filedata)
file.close()
self.dbHandle.Insert_File(filename, filetype, filesize)
else:
self.message = "denied"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
elif self.answer == "download":
if self.canDownload == True:
self.message = "start"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.answer = self.ServerSocket.recv(1024)
filename = self.answer.decode(encoding='ascii')
file_size = os.path.getsize(filename)
self.ServerSocket.send((str(file_size)).encode(encoding='ascii'))
self.ServerSocket.recv(32)
file = open(filename,'rb')
filedata = file.read(file_size)
self.ServerSocket.send(filedata)
file.close()
else:
self.message = "denied"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
elif self.asnwer == "exit":
break
else:
self.message = "invalid"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
def AskCredentials(self):
self.message="username"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.username = self.ServerSocket.recv(1024)
self.username = self.username.decode(encoding='ascii')
self.message="password"
self.ServerSocket.send(self.message.encode(encoding='ascii'))
self.password = self.ServerSocket.recv(1024)
self.password = self.password.decode(encoding='ascii')
if self.dbHandle.Verify_Credentials(self.username, self.password) == True:
return True
else:
return False
def AskFlags(self):
row = self.dbHandle.Get_Flags()
self.canUpload = row[1]
self.canDownload = row[2]