]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blob - client.py
Initialisation avec quelques fichiers
[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="ici"):
23 port=client_config.port
24 ip={"ici":"localhost","vent":"vent.crans.org","eva":"eva.crans.org"}[where]
25 sock.connect((ip,port))
26 return ssl.wrap_socket(sock,ca_certs=client_config.ca_certfile,
27 cert_reqs=ssl.CERT_OPTIONAL,ciphers="AES256-SHA")
28
29 def checkidentity(a):
30 c=a.getpeercert()
31 print c
32 c=dict([i[0] for i in c["subject"]])
33 awaited={'commonName': u'note.crans.org',
34 'countryName': u'FR',
35 'emailAddress': u'legallic@crans.org',
36 'localityName': u'Cachan',
37 'organizationName': u'BDE ENS Cachan',
38 'organizationalUnitName': u'Kfet',
39 'stateOrProvinceName': u'\xc3\x8ele de France'}
40 if all([c[cle]==awaited[cle] for cle in awaited.keys()]):
41 return
42 else:
43 raise KeyboardInterrupt("Imposteur !")
44
45 def hello(socket,version):
46 socket.send('hello "%s"'%(version))
47 return json.loads(a.read())
48
49 def login(socket,user,mdp="",typ="bdd"):
50 if user in ["20-100","moibdd"]:
51 a.write('login ["20-100","mdp","bdd"]')
52 elif user in ["vincent","moi"]:
53 a.write('login ["vincent","mdp","special"]')
54 else:
55 a.write('login ["%s","%s","%s"]'%(user,mdp,typ))
56 return json.loads(a.read())
57
58 def search(socket,term):
59 a.write("search %s"%(term))
60 return json.loads(a.read())
61
62 def lit(socket,noprint=False):
63 try:
64 t=a.read()
65 if noprint:
66 return json.loads(t)
67 else:
68 obj=json.loads(t)
69 if type(obj)==unicode:
70 print obj
71 else:
72 pprint(obj)
73 except ssl.SSLError:
74 print "Rien à lire"
75 except ValueError:
76 print "Serveur mort ?"
77
78 def challenge(a):
79 _,pub=monRSA.litcles(None,client_config.server_rsa_pub_key)
80 chall=str(time.time())
81 chall+="".join(["azertyuiopqsdfghjklmwxcvbn"[random.randrange(0,26)] for i in range(20)])
82 coded=monRSA.crypte(chall,pub)
83 a.send('challenge "%s"'%(coded))
84 a.setblocking(True)
85 result=a.read()
86 a.settimeout(0.5)
87 if json.loads(result)==chall:
88 print "Recognized"
89 elif json.loads(result)==u"Challenge tenté il y a moins de 10 minutes ! =p":
90 print "Top tôt. Réessaye plus tard."
91 else:
92 print "Imposteur !"
93
94 if __name__=="__main__":
95 a=socket.socket()
96 a=connect(a)
97 a.settimeout(0.5)
98 checkidentity(a)
99 print hello(a,"Python Client alpha")
100 print login(a,"20-100","mdp")
101 print "Socket créée dans la variable \"a\""