Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import random
- import threading
- import json
- import os
- """
- Serverska strana jednostavne aplikacije za razmenu fajlova
- """
- """
- Primer izgleda koriscenog recnika
- """
- # korisnici = {
- # "korisnik1":{
- # "password":"fon123",
- # "files":[
- # "Gq37zTq432",
- # "mX6A1njGxZ",
- # ]
- # },
- # "korisnik2":{
- # "password":"fon321",
- # "files":[
- # "Gq37zTq432",
- # "mX6A1njGxZ",
- # ]
- # },
- # }
- """
- Obavezno ucitavanje json datoteke radi koriscenja
- recnika korisnici
- """
- def json_in(path):
- if os.path.isfile(path):
- with open(path, 'r') as q:
- data = q.read()
- return json.loads(data)
- else:
- return {}
- korisnici = json_in('db/korisnici.json')
- aktivni_korisnici = []
- """
- Registracija novih korisnika
- """
- def add_new_user(sock):
- username = sock.recv(1024)
- while username.decode('ascii') in korisnici.keys():
- sock.send("ERR".encode('ascii'))
- username = sock.recv(1024)
- sock.send("OK".encode('ascii'))
- p = sock.recv(1024)
- while p.decode('ascii') == "":
- sock.send("ERR".encode('ascii'))
- p = sock.recv(1024)
- sock.send("OK".encode('ascii'))
- username = username.decode('ascii')
- password = p.decode('ascii')
- new_dic = {'password': password, 'files': []}
- korisnici[username] = new_dic
- #Automatski se vrsi log in
- aktivni_korisnici.append(username)
- extract(korisnici)
- """
- Generator jedinstvenog koda od deset karaktera(A-Z,a-z,0-9)
- """
- def code_generator():
- letters = "abcdefghijklmnopqrstuvwxyz"
- upper_letters = letters.upper()
- numbers = "0123456789"
- sequence = letters + upper_letters + numbers
- code = ''
- for i in range(10):
- code += random.choice(sequence)
- return code
- """
- Ekstrakcija recnika u JSON file.
- """
- def extract(recnik):
- with open("db/korisnici.json",'w') as f:
- f.write(json.dumps(recnik,indent=2))
- """
- Preuzimanje fajlova
- """
- def download(sock):
- code = sock.recv(1024).decode('ascii')
- """
- Funkcija za upload novog fajla
- """
- def upload(sock):
- text = sock.recv(1024).decode('ascii')
- while not text:
- sock.send("ERR".encode('ascii'))
- text = sock.recv(1024).decode('ascii')
- sock.send("OK".encode('ascii'))
- code = code_generator()
- sock.send(code.encode('ascii'))
- with open('db/files/' + code,'wb') as f:
- f.write(text.encode('ascii'))
- username = sock.recv(1024).decode('ascii')
- korisnici[username]['files'].append(code)
- extract(korisnici)
- """
- Forma za logovanje
- """
- def log_in(sock):
- username = sock.recv(1024).decode('ascii')
- while not username in korisnici.keys():
- sock.send("ERR".encode('ascii'))
- username = sock.recv(1024).decode('ascii')
- sock.send("OK".encode('ascii'))
- password = sock.recv(1024).decode('ascii')
- while password != korisnici[username]['password']:
- sock.send("ERR".encode('ascii'))
- password = sock.recv(1024).decode('ascii')
- sock.send("OK".encode('ascii'))
- aktivni_korisnici.append(username)
- """
- Funkcija koja vrsi navigaciju kroz aplikaciju{interface}
- """
- def interfejs(sock):
- #Da li zelite download ili upload? Unesite d ili u
- userInput = sock.recv(1024)
- if userInput.decode('ascii') in ['d','D']:
- download(sock)
- elif userInput.decode('ascii') in ['u','U']:
- response = sock.recv(1024)
- if response.decode('ascii') in ['l','L']:
- log_in(sock)
- elif response.decode('ascii') in ['n','N']:
- add_new_user(sock)
- else:
- sock.send("ERR".encode('ascii'))
- upload(sock)
- else:
- sock.send("ERR".encode('ascii'))
- def main():
- host = socket.gethostname()
- port = 10000
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- s.bind((host,port))
- s.listen(5)
- print("Server osluskuje")
- while True:
- c, addr = s.accept()
- print("Konektovao se korisnik sa adresom: >>>{}".format(addr))
- t = threading.Thread(target=upload, args=(c,))
- t.start()
- s.close()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement