X-Git-Url: http://gitweb.pimeys.fr/?p=NK2015_Client_Python_Alpha.git;a=blobdiff_plain;f=client.py;h=297e76d741a4179cafc3df4b18a4efb0ad454e24;hp=3b2f3baead0b55d3b8d4f2b197149d9d4095aef2;hb=fe716a175a98d4b569d8e6deb9a8bf0e98ef873f;hpb=dcba0676080751e1bdfe8ff26577242549191082 diff --git a/client.py b/client.py index 3b2f3ba..297e76d 100755 --- a/client.py +++ b/client.py @@ -19,10 +19,30 @@ from pprint import pprint sys.path.append(client_config.rsa_path) import monRSA -def connect(sock,where="cerebro",port=None): +class DeadServer(Exception): + pass + +def full_read(sock): + """Lit sur la socket jusqu'à ce que l'output soit déJSON-izable""" + output="" + i = 0 + while True: + output+=sock.read() + i += 1 + try: + return json.loads(output) + except: + pass + if i==10 and output=="": + raise DeadServer + +def connect(sock,where,port=None): if port==None: port=client_config.port - ip={"ici":"localhost","vent":"vent.crans.org","eva":"eva.crans.org","cerebro":"cerebro.crans.org"}[where] + 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_NONE,ciphers="AES256-SHA") @@ -44,54 +64,37 @@ def checkidentity(a): raise KeyboardInterrupt("Imposteur !") def hello(socket,version): - socket.send('hello "%s"'%(version)) + socket.send('["hello", "%s"]' % (version)) return lit(a) def login(socket,user,mdp="",typ="bdd"): - if user in ["20-100","moibdd"]: - a.write('login ["20-100","plop","bdd"]') + if user in ["20-100","moibdd","#1"]: + a.write('["login", ["#1","plop","bdd",[[],[],false]]]') elif user in ["vincent","moi"]: - a.write('login ["vincent","plop","special"]') + a.write('["login", ["vincent","plop","special",[]]]') elif user in ["toto"]: - a.write('login ["toto","plop","bdd"]') + a.write('["login", ["toto","plop","bdd",[[],[],false]]]') else: - a.write('login ["%s","%s","%s"]'%(user,mdp,typ)) + 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()) + a.write('["search", %s]' % (term)) + return lit(a) def lit(socket): try: - t=a.read(4096) - obj=json.loads(t) + obj=full_read(socket) if obj["retcode"]==0: return obj['msg'] else: print obj["errmsg"] return obj["msg"] except ssl.SSLError: - return "Rien à lire" - except ValueError: - return "Serveur mort ?" + print "Rien à lire" + except DeadServer: + print "Serveur down ?" -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 ? "))