예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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)
예제 #5
0
    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
예제 #6
0
    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))
예제 #7
0
        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
예제 #8
0
    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...")