]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - nk.py
Début de séparation de ce qui concerne NK2015 dans un fichier nk.py
[bots/basile.git] / nk.py
diff --git a/nk.py b/nk.py
new file mode 100644 (file)
index 0000000..c80adfd
--- /dev/null
+++ b/nk.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Codé par 20-100
+
+""" Module de Basile pour dialoguer avec la NoteKfet2015 """
+
+import socket
+import json
+import ssl
+
+#: Config de basile
+import config
+
+class NKError(Exception):
+    def __init__(self,msg):
+        Exception.__init__(self)
+        self.msg=msg
+    def __str__(self):
+        return str(self.msg)
+    def __unicode__(self):
+        return unicode(self.msg)
+
+class NKRefused(NKError):
+    pass
+
+class NKHelloFailed(NKError):
+    pass
+
+class NKUnknownError(NKError):
+    pass
+
+def connect():
+    sock=socket.socket()
+    try:
+        # On établit la connexion sur port 4242
+        sock.connect((config.nk_server, config.nk_port))
+        # On passe en SSL
+        sock=ssl.wrap_socket(sock,ca_certs='../keys/ca_.crt')
+        # On fait un hello
+        sock.write('["hello", "Basile"]')
+        # On récupère la réponse du hello
+        out=sock.read()
+        out=json.loads(out)
+    except Exception as exc:
+        # Si on a foiré quelque part, c'est que le serveur est down
+        raise NKRefused(str(exc))
+    if out["retcode"]==0:
+        return sock
+    elif out["retcode"]==11:
+        raise NKHelloFailed(out["errmsg"])
+    else:
+        raise NKUnknownError(out["errmsg"])
+
+
+def login(username,password,typ="bdd"):
+    sock=connect()
+    if typ=="special": # ça c'est pour Basile lui-même
+        masque='[]'
+    elif typ=="bdd":
+        masque='[[], [], true]'
+    try:
+        # Basile a un compte special user
+        commande='["login", [%s,%s,"%s",%s]]'%(json.dumps(username),json.dumps(password),typ,masque)
+        sock.write(commande)
+        out=sock.read()
+    except Exception as exc:
+        # Si on a foiré quelque part, c'est que le serveur est down
+        raise NKRefused(str(exc))
+    # On vérifie ensuite que le login
+    return json.loads(out),sock
+