]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blob - client.py
fb4764b9dde19dd6188b891adec4beaaddc4bbca
[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 json.loads(a.read())
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 json.loads(a.read())
58
59 def search(socket,term):
60 a.write("search %s"%(term))
61 return json.loads(a.read())
62
63 def lit(socket,noprint=False):
64 try:
65 t=a.read()
66 if noprint:
67 return json.loads(t)
68 else:
69 obj=json.loads(t)
70 if type(obj)==unicode:
71 print obj
72 else:
73 pprint(obj)
74 except ssl.SSLError:
75 print "Rien à lire"
76 except ValueError:
77 print "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","mdp")
104 print "Socket créée dans la variable \"a\""