#!/usr/bin/python3 # -*- coding:utf-8 -*- # Codé par PAC , forké de 20-100 """ Module pour dialoguer avec la NoteKfet2015 """ import socket import json import ssl import traceback def get_response(socket): length_str = b'' char = socket.recv(1) while char != b'\n': length_str += char char = socket.recv(1) total = int(length_str) return json.loads(socket.recv(total).decode('utf-8')) def connect(server, port): sock = socket.socket() try: # On établit la connexion sur port 4242 sock.connect((server, port)) # On passe en SSL sock = ssl.wrap_socket(sock) # On fait un hello sock.send(b'["hello", "manual"]') retcode = get_response(sock) except: # Si on a foiré quelque part, c'est que le serveur est down return (False, sock, "Serveur indisponible") return (True, sock, "") def login(server, port, username, password, masque = [[], [], True]): result, sock, err = connect(server, port) if not result: return (False, None, err) try: commande = ["login", [username, password, "bdd", masque]] sock.send(json.dumps(commande).encode("utf-8")) response = get_response(sock) retcode = response['retcode'] if retcode == 0: return (True, sock, "") elif retcode == 5: return (False, sock, "Login incorrect") else: return (False, sock, "Erreur inconnue " + str(retcode)) except: # Si on a foiré quelque part, c'est que le serveur est down return (False, sock, "Erreur de communication avec le serveur") def don(sock, montant, id_note, facture): """ Faire faire un don à l'id_note """ try: sock.send(json.dumps(["dons", [[id_note], round(montant*100), "Facture : id=%s, designation=%s" % (facture.id, facture.name())]]).encode("utf-8")) response = get_response(sock) retcode = response['retcode'] transaction_retcode = response["msg"][0][0] if 0 < retcode < 100 or 200 <= retcode or 0 < transaction_retcode < 100 or 200 <= transaction_retcode: return (False, "Transaction échouée. (Solde trop négatif ?)") elif retcode == 0: return (True, "") else: return (False, "Erreur inconnue " + str(retcode)) except: return (False, "Erreur de communication avec le serveur")