示例#1
0
 def after_request(response):
     """Tracage des requetes URL."""
     # Cela évite la duplication du registre dans le journal,
     # puisque ce 500 est déjà connecté via @app.errorhandler.
     if (response.status_code != 500
             and not request.full_path.startswith('/static')
             # and cfg._ENV[cfg._ENVIRONNEMENT]["LOG_WATCHER"] is True
         ):
         # Construction du Message
         text = "{} :: {} :: {} :: {} :: {} :: {} :: {} :: {}".format(
             request.remote_addr,
             Session.getUserDisplay()
             if Session.getUserDisplay() is not None else "",
             Session.getUserId() if Session.getUserId() is not None else "",
             request.method, request.scheme, request.full_path,
             response.status, '1' if Utils.isAjaxRequest(request) else '0')
         # Enregistrement
         # loggerWatch.info(text)
         """
         file_object = open(cfg._ENV[cfg._ENVIRONNEMENT]["LOG_WATCHER_FILE"], "a+")
         file_object.write("{} :: {} :: {} :: {} :: {} :: {} :: {} :: {}\n".format(
                     datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'),
                     request.remote_addr,
                     Session.getUserDisplay() if Session.getUserDisplay() is not None else "",
                     Session.getUserId() if Session.getUserId() is not None else "",
                     request.method,
                     request.scheme,
                     request.full_path,
                     response.status
         ))
         file_object.close()
         """
     return response
示例#2
0
def logout():
    # logger.info("Deconnexion pour : {}".format(Session.getUserId()))
    # Suppression de la Session Utilisateur
    Session.remove()

    # Redirection
    return redirect(url_for('home.index'))
示例#3
0
 def decorator(*args, **kwargs):
     # Si l'utilisateur est ADMIN, alors on accepte (Par default, les administrateurs à le droit d'acceder à tout)
     if Session.getUserRole() == "ADMIN":
         return view_function(*args, **kwargs)
     # Si l'utilisateur different de ADMIN, alors on verifie que le role est accepté
     if Session.getUserRole() not in role_names:
         abort(403)
     # C'est OK d'appeler la vue
     return view_function(*args, **kwargs)
示例#4
0
    def checkUser(username=None, password=None, ip=None):
        """
        Verifie la cohérenece login/password de l'utilisateur
        Si OK, alors creation de la Session
        """
        # Verification USERNAME
        if username is None:
            raise AppException("[AUTH] - Aucune Identifiant à verifier")
        # Verification PASSWORD
        if password is None:
            raise AppException("[AUTH] - Aucune Password à verifier")
        # Initialisation du Modele
        mdl = AuthUsersModel()
        # Recuperation des informations utilisateurs
        user = mdl.getUserByUsername(username)

        # Si l'utilisateur n'existe pas
        if user is None:
            return False
        # Mot de passe Incorrecte
        # if (user["password"] != Crypt.encode(cfg._APP_SECRET_KEY, password)):
        if (user["password"] != Crypt.encode(cfg._APP_SECRET_KEY, password)):
            # Si non valide, incrémenter le nombre de connexions ayant échoué
            mdlFailedLogon = AuthFailedLoginModel()
            mdlFailedLogon.incrementFailedLogins(
                username, mdlFailedLogon.getFailedLoginByUser(username), ip)

            # Egalement, vérifiez si l'adresse IP actuelle tente de se connecter à l'aide de plusieurs comptes,
            # Si c'est le cas, alors bloquez-le, sinon, ajoutez simplement un nouvel enregistrement à la base de données
            # TODO
            mdlFailedLogon.handleIpFailedLogin(ip, username)
            del mdlFailedLogon
            return False
        # Si le login est ok
        # Init Session
        idSession = uuid.uuid1()
        Session.setValue("id", idSession)
        Session.setValue("is_logged_in", True)
        Session.setValue("username", user["username"])
        Session.setValue("role", user["role"])
        Session.setValue("displayName", user["display"])
        # Enregistrement de last_connect + id de Session en bdd
        mdl.updateLastConn(username)
        mdl.updateIdSession(username, idSession)

        # Remise a zero des tentatives echoués
        AuthFailedLoginModel().resetFailedLogins(username)
        return True
示例#5
0
def login():
    error = None
    if request.method == 'POST':
        # Entrée dans les logs
        # Recuperation des Parametres Utilisateurs
        username = request.form['username']
        password = request.form['password']
        userIp = request.remote_addr
        # [ETAPE 1] - Verification si le user est bloqué par son IP
        if Auth.isIpBlocked(ip=userIp):
            return Render.htmlTemplate("login.html",
                                       data="Votre IP est bloqué")
        # [ETAPE 2] - Vérifier si l'utilisateur a précédemment échoué ses tentatives de connexion
        if Auth.getFailedLoginByUser(username=username):
            return Render.htmlTemplate(
                "login.html",
                data=
                "Vous avez dépassé le nombre de tentatives possibles, veuillez réessayer plus tard"
            )
        # [ETAPE 3] - Obtenir l'utilisateur de la base de données
        if not Auth.checkUser(username=username, password=password, ip=userIp):
            return Render.htmlTemplate(
                "login.html",
                data=
                "Les Informations d'identification sont invalides. Veuillez réessayer."
            )
        else:
            # Redirection vers l'accueil
            print("Connexion reussi pour : {}".format(Session.getUserId()))
            return redirect(url_for('home.home'))
    else:
        return Render.htmlTemplate('login.html', data=error)
示例#6
0
def SyncMarkets():
    def run(user):
        # Initialisation des Parametres + Variables
        _OPERATION = "Synchronisation des Marchés"
        logger.info(
            "Lancement de la Synchronisation des Marchés par : {}".format(
                user))
        SyncMarketsHelpersObj = None
        try:
            # ========================================================================================
            yield Render.sseTemplate(
                perc=1,
                message="Demarrage de la synchronisation des Marchés",
                operation=_OPERATION,
                categorie="NORMAL")
            SyncMarketsHelpersObj = SyncMarketsHelpers()
            # Initialisation du Broker
            yield Render.sseTemplate(perc=25,
                                     message="Connexion au Broker",
                                     operation=_OPERATION,
                                     categorie="TITLE")
            SyncMarketsHelpersObj.connect()
            # Obtenir les Marchés
            yield Render.sseTemplate(perc=50,
                                     message="Recuperation des Marchés",
                                     operation=_OPERATION,
                                     categorie="TITLE")
            SyncMarketsHelpersObj.getMarkets()
            # Mise à jour dela BDD
            yield Render.sseTemplate(
                perc=75,
                message="Mise à jour de la BDD (Traitement Long)",
                operation=_OPERATION,
                categorie="TITLE")
            SyncMarketsHelpersObj.updateBdd()
            # Fin de Traitement
            SyncMarketsHelpersObj.disconnect()
            yield Render.sseTemplate(
                perc=100,
                message="Fin de Syncronisation des Ordres",
                operation=_OPERATION,
                categorie="SUCCESS")
        except Exception as error:
            logger.exception(error)
            yield Render.sseTemplate(perc=100,
                                     message=str(error),
                                     operation=_OPERATION,
                                     categorie="ERROR")
        finally:
            time.sleep(0.2)

    # return Render.jsonTemplate(_OPERATION, "ESSAI", categorie="WARNING", data=None)
    # raise Exception("NOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNN")
    # Session.setPid()

    return Response(run(user=Session.getUserDisplay()),
                    mimetype='text/event-stream')
示例#7
0
 def wrap(*args, **kwargs):
     if request.method == "POST" and "csrfToken" in request.form:
         sendToken = request.form.get("csrfToken", None)
     else:
         return f(*args, **kwargs)
     if sendToken is None or sendToken != Session.getCsrfToken():
         # "Attaque CSRF "," Utilisateur : " . Session::getUserId () . " jeton CSRF non valide " . $userToken, __FILE__, __LINE__);
         abort(405)
     # Si tout est ok, on supprime le csrfToken du formulaire
     return f(*args, **kwargs)
示例#8
0
    def getInfo():
        """Retourne les informations necessaires au frontend"""
        info = {}
        # Utilisateur
        info["user"] = {
            'is_logged_in': Session.getValue("is_logged_in"),
            'displayName': Session.getValue("displayName"),
            'role': Session.getValue("role"),
            'username': Session.getValue("username")
        }
        # Application
        info["app"] = {
            'version': cfg._APP_VERSION,
            'name': cfg._APP_NAME,
            'auteur': cfg._APP_AUTEUR,
            'environ': cfg._ENVIRONNEMENT
        }
        # Javascript
        info["js"] = {
            'timeout': str(cfg._JS_TIMEOUT_LOADER),
            'csrfToken': Session.generateCsrfToken(),
            'root': cfg._ENV[cfg._ENVIRONNEMENT]["JS_ROOT_DEV"],
            'timeZone': Configuration.from_filepath().get_time_zone()
        }
        # System
        info["system"] = {
            'main': SysInfo().getSystem(),
            'python': SysInfo().getPython(),
        }
        # Compte
        info["compte"] = {
            # Courante
            'WorkOnCompte': Configuration.from_filepath().get_type_account()
        }

        return info
示例#9
0
 def wrap(*args, **kwargs):
     if not Session.getIsLoggedIn():
         abort(401)
     return f(*args, **kwargs)
示例#10
0
def testJSONProgress():
    def run(pid, user):
        try:
            x = 0
            while x <= 100:
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="TITLE")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="NORMAL")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="NORMAL")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="NORMAL")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="NORMAL")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="INFO")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="ERROR")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="SUCCESS")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="WARNING")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="DEFAULT")
                yield Render.sseTemplate(perc=x,
                                         message="TESTTASK" + str(x),
                                         operation=_OPERATION,
                                         categorie="ERROR_TASK")
                yield Render.sseTemplate(perc=x,
                                         message="TESTTASK" + str(x),
                                         operation=_OPERATION,
                                         categorie="SUCCESS_TASK")
                yield Render.sseTemplate(perc=x,
                                         message="TEST" + str(x),
                                         operation=_OPERATION,
                                         categorie="WARNING")
                x = x + 75
                # if x == 75:
                #     raise Exception("NOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNN")
            yield Render.sseTemplate(perc=100,
                                     message="Fin de traitement",
                                     operation="WOO HOO",
                                     categorie="SUCCESS")
        except Exception as error:
            logger.pid = pid
            logger.user = user
            logger.error(
                '{APP_NAME} à rencontré une erreur (TRAITEMENT)'.format(
                    APP_NAME=cfg._APP_NAME))
            logger.critical()
            yield Render.sseTemplate(perc=100,
                                     message=str(error),
                                     operation=_OPERATION,
                                     categorie="ERROR")
        finally:
            time.sleep(0.2)

    # return Render.jsonTemplate(_OPERATION, "ESSAI", categorie="WARNING", data=None)
    # raise Exception("NOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNN")
    Session.setPid()

    return Response(run(pid=Session.getPid(), user=Session.getUserDisplay()),
                    mimetype='text/event-stream')
示例#11
0
def testJSON():
    Session.setPid()
    # raise AppException("TESSTTTTT ERRORS.LOG")
    return Render.jsonTemplate('TITRE', 'WOOHOO', categorie="INFO", code=200)