X-Git-Url: http://gitweb.pimeys.fr/?p=NK2015_Client_Python_Alpha.git;a=blobdiff_plain;f=client.py;h=297e76d741a4179cafc3df4b18a4efb0ad454e24;hp=de8c71cfc4ceaf487874736f5629c30f7359d6f3;hb=fe716a175a98d4b569d8e6deb9a8bf0e98ef873f;hpb=d621c5224a44dc20bc2aaf661954fd1df65dd147 diff --git a/client.py b/client.py index de8c71c..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,60 +64,45 @@ def checkidentity(a): raise KeyboardInterrupt("Imposteur !") def hello(socket,version): - socket.send('hello "%s"'%(version)) - return json.loads(a.read()) + 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","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()) + a.write('["search", %s]' % (term)) + 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" - except ValueError: - print "Serveur mort ?" + 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 ? ")) a=socket.socket() - a=connect(a,"cerebro") + 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\"" +