X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=client.py;h=3a722028d9eab00d3248a245b83f3f0a29ecd7fe;hb=bfc92fa24ddd8e0057eb1b6a68af334047300162;hp=3b2f3baead0b55d3b8d4f2b197149d9d4095aef2;hpb=dcba0676080751e1bdfe8ff26577242549191082;p=NK2015_Client_Python_Alpha.git diff --git a/client.py b/client.py index 3b2f3ba..3a72202 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") @@ -48,50 +68,33 @@ def hello(socket,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()) + 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 ? "))