#!/usr/bin/env python3
# -*- coding: latin-1 -*-

import os
i
class Jail:


    def __init__(self, name, files, ban):
         self.name = name
         self.files = files
         self.sizes = [None] * len(files)
         self.new_sizes = [None] * len(files)
         self.fd = [None] * len(files)
         self.ban = ban
         self.initSize()


    """ Cette fonction initialise les fichiers pour initiÃ©
    la valeur "size" de chaque fichier. """


    def initSize(self):
        for i in range(0, len(self.files)):
            try:
                self.sizes[i] = os.stat(self.files[i]).st_size
            except IOError:
                print ("Could get size for ['%s'] ! please verify file configuration" % self.files[i])
                self.sizes[i] = None


    """ Fonction qui update la taille des fichiers de la classe
    Cela permet par la suite de detecter une modification du
    fichier """



    def newSize(self):
        for i in range(0, len(self.files)):
            if self.sizes[i] is not None:
                try:
                    self.new_sizes[i] = os.stat(self.files[i]).st_size
                except IOError:
                    print ("Could get size for %s ! please verify file configuration" % self.files[i])
                    self.new_sizes[i] = 0


    """ Fonction qui verifie en runtime l'intÃ©gralitÃ© des fichiers logs
    de la classe , Si un fichier est modifier , on extrait les lignes
    pour traitement et on analyse ces nouvelles lignes. Sinon cette
    fonction ne fait rien """


    def CheckModify(self):
        self.newSize()
        for i in range(0, len(self.files)):
            if self.new_sizes[i] != self.sizes[i]:
                print ("fichier modifier")
                self.fd[i] = self.openFile(self.files[i])
                if self.fd[i] is not None:
                    self.fd[i].seek(self.sizes[i], 0)
                    lines = self.ClearTab(self.fd[i].readlines())
                    print (lines)
                self.sizes[i] = self.new_sizes[i]

    """Fonction qui permet de supprimer le retour Ã  la ligne
    de toute les lignes lu dans le fichier de log """


    def ClearTab(self, lines):
        for i in range(0, len(lines)):
            lines[i] = lines[i].rstrip()
        return (lines)


    """ Fonction qui retourne un file descriptor si l'ouverture du fichier
    passÃ© en parametre Ã  rÃ©ussi, sinon retourne 'None' (Ã©quivalent Ã  NULL) """


    def openFile(self, file):
        try:
            fd_ssh = open(file,"r")
            return fd_ssh;
        except IOError:
            print ("Could not open file! please verify file configuration")
            return None;

def detectFlag(s, key):
    if s.find(key) == -1:
        return 0
    else:
        return 1

if __name__ == '__main__':
    print ("Jail Security ban")
    ssh_log = "/var/log/auth.log"
    ban = Ban()
    sshJail = Jail("ssh", [ssh_log, "toto"], ban)
    while True:
        sshJail.CheckModify()
