Commit e05a6b80 by Tu Nombre

agregado el estado de mails

1 parent 7f882c16
import requests, json, config, datetime import requests, json, config, datetime, smtplib
class StatePhoneWs(): class StatePhoneWs():
"""Esta clase consulta el estado de los telefonos y los cachea """Esta clase consulta el estado de los telefonos y los cachea
...@@ -40,3 +40,52 @@ class StatePhoneWs(): ...@@ -40,3 +40,52 @@ class StatePhoneWs():
return(cel["estado"]) return(cel["estado"])
return(False) return(False)
class StateMail():
"""Esta clase consulta el estado de los mail server y los cachea
la consulta tiene 60 segundos de valides, para mejorar la perfrmance"""
def __init__(self):
self.Consultas = {}#{MailUSer-pass-host-str(port):{"hora": datetime.datetime.now, "estado": self.chequear_stado_WB(telefono)},}
def chequear_stado_Server(self, User, Pass, Port, Host):
try:
self.SMTPcliente(User, Pass, Port, Host)
consulta = True
except:
consulta = False
return(consulta)
def ChequearMailServer(self, User, Pass, Port, Host):
"""Chequea estado es el server remoto si esta conectado se almasena la
respuesta en cache durante 60 segundos para mejorar performance y si no esta
disponible no se almasena y la proxima respuesta debera hacerse contra el server
remoto para asegurarme de q se solucione el problema"""
test = self.revisarCache(User, Pass, Port, Host)
if not test == "Vencido":
return(test)
W = self.chequear_stado_Server(User, Pass, Port, Host)
#if False == W:#si hay algun error no actualiso el estado en cache
# return(W)
hora = datetime.datetime.now() + datetime.timedelta(seconds=120)
self.Consultas[self._GenerarKey(User, Pass, Port, Host)] = {"hora": hora,
"estado": W}
return(W)
def revisarCache(self, User, Pass, Port, Host):
if not self._GenerarKey(User, Pass, Port, Host) in self.Consultas.keys():
return("Vencido")
cache = self.Consultas[self._GenerarKey(User, Pass, Port, Host)]
if datetime.datetime.now() < cache["hora"]:
return(cache["estado"])
return("Vencido")
def _GenerarKey(self, User, Pass, Port, Host):
base = """{}-{}-{}-{}"""
completo = base.format(User, Pass, str(Port), Host)
return(completo)
def SMTPcliente(self, User, Pass, Port, Host):
dg = smtplib.SMTP(host=Host, port=Port, timeout=10)
dg.starttls()
dg.login(User,Pass)
dg.quit()
#-*- coding: utf-8 -*- #-*- coding: utf-8 -*-
from flask import Flask, render_template, json, request, url_for from flask import Flask, render_template, json, request, url_for, jsonify
from werkzeug.datastructures import FileStorage from werkzeug.datastructures import FileStorage
from process import Process from process import Process
from python_arptable import get_arp_table from python_arptable import get_arp_table
from enums import States, Table from enums import States, Table
from Wpp1State import StatePhoneWs from Wpp1State import StatePhoneWs, StateMail
import os, ipdb, time, threading, random, datetime, config import os, ipdb, time, threading, random, datetime, config
...@@ -28,6 +28,7 @@ operation_timer = 86400 ...@@ -28,6 +28,7 @@ operation_timer = 86400
process = Process("messages.db") process = Process("messages.db")
#Cache de estado de telefonos #Cache de estado de telefonos
TelState = StatePhoneWs() TelState = StatePhoneWs()
MailState = StateMail()
@app.route('/') @app.route('/')
def main(): def main():
...@@ -49,6 +50,13 @@ def estadoWabox(tel): ...@@ -49,6 +50,13 @@ def estadoWabox(tel):
xi = TelState.ChequearTelefono(tel) xi = TelState.ChequearTelefono(tel)
return(xi) return(xi)
@app.route("/state/mail", methods = ['POST'])
def estadoMail():
datos = request.json
#print(datos)
test = MailState.ChequearMailServer(datos["user"], datos["pass"], int(datos["port"]), datos["host"])
return(str(test))
# Guarda archivos del emisor en una nueva carpeta (desencriptados) # Guarda archivos del emisor en una nueva carpeta (desencriptados)
# Pide guardar en base de datos una preinstancia del mensaje # Pide guardar en base de datos una preinstancia del mensaje
@app.route('/data', methods = ['POST']) @app.route('/data', methods = ['POST'])
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!