]> gitweb.pimeys.fr Git - bots/basile.git/blob - nk.py
PEP8
[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(json.dumps(["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", [username, password, typ, masque]]
65 sock.write(json.dumps(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 return json.loads(out), sock
71