]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blob - client.py
blabla
[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","plop","bdd"]')
53 elif user in ["vincent","moi"]:
54 a.write('login ["vincent","plop","special"]')
55 elif user in ["toto"]:
56 a.write('login ["toto","plop","bdd"]')
57 else:
58 a.write('login ["%s","%s","%s"]'%(user,mdp,typ))
59 return lit(a)
60
61 def search(socket,term):
62 a.write("search %s"%(term))
63 return json.loads(a.read())
64
65 def lit(socket):
66 try:
67 t=a.read(4096)
68 obj=json.loads(t)
69 if obj["retcode"]==0:
70 return obj['msg']
71 else:
72 print obj["errmsg"]
73 return obj["msg"]
74 except ssl.SSLError:
75 return "Rien à lire"
76 except ValueError:
77 return "Serveur mort ?"
78
79 def challenge(a):
80 _,pub=monRSA.litcles(None,client_config.server_rsa_pub_key)
81 chall=str(time.time())
82 chall+="".join(["azertyuiopqsdfghjklmwxcvbn"[random.randrange(0,26)] for i in range(20)])
83 coded=monRSA.crypte(chall,pub)
84 a.send('challenge "%s"'%(coded))
85 a.setblocking(True)
86 result=a.read()
87 a.settimeout(0.5)
88 if json.loads(result)==chall:
89 print "Recognized"
90 elif json.loads(result)==u"Challenge tenté il y a moins de 10 minutes ! =p":
91 print "Top tôt. Réessaye plus tard."
92 else:
93 print "Imposteur !"
94
95 if __name__=="__main__":
96 where=raw_input("quel serveur ?")
97 #port=int(raw_input("port ? "))
98 a=socket.socket()
99 a=connect(a,where)
100 a.settimeout(2)
101 #checkidentity(a)
102 print hello(a,"Python Client alpha")
103 print login(a,"20-100","plop")
104 print "Socket créée dans la variable \"a\""
105