Пример #1
0
def getCookieUserName(request):
    #Obtengo tipo de Cookie : local o OAuth
    idTipo=request.cookies.get('tipoLogin')
    #Obtengo valor Cookie
    idSesion=request.cookies.get('SessionId')
    #Inicializo nombreUsuario
    nombreUsuario=None
    if idTipo=="local":
        #Creo instancia del manjador de usuarios local
        UserHandler = UserManager()
        #Si la cookie ha caducado, me mostrara None como Usuario
        nombreUsuario = UserHandler.getCookieUserName(idSesion)
    elif idTipo=="oauth":
        #Creo instancia del manejador de usuarios OAuth
        OAuthHandler = OAuthUserManager()
        #Si la cookie ha caducado, me mostrara None como Usuario
        idUsuario = OAuthHandler.getCookieUserName(idSesion)
        nombreUsuario = OAuthHandler.getUserName(idUsuario)
    #DEBUG. Muesto info
    logging.debug("------getCookieUserName()----------")
    logging.debug("Tipo Sesion: " + str(idTipo))
    logging.debug("SESION: " + str(idSesion))
    logging.debug("Usuario: " + str(nombreUsuario))
    logging.debug("--------------------------------")

    return nombreUsuario
Пример #2
0
def webLogout():
    #Obtengo info de las cookies
    idSesion = request.cookies.get('SessionId')
    #tipo de login
    idTipo = request.cookies.get('tipoLogin')
    #OAUTH
    if idTipo == "oauth":
        #Creo instancia del manejador de usuarios OAuth
        OAuthHandler = OAuthUserManager()
        #Logout al usuario
        logging.info("(OAuth)logging out user: "******"local":
        logging.info("(Local)logging out user: " + idSesion)
        #Creo instancia del manejador de usuarios local
        UserHandler = UserManager()
        #Logout al usuario
        UserHandler.logout(idSesion)

    #Retornamos a la pag de login
    response = make_response(redirect(url_for('blueUser.webLogin')))
    #Borramos datos cookies
    response.set_cookie('umbral', '', expires=0)
    return response
Пример #3
0
def webAccount():
    #Obtengo info de usuario
    #Obtengo info de las cookies
    idSesion = request.cookies.get('SessionId')
    #tipo de login
    idTipo = request.cookies.get('tipoLogin')

    #Creo instancia del manejador de usuarios local
    UserHandler = UserManager()
    #Creo instancia del manejador de usuarios OAuth
    OAuthHandler = OAuthUserManager()

    #Incializamos vairables
    userid = None
    nombre = None
    email = None
    proveedor = None
    umbral = None

    #OAUTH
    if idTipo == "oauth":
        #Obtengo informacion Usuario OAuth
        userid = OAuthHandler.getCookieUserName(idSesion)
        nombre = OAuthHandler.getUserName(userid)
        email = OAuthHandler.getUserMail(userid)
        proveedor = OAuthHandler.getUserProvider(userid)
        umbral = OAuthHandler.getUmbral(userid)
    #LOCAL
    elif idTipo == "local":
        #Obtengo información Usuario Local
        userid = UserHandler.getCookieUserName(idSesion)
        nombre = userid
        umbral = UserHandler.getUmbral(nombre)

    #LLegados a este punto, si userid == None, una de dos:
    #o el usuario tiene cookie de sesion y le ha caducado,
    #o directamente no tiene cookie de sesion.
    #La forma de proceder en ambos casos es hacer que el
    #cliente inicie sesión en la aplicacion, por lo que
    #le redirigiremos a la pagina de login.
    if userid == None:
        #Creo respuesta
        response = make_response(redirect(url_for('blueUser.webLogin')))

    #En caso contrario, obtenemos los datos y los devolvemos
    else:
        #Creo respuesta
        response = make_response(render_template("accountInfo.html",\
        nombrehtml = nombre, emailhtml = email,\
        proveedorhtml=proveedor, umbralhtml=umbral,\
        tipoRegistrohtml = idTipo))

    #Retorno la respuesta
    return response
Пример #4
0
def setLoginCookies(resp, cookieVal):
    if cookieVal >= 0:
        #Creo instancia del manejador de usuarios local
        UserHandler = UserManager()
        #Asigno cookies
        resp.set_cookie('SessionId', cookieVal)
        resp.set_cookie('tipoLogin', 'local')
        #también pongo umbral en la cookie, para notificaciones
        nombreUsuario = UserHandler.getCookieUserName(cookieVal)
        umbralUsuario = UserHandler.getUmbral(nombreUsuario)
        resp.set_cookie('umbral', str(umbralUsuario))
    return resp
Пример #5
0
def webLogin():
    if request.method == 'GET':
        #CLIENT_ID="324401899197-2cag1rbuoium6s2q96m1i0hm3fjium4g.apps.googleusercontent.com"
        CLIENT_ID = getClientId()
        return render_template("login.html", id_api=CLIENT_ID)

    elif request.method == 'POST':
        #Los convierto a string pues estrán en tipo 'unicode'
        user = str(request.form['user'])
        #user=request.args.get('user','default',type=str)
        passw = str(request.form['pass'])
        #passw=request.args.get('pass','default',type=str)

        #DEBUG
        logging.debug("DEBUG - /login")
        logging.debug("user - type: " + str(type(user)))
        logging.info("user: "******"pass - type: " + str(type(passw)))
        logging.info("pass: "******"url" : url_a_redireccionar,
        #"code": codigo del resultado de la operacion}
        datos = {'url': url, 'code': exito}
        logging.debug("RESPUESTA SERV: " + str(datos))
        resp = make_response(jsonify(datos))
        #---
        #Añado cookies a la respuesta
        resp = setLoginCookies(resp, cookieVal)
        #return redirect(url_for('blueApp.webMain'))
        return resp
Пример #6
0
    def __init__(self, coleccionUsuariosOauth="usuariosOauth", debug=False):
        #def __init__(self, coleccionUsuariosOauth):
        #Igual que el de el padre pero cambiando la coleccion empleada
        #UserManager.__init__(self,coleccionUsuariosOauth,debug)
        UserManager.__init__(self, coleccionUsuariosOauth, debug)
        #Añadimos los campos que no tenia el padre
        #En el dicc recibido, puede ser la entrada ['iss']
        # The ID Token contains a set of claims about the authentication
        # session, including an identifier for the user (sub), the identifier
        # for the identity provider who issued the token (iss), and the
        # identifier of the client for which this token was created (aud).
        #Obtener el proveedor del campo 'iss'
        self.campoProveedor = "provider"
        self.campoEmail = "email"
        self.campoName = "name"
        #
        #SOBRESCRIBO el campo 'username' por el campo id,
        #ya que en mongo_user se empleaba este campo como
        #clave primaria y en esta clase empleare la id como
        #clave primaria, como si fuera el nombre de usuario.
        #
        #El campo campoUsername se emplea en funciones como
        #modUmbral para cambiar el umbral del usuario. Como esas
        #funciones no necesito cambiarlas, sobrescribiré el campo
        #de forma que se utilice el id para buscar el usuario y no
        #el username.
        self.campoUsername = "******"
        #Los campos que siguen igual son los de password (no se
        #utiliza) y el de umbral.
        #
        #Al ser diccionarios, las variables de la instancia
        #referenciarán a las de la clase, por lo que al modificar
        #las listas de la instancia realmente estaré modificando las
        #de la clase
        self.listaSesiones = OAuthUserManager.listaSesiones
        self.listaCaducidad = OAuthUserManager.listaCaducidad

        #debug
        self.debug = True
Пример #7
0
def webRegister():
    logging.debug("/register - METODO: " + str(request.method))

    #GET
    if request.method == 'GET':
        return render_template("register.html")

    #POST
    if request.method == 'POST':
        logging.debug("/register - Estoy en POST")
        username = str(request.form['username'])
        password = str(request.form['password'])
        umbral = float(request.form['umbral'])

        #Creo instancia del manejador de usuarios local
        UserHandler = UserManager()
        #Creacion usuario. Obtengo codigo indicando el resultado en 'exito'.
        exito = UserHandler.createUser(username, password, umbral)
        #url a la que redirigir al cliente si se registra al
        #usuario correctamente.
        url = url_for('blueUser.webLogin')
        #Datos a enviar al cliente en forma de JSON.
        #Deben tener el formato:
        #{"url" : url_a_redireccionar,
        #"code": codigo del resultado de la operacion}
        datos = {'url': url, 'code': exito}
        logging.debug("RESPUESTA SERV: " + str(datos))
        #Creo la respuesta para el cliente.
        #Contendrá los datos en forma JSON
        response = make_response(jsonify(datos))

        #Le envio info sobre el resultado de la operacion y
        #la pagina web a donde hay que redirigir en caso de
        #craecion satisfactoria.
        #Este mensaje es interpretado por el cliente mediante javascript,
        #de forma que si exito==0 redirige a url_for('webLogin')
        return response
Пример #8
0
def check_cookies(*args, **kwargs):
    #BLueprints
    #Importo dentro de esta funcion
    #para no crear un bucle de imports
    #Necesito blueUser para la redireccionar
    #a la página de /login -> webLogin
    #url_for('blueUser.webMain')
    #from blue_user import blueUser
    #from blue_app import blueApp

    #Creo instancia del manjador de usuarios local
    UserHandler = UserManager()
    #Creo instancia del manejador de usuarios OAuth
    OAuthHandler = OAuthUserManager()
    #Obtengo la instancia base de Flask para
    #poder acceder a todas las view functions
    app = current_app._get_current_object()
    #default value.
    #Indica si hay que ejecutar el checkeo o no
    run_check=True

    #request.endpoint es la peticion al servidor
    #app.view_functions contiene todas las view functions 
    #definidas en la app.
    #
    #Si se cumple este if, significa que la ruta pedida por el cliente
    #es correcta y hay una view funciton asociada a ella
    if request.endpoint in app.view_functions:
        #Obtengo en view_func la funcion que se tiene que ejecutar
        #al acceder a la ruta que ha pedido el cliente.
        #Si por ejemlo se ha pedido la ruta '/', en view_func
        #tendremos al funcion webMain().
        view_func = app.view_functions[request.endpoint]
        #Si la view function en custión no tiene un atributo
        #llamado '_exclude_from_checking', realizaremos una 
        #comprobación de las cookies de sesión antes de ejecutar la
        #view function.
        #run_check= not hasattr(view_func, '_exclude_from_checking')
        #También hay que asegurarse de que la cadena '/static/' no 
        #esté contenida en la URL de la petición, ya que si no, no 
        #se podrán servir sus contenidos (código javascript y css)
        #a no ser que se haya iniciado sesión previamente, por lo que
        #pantallas como la de login no mostrarán el estilo.
        run_check= not hasattr(view_func, '_exclude_from_checking') \
        and '/static/' not in request.path
        #DEBUG. Muestro datos
        if '/static/' not in request.path:
            logging.info('-~> Checkear cookies en %s? %s',str(request.path),
        str(run_check))
        if run_check:
            #En la comprobación verifico que la sesión que indican
            #las cookies del usuario no está caducada. Si no existen se
            #da por hecho que no ha iniciado sesión. En ambos casos, habrá
            #que iniciarla.
            #
            #Obtengo tipo de Cookie : local o OAuth
            idTipo=request.cookies.get('tipoLogin')
            #Obtengo valor Cookie
            idSesion=request.cookies.get('SessionId')
            #Inicializo nombreUsuario
            nombreUsuario=None

            if idTipo=="local":
                #CADUCIDAD - BORRO Y ACTUALIZO
                sehaborrado=UserHandler.checkCookieStatus(idSesion)
                #Si la cookie ha caducado, me mostrara None como Usuario
                nombreUsuario = UserHandler.getCookieUserName(idSesion)
            elif idTipo=="oauth":
                #CADUCIDAD - BORRO Y ACTUALIZO
                sehaborrado=OAuthHandler.checkCookieStatus(idSesion)
                #Si la cookie ha caducado, me mostrara None como Usuario
                idUsuario = OAuthHandler.getCookieUserName(idSesion)
                nombreUsuario = OAuthHandler.getUserName(idUsuario)

            #DEBUG. Muesto info
            logging.debug("------CookieCheck----------")
            logging.debug("Tipo Sesion: " + str(idTipo))
            logging.debug("SESION: " + str(idSesion))
            logging.debug("Usuario: " + str(nombreUsuario))
            try:
                logging.debug("Ha caducado: " + str(sehaborrado))
            except UnboundLocalError:
                logging.debug("no hay cookies")
            #TEMP
            logging.debug("Sesiones Locales: " + str(UserHandler.listaSesiones))
            logging.debug("Sesiones OAUTH: " + str(OAuthHandler.listaSesiones))
            logging.debug("---------------------------")

            #Si el nombre de usuario es None, significa que la sesion ha
            #caducado o que no existe. Hay que hacer login.
            if nombreUsuario == None:
                logging.info("La sesión no existe o ha caducado."+
                "Por favor, inicie sesión.")
                response = make_response(redirect(url_for('blueUser.webLogin')))
                #Elimino cookies con datos de sesion como el umbral
                response.set_cookie('umbral', '', expires=0)
                return response
                #---
                #return redirect(url_for('blueUser.webLogin'))
            else:
                logging.debug("Sesión válida. Hola " + str(nombreUsuario))
    #You can handle 404s difeerently here if u want.
    else:
        #404
        logging.info("La pagina "+ request.path +" no existe. Redirigiendo...")
        return redirect(url_for('blueApp.webMain'))
Пример #9
0
def cambiarUmbral():
    logging.debug("/cambiarUmbral - METODO: " + str(request.method))
    response = make_response("cambiarUmbral_placeholder")
    #Obtengo info de las cookies
    idSesion = request.cookies.get('SessionId')
    #tipo de login
    idTipo = request.cookies.get('tipoLogin')
    #inicio variables en caso de que no haya cookies en el cliente
    nombreUser = None
    nombreAMostrar = None
    #Creo instancia del manejador de usuarios local
    UserHandler = UserManager()
    #Creo instancia del manejador de usuarios OAuth
    OAuthHandler = OAuthUserManager()
    #OAUTH
    if idTipo == "oauth":
        nombreUser = OAuthHandler.getCookieUserName(idSesion)
        nombreAMostrar = OAuthHandler.getUserName(nombreUser)
    #LOCAL
    elif idTipo == "local":
        nombreUser = UserHandler.getCookieUserName(idSesion)
        nombreAMostrar = nombreUser
    #-------
    #GET
    if request.method == 'GET':
        response = render_template('changeUserUmbral.html',
                                   username=nombreAMostrar)

    #POST
    elif request.method == 'POST':
        #else:
        logging.debug("Estoy en POST")

        #umbral=request.form['umbral']
        umbral = request.form.get('umbral', 101)
        #umbral = request.args.get('umbral', 101, type=float)
        #
        #resquest.args.get es mucho mejor, si no encuentra el argumento
        #'umbral' en vez de lanzar una excepcion da un valor por defecto,
        #el cual podemos especificar, asi como su tipo.
        #
        #INCORRECTO. request.args.get se emplea cuando se envian
        #parametros mediante GET (los cuales estarán incluidos en la
        #url).
        #Lo que es mejor que request.form[<nombreParam>] es
        #request.form.get(<nombreParam>, defaultValue), ya que de
        #esta forma, si no estan los parametros que intentamos
        #obtener, la funcion nos devolverá el valor por defecto
        #especificado en vez de 'None'.
        logging.debug("UMBRAL RECIBIDO: " + str(umbral))
        logging.debug("tipo: " + str(type(umbral)))
        try:
            umbral = float(umbral)
        except ValueError:
            umbral = 101
        #CAMBIO UMBRAL DEL USUARIO.
        if idTipo == "oauth":
            OAuthHandler.modUmbral(nombreUser, umbral)
            #response=make_response("UMB:"+str(OAuthHandler.getUmbral(nombreUser)))
            umbralDef = OAuthHandler.getUmbral(nombreUser)
            #response=make_response("UMB:"+str(umbralDef))
        elif idTipo == "local":
            UserHandler.modUmbral(nombreUser, umbral)
            #response=make_response("UMB:"+str(UserHandler.getUmbral(nombreUser)))
            umbralDef = UserHandler.getUmbral(nombreUser)
            #response=make_response("UMB:"+str(umbralDef))
        else:
            #EL usuario no ha hecho login.
            #
            #Los codigos de error de getUmbral() son:
            #-> 102: El usuario es 'None'. Es el valor que se obtiene cuando no se ha
            #iniciado sesión
            #-> 103: Indica que el nombre de usuario recibido no es válido, ya sea por tipo
            #(no string) o longitud.
            #-> 104: El usuario indicado no se ha encontrado en la base de datos.
            #
            #Los respuestas que se pueden obtener de modUmbral() van de -100
            #a 104, invluyendo todos los códigos de error. Para indicar
            #es error que es que no se ha iniciado sesión, utilizaremos el
            #código 105.
            umbralDef = 105
            #response=make_response("UMB:"+str(umbralDef))
            #Los códigos de error los interpretaremos en el cliente
        #---
        #En umbralDef tengo el resultado codigo de cambiar el umbral
        #La url a la que se debe dirigir el cliente si el umbral se
        #ha cambiado correctamente es url_for('blueApp.webMain')
        url = url_for('blueApp.webMain')
        #Creo los datos a enviar al cliente como JSON.
        #Deben tener el formato:
        #{"url" : url_a_redireccionar,
        #"code": codigo del resultado de la operacion}
        datos = {'url': url, 'code': umbralDef}
        logging.debug("RESPUESTA SERV: " + str(datos))
        #Creo la respuesta para el cliente.
        #Contendrá loos datos en forma JSON
        response = make_response(jsonify(datos))
        #Almaceno informacion del umbral en las cookies
        logging.debug(">>>>>>>>>>>>UMBRAL USUARIO: " + str(umbralDef))
        response.set_cookie('umbral', str(umbralDef))
    return response