1
0
Fork 0

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 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:

4
bot.py
View File

@ -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)

View File

@ -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):

View File

@ -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: