def login(self, userId, userPass): #COMPROBACIONES DATOS #compruebao tipos de datos if not isinstance(userId, str) or not isinstance(userPass, str): if self.debug: logging.debug("El usuario y la contraseña deben ser strings!") return -1 #compruebo longitud nbombre y pass if len(userId) < 4 or len(userPass) < 4: if self.debug: logging.debug("El usuario y la contraseña deben" + \ "ser de al menos 4 chars de longitud!") return -1 #REALIZO OPERACIONES PARA LOGIN #comprobamos que el nombre del usuario existe if self.checkUserName(userId): #Existe usuario. #Ahora comprobamos contraseña correctPass = self.checkPassword(userId, userPass) if correctPass: #Usuario y contraseña correctos. #Añado el valor de la cookie y el usuario al #que corresponde. cookie = self.genCookieVal(userId) entrada = {cookie: userId} self.listaSesiones.update(entrada) #Consultando la cookie en este diccionario, nos #devolverá el usuario al que pertenece la cookie #--- #Añado también la información de caducidad de la cookie #Será la fecha actual + tiempoCaducidad. #Es decir, si tiempoCaducidad son 30 minutos, #caducidad contendrá la fecha de dentro de 30 minutos. caducidad = date_handler.getDatetimeMs() + self.tiempoCaducidad entrada2 = {cookie: caducidad} self.listaCaducidad.update(entrada2) if self.debug: logging.debug("MONGO_USER:"******"Sesion iniciada. Id: " + str(cookie)) logging.debug("Caducidad Sesion:") fechaAct = date_handler.getDatetimeMs() logging.debug("Tiempo Actual: " + str(fechaAct)) logging.debug("conversion: " + \ str(date_handler.msToDatetime(fechaAct))) cadcook = self.listaCaducidad[cookie] logging.debug("Caducidad Cookie: " + str(cadcook)) logging.debug("conversion: " + \ str(date_handler.msToDatetime(cadcook))) return cookie else: if self.debug: logging.debug("Contraseña incorrecta!") return -1 else: if self.debug: logging.debug("No existe el usuario: " + userId) return -1
def user_op(self): repetir = True debug_str = raw_input("Activar Modo Debug?[Y\N]: ") if debug_str == "Y" or debug_str == "y": debug = True else: debug = False #Bucle principal while repetir: opcion = raw_input( "Operacion:\n1.Leer BD.\n2.Escribir BD.\n3.Ver listas temporales.\n" ) #Añadir canal if opcion == "1": self.readDataDB(debug) #Añadir variable elif opcion == "2": self.writeDataDB(str(self.getData()), str(date_handler.getDatetimeMs()), debug) elif opcion == "3": logging.debug("Lista fechas: ") logging.debug(self.listaGlobalFecha) logging.debug("Lista numeros: ") logging.debug(self.listaGlobalNumero) #opcion no valida else: logging.debug("opcion no valida") #continuamos con el bucle opcion2 = raw_input("Quiere realizar otra operacion? Y/N: ") if (opcion2 != "Y" and opcion2 != "y"): repetir = False
def deleteExpiredCookie(self, sessionId): #OBtengo fecha de caducidad para la sesion indicada try: cadTemp = self.listaCaducidad[sessionId] except KeyError: #Si no existe la cookie no ha caducado, #devuelvo False ya que no he borrado nada return False #Obtengo fecha actual para comparar fechaAct = date_handler.getDatetimeMs() #DEBUG if self.debug: logging.debug("MongoUser - deleteExpiredCookie()") logging.debug("Fecha act: " + str(fechaAct)) logging.debug("Fecha cad: " + str(cadTemp)) #Comparo fechas. Si la actual es mayor que la de caducidad, borro #la cookie de session. if fechaAct >= cadTemp: if self.debug: nombre = self.getCookieUserName(sessionId) logging.debug("La cookie del usuario " + nombre + " ha caducado.") #Elimino cookie self.logout(sessionId) #Devuelvo True si borro la cookie return True #Devuelvo False si la cookie no ha caducado return False
def deleteExpiredCookies(self): #Si encuentro una cookie a borrar, borrare la entrada #en los diccionarios cuya clave sea ese valor de cookie #mediante el método logout(). Al hacer esto, cambiare el tamaño #de los diccionario listaCaducidad mientras itero por él. #Esto producirá un error de ejecución. #Para evitarlo, crearé una copia del diccionario y utilizaré #las claves de esta copia para iterar a través del original for value in self.listaCaducidad.copy(): #Si el tiempo actual es mayor que la fecha #de caducidad, significa que ha caducado la cookie fechaAct = date_handler.getDatetimeMs() cadTemp = self.listaCaducidad[value] #DEBUG if self.debug: logging.debug("MongoUser - deleteExpiredCookies()") logging.debug("Fecha act: " + str(fechaAct)) logging.debug("tipo: " + str(type(fechaAct))) logging.debug("Fecha cad: " + str(cadTemp)) logging.debug("tipo: " + str(type(cadTemp))) if fechaAct >= cadTemp: if self.debug: logging.debug("La cookie con valor " + str(value) \ + " ha caducado.") #Si ha caducado, realizo un logout(). #Esto borrará el valor de la cookie #de listaSesiones y listaCaducidad self.logout(value)
def login(self, userId): #COMPROBACION DE DATOS if not isinstance(userId, str): if self.debug: logging.debug("El usuario debe ser una cadena!") return -2 #LOGIN res = self.checkUserName(userId) if res: #existe usuario. #genero cookie sesion. cookie = self.genCookieVal(userId) #Añado a la lista de sesiones de OAuth entrada = {cookie: userId} self.listaSesiones.update(entrada) #Consultando la cookie en este diccionario, nos #devolverá el usuario al que pertenece la cookie #--- #Añado también la información de caducidad de la cookie #Será la fecha actual + tiempoCaducidad. #Es decir, si tiempoCaducidad son 30 minutos, #caducidad contendrá la fecha de dentro de 30 minutos. caducidad = date_handler.getDatetimeMs() + self.tiempoCaducidad entrada2 = {cookie: caducidad} self.listaCaducidad.update(entrada2) if self.debug: logging.debug("MONGO_OAUTH: ") logging.debug("Sesion iniciada. Id: " + str(cookie)) logging.debug("Caducidad Sesion:") fechaAct = date_handler.getDatetimeMs() logging.debug("Tiempo Actual: " + str(fechaAct)) logging.debug("conversion: " + \ str(date_handler.msToDatetime(fechaAct))) cadcook = self.listaCaducidad[cookie] logging.debug("Caducidad Cookie: " + str(cadcook)) logging.debug("conversion: " + \ str(date_handler.msToDatetime(cadcook))) return cookie else: logging.debug("MONGO_OAUTH:") logging.info( "No existe el usuario con el que se ha intentado iniciar sesión." ) return -1
def refreshCookie(self, cookieVal): if self.debug: logging.debug("MongoUser - refreshCookie()") logging.debug("Actualizando caducidad cookie - " + str(cookieVal)) logging.debug("Antes: " + str(self.listaCaducidad)) if cookieVal in self.listaCaducidad: #Actualiza la fecha para dentro de tiempoCaducidad minutos caducidad = date_handler.getDatetimeMs() + self.tiempoCaducidad self.listaCaducidad[cookieVal] = caducidad if self.debug: logging.debug("Despues: " + str(self.listaCaducidad))
return res if __name__ == "__main__": setup_log() c = MongoHandler() #c.debug=True #c.setColeccion("test") #c.readRandom() #RND from web_fetcher.rnd_fetcher import Rnd_fetcher rndGen = Rnd_fetcher() numRand = rndGen.get_web_rnd() logging.debug("numRand: " + str(numRand)) fechaObt = date_handler.getDatetimeMs() logging.debug("fecha aprox: " + str(fechaObt)) resw=c.writeRandom(numRand) logging.debug("resw: " + str(resw)) resr=c.readRandom() logging.debug("resr: " + str(resr)) logging.debug("ListaNumeros: ") logging.debug(c.listaGlobalNumero) logging.debug("ListaFechas: ") logging.debug(c.listaGlobalFecha) #fechaPrev=123,2131215654 fechaPrev=1522581148056L
def upload(self): #MongoClient opened before fork. Create MongoClient only after forking. #See PyMongo's documentation for details: #http://api.mongodb.org/python/current/faq.html#is-pymongo-fork-safe #No es seguro que esta clase reciba la instancia de MongoDB del main #Por lo que creare en esta clase mi propia instancia de MongoHandler #Esto no debería importar ya que aunque sean dos instancias distintas #leerán de la misma base de datos. #La instancia en esta clase se dedicará principalmente a escribir y la #que está en el main a leer. # #Debo crearla una vez dentro del subproceso creado, es decir, #dentro de la función upload que es la que ejecuta el proceso. #UPDATE: Ya no es necesario, porque la funcion upload() se #lanza mediante un hilo y no un proceso, por lo que ya no #se realiza ningún fork() que es sobre lo que va este aviso. #self.__MongoHand= mongo_rnd.MongoHandler() #Obtengo la condición de forma que este hilo pueda utlizar #cond.wait() para esperar. self.cond.acquire() while self.__enable.value: #obtenemos numero aleatorio a insertar rnd = self.__RndGen.get_web_rnd() if self.__debug: logging.debug("num aleatorio a escribir: " + str(rnd)) """ #BORRA ESTO!----------------------------- #Este trozo de codigo sirve para que esta #clase no suba numeros. logging.warning("SUBIDA DE NUMEROS DESACTIVADA!!!") self.__enable.value = False self.__SQLHand.readDataDB() self.__BeeHand.readRandom() self.__MongoHand.readRandom() #BORRA ESTO!----------------------------- """ """ if self.__debug: logging.debug("rnd_uploader - Las listas en rnd_uploader: ") logging.debug("BeeHandler : " + str(self.__BeeHand.listaGlobalNumero)) logging.debug("SQLHandler : " + str(self.__SQLHand.listaGlobalNumero)) logging.debug("MongoHandler : " + str(self.__MongoHand.listaGlobalNumero)) """ #Escribir if (self.__enable.value): #La funcion de obtener numeros aleatorios #devuelve -1 en caso de no haber podido conectar #con la web de donde obtenemos los numeros aleatorios. #En este caso, rnd sera = a -1, por lo que no guardaremos #este valor en las BDs. if rnd > -1: #escribo en Beebotte. 0 si bien. 1 si mal. resBee = self.__BeeHand.writeRandom(rnd, self.__debug) #solo necesario para la BD local, ya que Beebotte #almacena automaticamente la fecha fecha = str(date_handler.getDatetimeMs()) #escribo en MongoDB. 0 si bien. 1 si mal. resMongo = self.__MongoHand.writeRandom(rnd, fecha) #escribo en MySQL. 0 si bien. 1 si mal. resSQL = self.__SQLHand.writeDataDB( rnd, fecha, self.__debug) #--- #envio SSE (notificación a los clientes con #el número obtenido) #FORMATO SSE (parseado mediante js en el cliente) #NUM,FECHA#BD1,BD2,BD3, msg = str(rnd) + "," + str(fecha) + "#" if resBee == 0: msg += "Beebotte," if resMongo == 0: msg += "MongoDB," if resSQL == 0: msg += "MySQL," res = self.__SSEHand.createSSE(str(msg)) #if self.__debug: if True: logging.info("ENVIANDO SSE: " + str(msg)) logging.debug(res) """ #ACTUALIZO LOS DATOS EN LAS LISTAS LOCALES #DE LOS MANEJADORES self.__SQLHand.readDataDB() self.__BeeHand.readRandom() self.__MongoHand.readRandom() """ """ if self.__debug: logging.debug("Tablas MySQL:") logging.debug(self.__SQLHand.listaGlobalFecha) logging.debug(self.__SQLHand.listaGlobalNumero) logging.debug("Tablas Bee:") logging.debug(self.__BeeHand.listaGlobalFecha) logging.debug(self.__BeeHand.listaGlobalNumero) logging.debug("Tablas Mongo:") logging.debug(self.__MongoHand.listaGlobalFecha) logging.debug(self.__MongoHand.listaGlobalNumero) """ #esperar entre escrituras try: #time.sleep(self.__tiempo) #Utilizo la condicion para esperar #el tiempo entre escrituras. #Si la funcion finalizar() llama #al método cond.notify() mientras #hago wait(), la espera se #interrumpe, al contrario que con #time.sleep. self.cond.wait(self.__tiempo) except: if self.__debug: logging.debug("Uploader.upload(): sleep interrumpido!") #Libero la condicion antes de salir. self.cond.release() logging.info("Uploader.upload(): saliendo...")