]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blob - client.py
J'ai rendu la lecture plus propre depuis la modif avec les retcodes et errmsg
[NK2015_Client_Python_Alpha.git] / client.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 # Définition des fonctions de base de communication du client
5 # Pour l'instant ce script sert essentiellement à les charger en mémoire pour les utiliser à la main
6
7 import os, sys, string, time, random
8 import socket, ssl
9 import threading
10
11 import json
12 import hashlib
13
14 import client_config
15 reload(client_config)
16
17 from pprint import pprint
18
19 sys.path.append(client_config.rsa_path)
20 import monRSA
21
22 def connect(sock,where="cerebro",port=None):
23 if port==None:
24 port=client_config.port
25 ip={"ici":"localhost","vent":"vent.crans.org","eva":"eva.crans.org","cerebro":"cerebro.crans.org"}[where]
26 sock.connect((ip,port))
27 return ssl.wrap_socket(sock,ca_certs=client_config.ca_certfile)
28 # cert_reqs=ssl.CERT_NONE,ciphers="AES256-SHA")
29
30 def checkidentity(a):
31 c=a.getpeercert()
32 print c
33 c=dict([i[0] for i in c["subject"]])
34 awaited={'commonName': u'note.crans.org',
35 'countryName': u'FR',
36 'emailAddress': u'legallic@crans.org',
37 'localityName': u'Cachan',
38 'organizationName': u'BDE ENS Cachan',
39 'organizationalUnitName': u'Kfet',
40 'stateOrProvinceName': u'\xc3\x8ele de France'}
41 if all([c[cle]==awaited[cle] for cle in awaited.keys()]):
42 return
43 else:
44 raise KeyboardInterrupt("Imposteur !")
45
46 def hello(socket,version):
47 socket.send('hello "%s"'%(version))
48 return lit(a)
49
50 def login(socket,user,mdp="",typ="bdd"):
51 if user in ["20-100","moibdd"]:
52 a.write('login ["20-100","mdp","bdd"]')
53 elif user in ["vincent","moi"]:
54 a.write('login ["vincent","mdp","special"]')
55 else:
56 a.write('login ["%s","%s","%s"]'%(user,mdp,typ))
57 return lit(a)
58
59 def search(socket,term):
60 a.write("search %s"%(term))
61 return json.loads(a.read())
62
63 def lit(socket):
64 try:
65 t=a.read()
66 obj=json.loads(t)
67 if obj["retcode"]==0:
68 return obj['msg']
69 else:
70 print obj["errmsg"]
71 return obj["msg"]
72 except ssl.SSLError:
73 return "Rien à lire"
74 except ValueError:
75 return "Serveur mort ?"
76
77 def challenge(a):
78 _,pub=monRSA.litcles(None,client_config.server_rsa_pub_key)
79 chall=str(time.time())
80 chall+="".join(["azertyuiopqsdfghjklmwxcvbn"[random.randrange(0,26)] for i in range(20)])
81 coded=monRSA.crypte(chall,pub)
82 a.send('challenge "%s"'%(coded))
83 a.setblocking(True)
84 result=a.read()
85 a.settimeout(0.5)
86 if json.loads(result)==chall:
87 print "Recognized"
88 elif json.loads(result)==u"Challenge tenté il y a moins de 10 minutes ! =p":
89 print "Top tôt. Réessaye plus tard."
90 else:
91 print "Imposteur !"
92
93 if __name__=="__main__":
94 where=raw_input("quel serveur ?")
95 #port=int(raw_input("port ? "))
96 a=socket.socket()
97 a=connect(a,where)
98 a.settimeout(2)
99 #checkidentity(a)
100 print hello(a,"Python Client alpha")
101 print login(a,"20-100","mdp")
102 print "Socket créée dans la variable \"a\""