From d56f873fd49f17f24516d336980bee583f8e359b Mon Sep 17 00:00:00 2001 From: Nemunaire Date: Thu, 1 May 2014 02:34:43 +0200 Subject: [PATCH] New feature: can now connect to SSL servers (using TLS v1) --- IRCServer.py | 9 +++++++-- bot.py | 4 ++-- nemuspeak.py | 4 +--- prompt/builtins.py | 3 ++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/IRCServer.py b/IRCServer.py index f354330..602a597 100644 --- a/IRCServer.py +++ b/IRCServer.py @@ -18,6 +18,7 @@ import errno import os +import ssl import socket import threading import traceback @@ -32,7 +33,7 @@ import xmlparser class IRCServer(server.Server): """Class to interact with an IRC server""" - def __init__(self, node, nick, owner, realname): + def __init__(self, node, nick, owner, realname, ssl=False): """Initialize an IRC server Arguments: @@ -40,7 +41,7 @@ class IRCServer(server.Server): nick -- nick used by the bot on this server owner -- nick used by the bot owner on this server realname -- string used as realname on this server - + ssl -- require SSL? """ server.Server.__init__(self) @@ -49,6 +50,7 @@ class IRCServer(server.Server): self.nick = nick self.owner = owner self.realname = realname + self.ssl = ssl # Listen private messages? self.listen_nick = True @@ -164,6 +166,9 @@ class IRCServer(server.Server): def run(self): if not self.connected: self.s = socket.socket() #Create the socket + if self.ssl: + ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) + self.s = ctx.wrap_socket(self.s) try: self.s.connect((self.host, self.port)) #Connect to server except socket.error as e: diff --git a/bot.py b/bot.py index 87bd1ea..8b3f70e 100644 --- a/bot.py +++ b/bot.py @@ -183,9 +183,9 @@ class Bot: self.update_timer() - def addServer(self, node, nick, owner, realname): + def addServer(self, node, nick, owner, realname, ssl=False): """Add a new server to the context""" - srv = IRCServer(node, nick, owner, realname) + srv = IRCServer(node, nick, owner, realname, ssl) srv.add_hook = lambda h: self.hooks.add_hook("irc_hook", h, self) srv.add_networkbot = self.add_networkbot srv.send_bot = lambda d: self.send_networkbot(srv, d) diff --git a/nemuspeak.py b/nemuspeak.py index 9501e17..5c804f6 100755 --- a/nemuspeak.py +++ b/nemuspeak.py @@ -2,12 +2,10 @@ # coding=utf-8 import sys -import socket import signal import os import re import subprocess -import shlex import traceback from datetime import datetime from datetime import timedelta @@ -164,7 +162,7 @@ for correct in config.getNodes("correction"): print ("%d corrections loaded"%len(CORRECTIONS)) for serveur in config.getNodes("server"): - srv = Server(serveur, config["nick"], config["owner"], config["realname"]) + srv = Server(serveur, config["nick"], config["owner"], config["realname"], serveur.hasAttribute("ssl")) srv.launch(None) def sighup_h(signum, frame): diff --git a/prompt/builtins.py b/prompt/builtins.py index 512549d..6e7aa5a 100644 --- a/prompt/builtins.py +++ b/prompt/builtins.py @@ -64,7 +64,8 @@ def load_file(filename, context): # Preset each server in this file for server in config.getNodes("server"): if context.addServer(server, config["nick"], - config["owner"], config["realname"]): + config["owner"], config["realname"], + server.hasAttribute("ssl")): print (" Server `%s:%s' successfully added." % (server["server"], server["port"])) else: