Beispiel #1
0
        /// <summary>
        /// Purge des logs opérateur > durée
        /// </summary>
        private static Boolean PurgerSessionsCle(int cdLogiciel, int dureeSecondes, int transac)
        {
            OracleTrans o = OracleTrans.getInstance;

            Boolean res = true;

            try
            {
                // Purge à la durée + une minute
                dureeSecondes += 60;

                ExtendedReturnedUpdate resultLogOpe = o.ExecuterUpdate(
                    " DELETE FROM LOGICIEL_SESSIONS WHERE (SYSDATE - DATE_MAJ) > (:1 / 60 / 60 / 24) ",         //CD_LOGICIEL = :1 AND
                    transac,
                    dureeSecondes);

                res = res && resultLogOpe.ErrCode == 0;

                if (!res)
                {
                    throw new Exception("Impossible de purger les sessions d'utilisation. " + (resultLogOpe.OracleException != null ? resultLogOpe.OracleException.Message : ""));
                }

                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Suppression de la session d'utilisation du logiciel
        /// </summary>
        public static Boolean SupprimerSessionCle(int cdLogiciel, String sessionId)
        {
            OracleTrans o       = OracleTrans.getInstance;
            int         transac = o.DebutTransaction();
            Boolean     res     = true;

            try
            {
                ExtendedReturnedUpdate result = OracleTrans.getInstance.ExecuterUpdate(
                    " DELETE FROM LOGICIEL_SESSIONS WHERE CD_LOGICIEL = :1 AND SESSION_ID = :2 ",
                    -1,
                    cdLogiciel, sessionId);

                res = res && result.ErrCode == 0;

                if (!res)
                {
                    throw new Exception("Impossible de supprimer la session utilisateur. " + (result.OracleException != null ? result.OracleException.Message : ""));
                }

                if (res)
                {
                    if (_COMMIT)
                    {
                        o.Commit(transac);
                    }
                    else
                    {
                        o.RollBack(transac);
                    }
                }
                else
                {
                    o.RollBack(transac);
                }

                return(res);
            }
            catch (Exception ex)
            {
                o.RollBack(transac);
                throw ex;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Enregistrement d'une nouvelle session d'utilisation à un logiciel et vérification de la clé associée
        /// </summary>
        public static Boolean CreerNouvelleSessionCle(int cdLogiciel, string sessionId, string infos)
        {
            lock (LOCK)
            {
                if (DateTime.Now.Subtract(_dateDernierePurge).TotalSeconds > _FREQUENCE_PURGE)
                {
                    try
                    {
                        _dateDernierePurge = DateTime.Now;

                        // Purge des sessions existantes qui dépassent le délai d'inactivité
                        PurgerSessionsCle(cdLogiciel, _DUREE_INACTIVITE);
                    }
                    catch (Exception) { }
                }
            }

            OracleTrans o       = OracleTrans.getInstance;
            int         transac = o.DebutTransaction();
            Boolean     res     = true;

            try
            {
                // Test si session existe déjà
                Boolean existsSession = false;
                if (sessionId != "")
                {
                    ExtendedReturnedScalar resultSessionCourante = o.ExecuterSelectScalar(
                        " SELECT COUNT(*)" +
                        " FROM LOGICIEL_SESSIONS " +
                        " WHERE CD_LOGICIEL = :1 " +
                        " AND SESSION_ID = :2",
                        transac, cdLogiciel, sessionId);

                    if (Convert.ToInt32(resultSessionCourante.Result) > 0)
                    {
                        existsSession = true;
                        Boolean sessionAMAJ = false;

                        // SI DATE_MAJ session courante > DUREE_INACTIVITE => SESSION NON ACTIVE => test clé
                        ExtendedReturnedScalar resultSessionCouranteActive = o.ExecuterSelectScalar(
                            " SELECT CASE WHEN (SYSDATE - DATE_MAJ) < (:2 / 60 / 60 / 24) THEN 1 ELSE 0 END as SESSION_ACTIVE " +
                            " FROM LOGICIEL_SESSIONS " +
                            " WHERE CD_LOGICIEL = :1 " +
                            " AND SESSION_ID = :3",
                            transac, cdLogiciel, _DUREE_INACTIVITE, sessionId);

                        // Si session non active -> test clé
                        if (Convert.ToInt32(resultSessionCouranteActive.Result) == 0)
                        {
                            sessionAMAJ = TestCle(cdLogiciel, sessionId, _DUREE_INACTIVITE, transac);
                        }
                        else
                        {
                            // Sinon mise à jour activité session
                            sessionAMAJ = true;
                        }

                        if (sessionAMAJ)
                        {
                            //MajActiviteSessionCle(cdLogiciel, sessionId, transac);
                            ExtendedReturnedUpdate resultLogOpe = o.ExecuterUpdate(
                                " UPDATE LOGICIEL_SESSIONS SET " +
                                "   DATE_MAJ = SYSDATE, " +
                                "   DUREE_ACTIVITE = Round((DATE_MAJ - DATE_CREAT) * 24 * 60, 2) " +         // EN MINUTES
                                " WHERE CD_LOGICIEL = :1 " +
                                "   AND SESSION_ID = :2 ",
                                transac,
                                cdLogiciel, sessionId);

                            res = res && resultLogOpe.ErrCode == 0;

                            if (!res)
                            {
                                throw new Exception("Impossible de mettre à jour l'activité de la session d'utilisation. " + (resultLogOpe.OracleException != null ? resultLogOpe.OracleException.Message : ""));
                            }
                        }
                    }
                    else
                    {
                        existsSession = false;
                    }

                    if (!existsSession)
                    {
                        res = res && TestCle(cdLogiciel, null, _DUREE_INACTIVITE, transac);

                        if (res)
                        {
                            // - OK, nouvelle session
                            ExtendedReturnedUpdate resultLogOpe = o.ExecuterUpdate(
                                " INSERT INTO LOGICIEL_SESSIONS " +
                                "        (CD_LOGICIEL_SESSIONS, CD_LOGICIEL, SESSION_ID, INFOS, DATE_CREAT, DATE_MAJ, DUREE_ACTIVITE) " +
                                " VALUES (SEQ_LOGICIEL_SESSIONS.NEXTVAL, :1, :2, :3, SYSDATE, SYSDATE, 0)",
                                transac,
                                cdLogiciel, sessionId, infos);

                            res = res && resultLogOpe.ErrCode == 0;

                            if (!res)
                            {
                                throw new Exception("Impossible d'enregistrer la session d'utilisation. " + (resultLogOpe.OracleException != null ? resultLogOpe.OracleException.Message : ""));
                            }
                        }
                    }

                    if (res)
                    {
                        if (_COMMIT)
                        {
                            o.Commit(transac);
                        }
                        else
                        {
                            o.RollBack(transac);
                        }

                        return(res);
                    }
                    else
                    {
                        o.RollBack(transac);
                        return(false);
                    }
                }
                else
                {
                    o.RollBack(transac);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                o.RollBack(transac);
                throw ex;
            }
        }