X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=client.py;h=672ef459abb27a0eb3768d125da87209add7cb09;hb=543a1d6ac16412734284500346b9933d8a7798d9;hp=65a62a140d7e557b50291664dc5e8592526985db;hpb=d2219464a16bf75a9fb0c60c1934cf5eddcf1909;p=NK2015_Client_Python_Alpha.git diff --git a/client.py b/client.py index 65a62a1..672ef45 100755 --- a/client.py +++ b/client.py @@ -19,12 +19,26 @@ from pprint import pprint sys.path.append(client_config.rsa_path) import monRSA -def connect(sock,where="ici"): - port=client_config.port - ip={"ici":"localhost","vent":"vent.crans.org","eva":"eva.crans.org"}[where] +def full_read(sock): + """Lit sur la socket jusqu'à ce que l'output soit déJSON-izable""" + output="" + while True: + output+=sock.read() + try: + return json.loads(output) + except: + pass + +def connect(sock,where,port=None): + if port==None: + port=client_config.port + try: + ip={"ici":"localhost","vent":"vent.crans.org","eva":"eva.crans.org","cerebro":"cerebro.crans.org"}[where] + except: + ip=where sock.connect((ip,port)) - return ssl.wrap_socket(sock,ca_certs=client_config.ca_certfile, - cert_reqs=ssl.CERT_OPTIONAL,ciphers="AES256-SHA") + return ssl.wrap_socket(sock,ca_certs=client_config.ca_certfile) +# cert_reqs=ssl.CERT_NONE,ciphers="AES256-SHA") def checkidentity(a): c=a.getpeercert() @@ -44,58 +58,44 @@ def checkidentity(a): def hello(socket,version): socket.send('hello "%s"'%(version)) - return json.loads(a.read()) + return lit(a) def login(socket,user,mdp="",typ="bdd"): - if user in ["20-100","moibdd"]: - a.write('login ["20-100","mdp","bdd"]') + if user in ["20-100","moibdd","#1"]: + a.write('login ["#1","plop","bdd",[[],[],false]]') elif user in ["vincent","moi"]: - a.write('login ["vincent","mdp","special"]') + a.write('login ["vincent","plop","special",[]]') + elif user in ["toto"]: + a.write('login ["toto","plop","bdd",[[],[],false]]') else: - a.write('login ["%s","%s","%s"]'%(user,mdp,typ)) - return json.loads(a.read()) + a.write('login ["%s","%s","%s",[[],[],false]]'%(user,mdp,typ)) + return lit(a) def search(socket,term): a.write("search %s"%(term)) - return json.loads(a.read()) + return lit(a) -def lit(socket,noprint=False): +def lit(socket): try: - t=a.read() - if noprint: - return json.loads(t) + obj=full_read(socket) + if obj["retcode"]==0: + return obj['msg'] else: - obj=json.loads(t) - if type(obj)==unicode: - print obj - else: - pprint(obj) + print obj["errmsg"] + return obj["msg"] except ssl.SSLError: - print "Rien à lire" + return "Rien à lire" except ValueError: - print "Serveur mort ?" + return "Serveur mort ?" -def challenge(a): - _,pub=monRSA.litcles(None,client_config.server_rsa_pub_key) - chall=str(time.time()) - chall+="".join(["azertyuiopqsdfghjklmwxcvbn"[random.randrange(0,26)] for i in range(20)]) - coded=monRSA.crypte(chall,pub) - a.send('challenge "%s"'%(coded)) - a.setblocking(True) - result=a.read() - a.settimeout(0.5) - if json.loads(result)==chall: - print "Recognized" - elif json.loads(result)==u"Challenge tenté il y a moins de 10 minutes ! =p": - print "Top tôt. Réessaye plus tard." - else: - print "Imposteur !" - if __name__=="__main__": + where=raw_input("quel serveur ?") + #port=int(raw_input("port ? ")) a=socket.socket() - a=connect(a) - a.settimeout(0.5) - checkidentity(a) + a=connect(a,where) + a.settimeout(2) + #checkidentity(a) print hello(a,"Python Client alpha") - print login(a,"20-100","mdp") + print login(a,"20-100","plop") print "Socket créée dans la variable \"a\"" +