]> gitweb.pimeys.fr Git - bots/basile.git/blob - nk.py
Début de séparation de ce qui concerne NK2015 dans un fichier nk.py
[bots/basile.git] / nk.py
1 #!/usr/bin/python
2 # -*- coding:utf-8 -*-
3
4 # Codé par 20-100
5
6 """ Module de Basile pour dialoguer avec la NoteKfet2015 """
7
8 import socket
9 import json
10 import ssl
11
12 #: Config de basile
13 import config
14
15 class NKError(Exception):
16 def __init__(self,msg):
17 Exception.__init__(self)
18 self.msg=msg
19 def __str__(self):
20 return str(self.msg)
21 def __unicode__(self):
22 return unicode(self.msg)
23
24 class NKRefused(NKError):
25 pass
26
27 class NKHelloFailed(NKError):
28 pass
29
30 class NKUnknownError(NKError):
31 pass
32
33 def connect():
34 sock=socket.socket()
35 try:
36 # On établit la connexion sur port 4242
37 sock.connect((config.nk_server, config.nk_port))
38 # On passe en SSL
39 sock=ssl.wrap_socket(sock,ca_certs='../keys/ca_.crt')
40 # On fait un hello
41 sock.write('["hello", "Basile"]')
42 # On récupère la réponse du hello
43 out=sock.read()
44 out=json.loads(out)
45 except Exception as exc:
46 # Si on a foiré quelque part, c'est que le serveur est down
47 raise NKRefused(str(exc))
48 if out["retcode"]==0:
49 return sock
50 elif out["retcode"]==11:
51 raise NKHelloFailed(out["errmsg"])
52 else:
53 raise NKUnknownError(out["errmsg"])
54
55
56 def login(username,password,typ="bdd"):
57 sock=connect()
58 if typ=="special": # ça c'est pour Basile lui-même
59 masque='[]'
60 elif typ=="bdd":
61 masque='[[], [], true]'
62 try:
63 # Basile a un compte special user
64 commande='["login", [%s,%s,"%s",%s]]'%(json.dumps(username),json.dumps(password),typ,masque)
65 sock.write(commande)
66 out=sock.read()
67 except Exception as exc:
68 # Si on a foiré quelque part, c'est que le serveur est down
69 raise NKRefused(str(exc))
70 # On vérifie ensuite que le login
71 return json.loads(out),sock
72