class Detecteur(db.Model): id = db.Column(db.Integer(), primary_key=True) designation = db.Column(db.String(255), nullable=False) regles = db.relationship("RechercheInteret", secondary='lien_detecteur_recherche_interet', lazy='joined', enable_typechecks=False, cascade="save-update, merge") # type: list[RechercheInteret] createur_id = db.Column(db.ForeignKey('user.id'), nullable=True) createur = db.relationship(User, primaryjoin="User.id==Detecteur.createur_id") date_creation = db.Column(db.DateTime(timezone=True), nullable=False, default=datetime.datetime.utcnow()) date_modification = db.Column(db.DateTime(timezone=True), nullable=False, default=datetime.datetime.utcnow()) responsable_derniere_modification_id = db.Column(db.ForeignKey('user.id'), nullable=True) responsable_derniere_modification = db.relationship(User, primaryjoin="User.id==Detecteur.responsable_derniere_modification_id") def __repr__(self): return _('<Détection DE \'{detecteur_nom}\'>').format(detecteur_nom=self.designation) def transcription(self): """ :rtype: hermes.detecteur.Detecteur """ from hermes.detecteur import Detecteur as HermesDetecteur mon_detecteur = HermesDetecteur( self.designation ) for regle in self.regles: mon_detecteur.je_veux( get_child_polymorphic(regle).transcription() ) return mon_detecteur
class RechercheInteret(db.Model): __tablename__ = 'recherche_interet' id = db.Column(db.Integer(), primary_key=True) designation = db.Column(db.String(255), nullable=False) detecteurs = db.relationship(Detecteur, secondary='lien_detecteur_recherche_interet') est_obligatoire = db.Column(db.Boolean(), nullable=False) focus_cle = db.Column(db.String(255), nullable=True) createur_id = db.Column(db.ForeignKey('user.id'), nullable=True) createur = db.relationship( User, primaryjoin="User.id==RechercheInteret.createur_id") date_creation = db.Column(db.DateTime(timezone=True), nullable=False, default=datetime.datetime.utcnow()) date_modification = db.Column(db.DateTime(timezone=True), nullable=False, default=datetime.datetime.utcnow()) responsable_derniere_modification_id = db.Column(db.ForeignKey('user.id'), nullable=True) responsable_derniere_modification = db.relationship( User, primaryjoin= "User.id==RechercheInteret.responsable_derniere_modification_id") mapped_class_child = db.Column(db.String(128), nullable=True) friendly_name = db.Column(db.String(255), nullable=True) __mapper_args__ = { 'polymorphic_on': mapped_class_child, 'polymorphic_identity': str(Detecteur).replace('.Detecteur', '.RechercheInteret'), } def __repr__(self): return _('<Recherche DE \'{nom}\'>').format(nom=self.designation) def transcription(self): """ Transforme un critère "RechercheInteret < db.Model" en objet "RechercheInteret < hermes" :rtype: hermes.detecteur.RechercheInteret """ raise NotImplemented
class BoiteAuxLettresImap(db.Model): id = db.Column(db.Integer(), primary_key=True) designation = db.Column(db.String(255), nullable=False) activation = db.Column(db.Boolean(), default=False) hote_distante = db.Column(db.String(255), nullable=False) nom_utilisateur = db.Column(db.String(255), nullable=False) mot_de_passe = db.Column(db.String(255), nullable=False) dossier_cible = db.Column(db.String(255), nullable=False, default='INBOX') enable_tls = db.Column(db.Boolean(), nullable=False, default=True) verification_certificat = db.Column(db.Boolean(), nullable=False, default=True) legacy_tls_support = db.Column(db.Boolean(), nullable=False, default=False) createur_id = db.Column(db.ForeignKey('user.id', ondelete='SET NULL'), nullable=True) createur = db.relationship( User, primaryjoin="User.id==BoiteAuxLettresImap.createur_id") date_creation = db.Column(db.DateTime(timezone=True), nullable=False) date_modification = db.Column(db.DateTime(timezone=True), nullable=False) responsable_derniere_modification_id = db.Column(db.ForeignKey( 'user.id', ondelete='SET NULL'), nullable=True) responsable_derniere_modification = db.relationship( User, primaryjoin= "User.id==BoiteAuxLettresImap.responsable_derniere_modification_id") def get_mailtoolbox(self): """ :return: :rtype: MailToolbox """ existant = MailToolbox.fetch_instance(self.hote_distante, self.nom_utilisateur) if existant is None: return MailToolbox(self.hote_distante, self.nom_utilisateur, self.mot_de_passe, dossier_cible=self.dossier_cible, verify_peer=self.verification_certificat, use_secure_socket=self.enable_tls, legacy_secure_protocol=self.legacy_tls_support) return existant
class OperationLogiqueRechercheInteret(RechercheInteret): __tablename__ = 'operation_logique_recherche_interet' id = db.Column(db.Integer, db.ForeignKey('recherche_interet.id'), primary_key=True) operande = db.Column(db.Enum("AND", "NOT", 'XOR', 'OR'), nullable=False) sous_regles = db.relationship(RechercheInteret, secondary='lien_sous_regle_operation_logique', enable_typechecks=False, cascade="save-update, delete") __mapper_args__ = { 'polymorphic_identity': str(RechercheInteret).replace('RechercheInteret', 'OperationLogiqueRechercheInteret'), } def __repr__(self): return _('<Opération sur Critère(s) {operande} "{nom}">').format(operande=self.operande, nom=self.designation) def transcription(self): """ :rtype: hermes.detecteur.OperationLogiqueRechercheInteret """ from hermes.detecteur import OperationLogiqueRechercheInteret as Critere kwargs = dict() for sous_regle in self.sous_regles: kwargs['ma_cond_{}'.format(sous_regle.id)] = sous_regle.transcription() kwargs['friendly_name'] = self.friendly_name return Critere( self.designation, self.operande, **kwargs )
class RechercheInteretExecution(db.Model): id = db.Column(db.BigInteger(), primary_key=True, autoincrement=True) automate_execution_id = db.Column(db.BigInteger(), db.ForeignKey(AutomateExecution.id), nullable=False) automate_execution = db.relationship(AutomateExecution) recherche_interet_id = db.Column(db.Integer(), db.ForeignKey(RechercheInteret.id)) recherche_interet = db.relationship(RechercheInteret) validation_recherche_interet = db.Column(db.Boolean(), default=False, nullable=False) payload = db.Column(db.Text(), nullable=True)
class Configuration(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) designation = db.Column(db.String(255), nullable=False, unique=True) valeur = db.Column(db.Text(), nullable=False) createur_id = db.Column(db.ForeignKey('user.id', ondelete='SET NULL'), nullable=True) createur = db.relationship( User, primaryjoin="User.id==Configuration.createur_id") date_creation = db.Column(db.DateTime(timezone=True), nullable=False) date_modification = db.Column(db.DateTime(timezone=True), nullable=False) responsable_derniere_modification_id = db.Column(db.ForeignKey( 'user.id', ondelete='SET NULL'), nullable=True) responsable_derniere_modification = db.relationship( User, primaryjoin= "User.id==Configuration.responsable_derniere_modification_id") format = db.Column(db.Enum("JSON", 'YAML', 'AUTRE'), nullable=False) def __repr__(self): return '<Configuration \'{}\'>'.format(self.designation) def on_model_change(self, form, model, is_created): """ :param form: :param Configuration model: :param bool is_created: :return: """ if is_created is True: model.createur = current_user model.date_creation = datetime.now() model.date_modification = datetime.now() model.responsable_derniere_modification = current_user Session.charger_input(model.designation, model.valeur, model.format)
class ActionNoeudExecution(db.Model): id = db.Column(db.BigInteger(), primary_key=True, autoincrement=True) automate_execution_id = db.Column(db.BigInteger(), db.ForeignKey(AutomateExecution.id, ondelete='CASCADE'), nullable=False) automate_execution = db.relationship( AutomateExecution, cascade='all, save-update, delete, merge') action_noeud_id = db.Column( db.Integer(), db.ForeignKey(ActionNoeud.id, ondelete='CASCADE')) action_noeud = db.relationship(ActionNoeud) validation_action_noeud = db.Column(db.Boolean(), default=False, nullable=False) args_payload = db.Column(db.Text(), nullable=True) payload = db.Column(db.Text(), nullable=True)
class User(admin_db.Model, UserMixin): id = admin_db.Column(admin_db.Integer, primary_key=True) first_name = admin_db.Column(admin_db.String(255)) last_name = admin_db.Column(admin_db.String(255)) email = admin_db.Column(admin_db.String(255), unique=True, nullable=False) password = admin_db.Column(admin_db.String(255), nullable=False) active = admin_db.Column(admin_db.Boolean(), nullable=False) roles = admin_db.relationship('Role', secondary=roles_users, backref='users') def __str__(self): return self.first_name + " " + self.last_name + " <" + self.email + ">"
class AutomateExecution(db.Model): id = db.Column(db.BigInteger(), primary_key=True, autoincrement=True) automate_id = db.Column(db.Integer(), db.ForeignKey(Automate.id, ondelete='CASCADE'), nullable=False) automate = db.relationship(Automate, cascade='all, save-update, delete, merge') sujet = db.Column(db.String(255), nullable=False) corps = db.Column(db.Text(), nullable=False) date_creation = db.Column(db.DateTime(timezone=True), nullable=False) detecteur_id = db.Column(db.Integer(), db.ForeignKey(Detecteur.id, ondelete='CASCADE'), nullable=False) detecteur = db.relationship(Detecteur, cascade='all, save-update, merge') validation_detecteur = db.Column(db.Boolean(), default=False, nullable=False) validation_automate = db.Column(db.Boolean(), default=False, nullable=False) explications_detecteur = db.Column(db.Text(), nullable=True) logs = db.Column(db.Text(), nullable=True) date_finalisation = db.Column(db.DateTime(timezone=True), nullable=False) actions_noeuds_executions = db.relationship('ActionNoeudExecution') recherches_interets_executions = db.relationship( 'RechercheInteretExecution')