コード例 #1
0
ファイル: updater.py プロジェクト: piero/WebDiff
import threading
import time
import datetime
from logger import Logger
import random

logger = Logger('updater')
logger.addLogFile('webdiff.log')


class WebPageUpdater(threading.Thread):
    def __init__(self, threadId, webpage, updaters, callback, callback_arg, run_once):
        threading.Thread.__init__(self)
        self.threadId = threadId
        self.webpage = webpage
        self.updated_pages = callback_arg['updated_webpages']
        self.allowedToLive = True
        self.callback = callback
        self.callback_arg = callback_arg
        self.runOnce = run_once
        self.__threads = updaters


    def run(self):
        while self.allowedToLive:
            logger.debug(str(self) + ": RUNNING")
            updated = self.webpage.update()        # Refresh the web page
            if updated == True:
                logger.info("!!! UPDATED !!! " + self.webpage.name)
                self.updated_pages.append(self.webpage)
                if self.callback is not None:
コード例 #2
0
ファイル: mailsender.py プロジェクト: piero/WebDiff
import sys
import smtplib
import threading
from logger import Logger
from email_recipient import EmailRecipient
from server_credentials import ServerCredentials, DecodeString
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


logger = Logger("mailsender")
logger.addLogFile("webdiff.log")


class EmailList:
    def __init__(self):
        self.recipients = []
        self.messages = []


class MailSenderThread(threading.Thread):
    def __init__(self, emails, credentials):
        threading.Thread.__init__(self)
        self.__emails = emails
        self.__credentials = credentials

    def run(self):
        try:
            server = smtplib.SMTP(host=self.__credentials.smtp_server, port=self.__credentials.smtp_port, timeout=30)
            server.set_debuglevel(1)
            server.starttls()
コード例 #3
0
ファイル: ip_detector.py プロジェクト: piero/IpUpdater
class IPDetector:
    
    def __init__(self, config_file):
        self.config = ConfigParser.ConfigParser()
        self.config.read(config_file)
        self.url = self.config.get('detection', 'url')
        self.data = self.config.get('detection', 'datafile')

        log_level = self.config.get('log', 'level')
        log_file = self.config.get('log', 'file')
        self.logger = Logger('IP Updater')
        self.logger.setLevel(log_level)
        self.logger.addLogFile(log_file)

        self.current_ip = ''


    def setDataFile(self, data_file):
        self.data = data_file


    def setLogLevel(self, log_level):
        self.logger.setLevel(log_level)


    def __writeToFile(self, data):
        self.logger.debug('Writing %s to %s...' % (data, self.data))
        f = open(self.data, 'w')
        f.write(data)
        f.close()
    
    
    def __readFromFile(self):
        self.logger.debug('Reading from %s...' % self.data)
        data = ''
        try:
            f = open(self.data, 'r')
            data = f.read()
            f.close()
        except IOError:
            # File doesn't exist, create it
            open(self.data, 'w').close()
        return data
    
    
    def IpHasChanged(self):
        self.current_ip = self.__readFromFile()
        new_ip = self.__getFromUrl(self.url)
        
        if self.current_ip != new_ip:
            self.logger.info('IP address has changed: %s --> %s' % (self.current_ip, new_ip))
            self.__writeToFile(new_ip)

            email_enabled = self.config.getboolean('email', 'enabled')
            if email_enabled:
                email_text = 'IP changed: ' + self.current_ip + ' --> ' + new_ip
                self.__notifyByEmail(email_text)

            self.current_ip = new_ip

            for domain, hashkey in self.config.items('domains'):
                self.__updateFreeDns(domain, hashkey)
            return (True, self.current_ip)
        
        return (False, self.current_ip)
    
    
    def __notifyByEmail(self, msg):
        host = self.config.get('email', 'host')
        port = self.config.get('email', 'port')
        username = self.config.get('email', 'username')
        password = self.config.get('email', 'password')
        email_sender = EmailSender(host, port, username, password)

        to_addr = self.config.get('email', 'recipient')
        from_addr = self.config.get('email', 'from_addr')
        if email_sender.isValidEmailAddress(to_addr):
            self.logger.info('Sending notification email to %s' % to_addr)
            email_sender.send(from_addr,
                            to_addr,
                            'IP address changed',
                            msg)
        else:
            self.logger.error('Invalid email recipient: %s' % to_addr)
    

    def __updateFreeDns(self, domain, url):
        self.logger.info('Updating %s...' % domain)
        freeDns_url = 'http://freedns.afraid.org/dynamic/update.php?' + url
        result = self.__getFromUrl(freeDns_url)
        self.logger.info('FreeDNS said: %s' % result)

    
    def __getFromUrl(self, url):
        self.logger.info('Contacting %s...' % url)
        req = urllib2.Request(url)
        try:
            response = urllib2.urlopen(req, timeout=60)
            
        except ValueError, e:
            self.logger.error('[!] Invalid URL: ' + str(e))
            raise ValueError('Invalid URL: ' + url)
        
        except urllib2.URLError, e:
            # TODO Handle exception
            self.logger.error('[!] Error opening URL: ' + str(e))
            raise ValueError('Error opening URL: ' + url)