Advertisement
Guest User

serverSide.py

a guest
Dec 20th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. import socket
  2. import random
  3. import threading
  4. import json
  5. import os
  6. """
  7. Serverska strana jednostavne aplikacije za razmenu fajlova
  8.  
  9. """
  10. """
  11. Primer izgleda koriscenog recnika
  12. """
  13. # korisnici = {
  14. # "korisnik1":{
  15. # "password":"fon123",
  16. # "files":[
  17. # "Gq37zTq432",
  18. # "mX6A1njGxZ",
  19. # ]
  20. # },
  21. # "korisnik2":{
  22. # "password":"fon321",
  23. # "files":[
  24. # "Gq37zTq432",
  25. # "mX6A1njGxZ",
  26. # ]
  27. # },
  28. # }
  29. """
  30. Obavezno ucitavanje json datoteke radi koriscenja
  31. recnika korisnici
  32. """
  33. def json_in(path):
  34. if os.path.isfile(path):
  35. with open(path, 'r') as q:
  36. data = q.read()
  37. return json.loads(data)
  38. else:
  39. return {}
  40.  
  41. korisnici = json_in('db/korisnici.json')
  42. aktivni_korisnici = []
  43. """
  44. Registracija novih korisnika
  45. """
  46. def add_new_user(sock):
  47. username = sock.recv(1024)
  48.  
  49. while username.decode('ascii') in korisnici.keys():
  50. sock.send("ERR".encode('ascii'))
  51. username = sock.recv(1024)
  52. sock.send("OK".encode('ascii'))
  53.  
  54. p = sock.recv(1024)
  55.  
  56. while p.decode('ascii') == "":
  57. sock.send("ERR".encode('ascii'))
  58. p = sock.recv(1024)
  59.  
  60. sock.send("OK".encode('ascii'))
  61. username = username.decode('ascii')
  62. password = p.decode('ascii')
  63. new_dic = {'password': password, 'files': []}
  64. korisnici[username] = new_dic
  65. #Automatski se vrsi log in
  66. aktivni_korisnici.append(username)
  67. extract(korisnici)
  68.  
  69.  
  70.  
  71.  
  72. """
  73. Generator jedinstvenog koda od deset karaktera(A-Z,a-z,0-9)
  74. """
  75. def code_generator():
  76. letters = "abcdefghijklmnopqrstuvwxyz"
  77. upper_letters = letters.upper()
  78. numbers = "0123456789"
  79. sequence = letters + upper_letters + numbers
  80. code = ''
  81. for i in range(10):
  82. code += random.choice(sequence)
  83. return code
  84.  
  85. """
  86. Ekstrakcija recnika u JSON file.
  87. """
  88. def extract(recnik):
  89. with open("db/korisnici.json",'w') as f:
  90. f.write(json.dumps(recnik,indent=2))
  91.  
  92. """
  93. Preuzimanje fajlova
  94. """
  95. def download(sock):
  96. code = sock.recv(1024).decode('ascii')
  97.  
  98. """
  99. Funkcija za upload novog fajla
  100. """
  101. def upload(sock):
  102. text = sock.recv(1024).decode('ascii')
  103. while not text:
  104. sock.send("ERR".encode('ascii'))
  105. text = sock.recv(1024).decode('ascii')
  106. sock.send("OK".encode('ascii'))
  107. code = code_generator()
  108. sock.send(code.encode('ascii'))
  109. with open('db/files/' + code,'wb') as f:
  110. f.write(text.encode('ascii'))
  111. username = sock.recv(1024).decode('ascii')
  112. korisnici[username]['files'].append(code)
  113. extract(korisnici)
  114.  
  115. """
  116. Forma za logovanje
  117. """
  118. def log_in(sock):
  119. username = sock.recv(1024).decode('ascii')
  120.  
  121. while not username in korisnici.keys():
  122. sock.send("ERR".encode('ascii'))
  123. username = sock.recv(1024).decode('ascii')
  124. sock.send("OK".encode('ascii'))
  125.  
  126. password = sock.recv(1024).decode('ascii')
  127. while password != korisnici[username]['password']:
  128. sock.send("ERR".encode('ascii'))
  129. password = sock.recv(1024).decode('ascii')
  130. sock.send("OK".encode('ascii'))
  131. aktivni_korisnici.append(username)
  132.  
  133.  
  134. """
  135. Funkcija koja vrsi navigaciju kroz aplikaciju{interface}
  136. """
  137. def interfejs(sock):
  138. #Da li zelite download ili upload? Unesite d ili u
  139. userInput = sock.recv(1024)
  140. if userInput.decode('ascii') in ['d','D']:
  141. download(sock)
  142. elif userInput.decode('ascii') in ['u','U']:
  143. response = sock.recv(1024)
  144. if response.decode('ascii') in ['l','L']:
  145. log_in(sock)
  146. elif response.decode('ascii') in ['n','N']:
  147. add_new_user(sock)
  148. else:
  149. sock.send("ERR".encode('ascii'))
  150. upload(sock)
  151. else:
  152. sock.send("ERR".encode('ascii'))
  153.  
  154. def main():
  155. host = socket.gethostname()
  156. port = 10000
  157.  
  158. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  159. s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  160. s.bind((host,port))
  161.  
  162. s.listen(5)
  163.  
  164. print("Server osluskuje")
  165. while True:
  166. c, addr = s.accept()
  167. print("Konektovao se korisnik sa adresom: >>>{}".format(addr))
  168. t = threading.Thread(target=upload, args=(c,))
  169. t.start()
  170.  
  171. s.close()
  172.  
  173. if __name__ == '__main__':
  174. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement