]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blob - client.py
Inversion du masque
[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 full_read(sock):
23 """Lit sur la socket jusqu'à ce que l'output soit déJSON-izable"""
24 output=""
25 while True:
26 output+=sock.read()
27 try:
28 return json.loads(output)
29 except:
30 pass
31
32 def connect(sock,where,port=None):
33 if port==None:
34 port=client_config.port
35 try:
36 ip={"ici":"localhost","vent":"vent.crans.org","eva":"eva.crans.org","cerebro":"cerebro.crans.org"}[where]
37 except:
38 ip=where
39 sock.connect((ip,port))
40 return ssl.wrap_socket(sock,ca_certs=client_config.ca_certfile)
41 # cert_reqs=ssl.CERT_NONE,ciphers="AES256-SHA")
42
43 def checkidentity(a):
44 c=a.getpeercert()
45 print c
46 c=dict([i[0] for i in c["subject"]])
47 awaited={'commonName': u'note.crans.org',
48 'countryName': u'FR',
49 'emailAddress': u'legallic@crans.org',
50 'localityName': u'Cachan',
51 'organizationName': u'BDE ENS Cachan',
52 'organizationalUnitName': u'Kfet',
53 'stateOrProvinceName': u'\xc3\x8ele de France'}
54 if all([c[cle]==awaited[cle] for cle in awaited.keys()]):
55 return
56 else:
57 raise KeyboardInterrupt("Imposteur !")
58
59 def hello(socket,version):
60 socket.send('hello "%s"'%(version))
61 return lit(a)
62
63 def login(socket,user,mdp="",typ="bdd"):
64 if user in ["20-100","moibdd","#1"]:
65 a.write('login ["#1","plop","bdd",[[],[],false]]')
66 elif user in ["vincent","moi"]:
67 a.write('login ["vincent","plop","special",[]]')
68 elif user in ["toto"]:
69 a.write('login ["toto","plop","bdd",[[],[],false]]')
70 else:
71 a.write('login ["%s","%s","%s",[[],[],false]]'%(user,mdp,typ))
72 return lit(a)
73
74 def search(socket,term):
75 a.write("search %s"%(term))
76 return lit(a)
77
78 def lit(socket):
79 try:
80 obj=full_read(socket)
81 if obj["retcode"]==0:
82 return obj['msg']
83 else:
84 print obj["errmsg"]
85 return obj["msg"]
86 except ssl.SSLError:
87 return "Rien à lire"
88 except ValueError:
89 return "Serveur mort ?"
90
91 if __name__=="__main__":
92 where=raw_input("quel serveur ?")
93 #port=int(raw_input("port ? "))
94 a=socket.socket()
95 a=connect(a,where)
96 a.settimeout(2)
97 #checkidentity(a)
98 print hello(a,"Python Client alpha")
99 print login(a,"20-100","plop")
100 print "Socket créée dans la variable \"a\""
101