New feature: can now connect to SSL servers (using TLS v1)

This commit is contained in:
nemunaire 2014-05-01 02:34:43 +02:00
parent b925cee08a
commit d56f873fd4
4 changed files with 12 additions and 8 deletions

View File

@ -18,6 +18,7 @@
import errno import errno
import os import os
import ssl
import socket import socket
import threading import threading
import traceback import traceback
@ -32,7 +33,7 @@ import xmlparser
class IRCServer(server.Server): class IRCServer(server.Server):
"""Class to interact with an IRC 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 """Initialize an IRC server
Arguments: Arguments:
@ -40,7 +41,7 @@ class IRCServer(server.Server):
nick -- nick used by the bot on this server nick -- nick used by the bot on this server
owner -- nick used by the bot owner on this server owner -- nick used by the bot owner on this server
realname -- string used as realname on this server realname -- string used as realname on this server
ssl -- require SSL?
""" """
server.Server.__init__(self) server.Server.__init__(self)
@ -49,6 +50,7 @@ class IRCServer(server.Server):
self.nick = nick self.nick = nick
self.owner = owner self.owner = owner
self.realname = realname self.realname = realname
self.ssl = ssl
# Listen private messages? # Listen private messages?
self.listen_nick = True self.listen_nick = True
@ -164,6 +166,9 @@ class IRCServer(server.Server):
def run(self): def run(self):
if not self.connected: if not self.connected:
self.s = socket.socket() #Create the socket self.s = socket.socket() #Create the socket
if self.ssl:
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
self.s = ctx.wrap_socket(self.s)
try: try:
self.s.connect((self.host, self.port)) #Connect to server self.s.connect((self.host, self.port)) #Connect to server
except socket.error as e: except socket.error as e:

4
bot.py
View File

@ -183,9 +183,9 @@ class Bot:
self.update_timer() 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""" """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_hook = lambda h: self.hooks.add_hook("irc_hook", h, self)
srv.add_networkbot = self.add_networkbot srv.add_networkbot = self.add_networkbot
srv.send_bot = lambda d: self.send_networkbot(srv, d) srv.send_bot = lambda d: self.send_networkbot(srv, d)

View File

@ -2,12 +2,10 @@
# coding=utf-8 # coding=utf-8
import sys import sys
import socket
import signal import signal
import os import os
import re import re
import subprocess import subprocess
import shlex
import traceback import traceback
from datetime import datetime from datetime import datetime
from datetime import timedelta from datetime import timedelta
@ -164,7 +162,7 @@ for correct in config.getNodes("correction"):
print ("%d corrections loaded"%len(CORRECTIONS)) print ("%d corrections loaded"%len(CORRECTIONS))
for serveur in config.getNodes("server"): 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) srv.launch(None)
def sighup_h(signum, frame): def sighup_h(signum, frame):

View File

@ -64,7 +64,8 @@ def load_file(filename, context):
# Preset each server in this file # Preset each server in this file
for server in config.getNodes("server"): for server in config.getNodes("server"):
if context.addServer(server, config["nick"], if context.addServer(server, config["nick"],
config["owner"], config["realname"]): config["owner"], config["realname"],
server.hasAttribute("ssl")):
print (" Server `%s:%s' successfully added." print (" Server `%s:%s' successfully added."
% (server["server"], server["port"])) % (server["server"], server["port"]))
else: else: