예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="objLogin"></param>
        /// <param name="loginResult"></param>
        /// <param name="forcedLogin">
        /// Imposta se la connessione deve essere forzata, ossia
        /// una eventuale connessione esistente viene annullata).
        /// </param>
        /// <returns></returns>
        public static DocsPaVO.utente.Utente loginMethod(DocsPaVO.utente.UserLogin objLogin,
                                                         out DocsPaVO.utente.UserLogin.LoginResult loginResult, bool forcedLogin,
                                                         string webSessionId, out string ipaddress)
        {
            DocsPaVO.utente.Utente utente = null;
            loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER;
            ipaddress   = string.Empty;
            bool multiAmm = false;

            try
            {
                if (DocsPaUtils.Security.SSOAuthTokenHelper.IsAuthToken(objLogin.Password))
                {
                    string ssoTok = DocsPaUtils.Security.SSOAuthTokenHelper.Restore(objLogin.UserName, objLogin.Password);
                    objLogin.SSOLogin = true;
                }
            }
            catch { }

            try
            {
                // Ricerca dell'utente in amministrazione
                if (string.IsNullOrEmpty(objLogin.IdAmministrazione))
                {
                    try
                    {
                        ArrayList listaAmmin = UserManager.getListaIdAmmUtente(objLogin);

                        if (listaAmmin != null && listaAmmin.Count > 0)
                        {
                            if (listaAmmin.Count == 1)
                            {
                                objLogin.IdAmministrazione = listaAmmin[0].ToString();
                            }
                            else
                            {
                                //loginResult = DocsPaVO.utente.UserLogin.LoginResult.NO_AMMIN;
                                multiAmm = true;
                                objLogin.IdAmministrazione = listaAmmin[0].ToString();
                            }
                        }
                        if (listaAmmin == null)
                        {
                            logger.Debug("Attenzione, la query S_People in GetIdAmmUtente non ha dato alcun risultato.");
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Debug("Errore di connessione al DB durante la procedura di login");
                        loginResult = DocsPaVO.utente.UserLogin.LoginResult.DB_ERROR;
                    }
                }

                // Se l'amministrazione è stata impostata
                if (!string.IsNullOrEmpty(objLogin.IdAmministrazione))
                {
                    // Get User
                    DocsPaDocumentale.Documentale.UserManager userManager = new DocsPaDocumentale.Documentale.UserManager();

                    if (userManager.LoginUser(objLogin, out utente, out loginResult))
                    {
                        // Impostazione id sessione utente
                        utente.sessionID = webSessionId;

                        if (!forcedLogin) // Gestione delle connessioni esistenti da amministrazione
                        {
                            //login concesso all'utente
                            //si verifica la tabella DPA_LOGIN per unicità della connessione
                            //la funzione torna True se l'utente è già collegato
                            DocsPaDB.Query_DocsPAWS.Utenti gestioneUtenti = new DocsPaDB.Query_DocsPAWS.Utenti();

                            if (!gestioneUtenti.CheckUserLogin(utente.userId, utente.idAmministrazione))
                            {
                                utente.ruoli   = UserManager.getRuoliUtente(utente.idPeople);
                                utente.dominio = getDominio(utente.idPeople);

                                if (utente.ruoli.Count == 0 && DocsPaUtils.Moduli.ModuliAuthManager.RolesRequired(objLogin.Modulo))
                                {
                                    loginResult = DocsPaVO.utente.UserLogin.LoginResult.NO_RUOLI;
                                    utente      = null;
                                }
                                else
                                {
                                    gestioneUtenti.LockUserLogin(utente.userId, utente.idAmministrazione, webSessionId, objLogin.IPAddress, utente.dst);
                                    if (!multiAmm)
                                    {
                                        loginResult = DocsPaVO.utente.UserLogin.LoginResult.OK;
                                    }
                                    else
                                    {
                                        loginResult = DocsPaVO.utente.UserLogin.LoginResult.NO_AMMIN;
                                    }
                                }
                            }
                            else
                            {
                                if (!multiAmm)
                                {
                                    loginResult = DocsPaVO.utente.UserLogin.LoginResult.USER_ALREADY_LOGGED_IN;
                                }
                                else
                                {
                                    loginResult = DocsPaVO.utente.UserLogin.LoginResult.NO_AMMIN;
                                }
                                //loginResult = DocsPaVO.utente.UserLogin.LoginResult.USER_ALREADY_LOGGED_IN;
                                ipaddress = gestioneUtenti.GetUserIPAddress(utente.userId, utente.idAmministrazione);
                                utente    = null;
                            }
                        }
                        else
                        {
                            // Gestione utente delle connessioni esistenti
                            DocsPaDB.Query_DocsPAWS.Utenti gestioneUtenti = new DocsPaDB.Query_DocsPAWS.Utenti();

                            // Cancella eventuali connessioni esistenti
                            gestioneUtenti.UnlockUserLogin(utente.userId, utente.idAmministrazione);

                            // Assegna connessione
                            gestioneUtenti.LockUserLogin(utente.userId, utente.idAmministrazione,
                                                         webSessionId, objLogin.IPAddress, utente.dst);
                            utente.ruoli   = UserManager.getRuoliUtente(utente.idPeople);
                            utente.dominio = getDominio(utente.idPeople);
                            if (utente.ruoli.Count == 0 && DocsPaUtils.Moduli.ModuliAuthManager.RolesRequired(objLogin.Modulo))
                            {
                                loginResult = DocsPaVO.utente.UserLogin.LoginResult.NO_RUOLI;
                                utente      = null;
                            }

                            // Qualifiche Utente
                            string value = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "GESTIONE_QUALIFICHE");
                            if (!string.IsNullOrEmpty(value) && value.Equals("1"))
                            {
                                utente.qualifiche = new ArrayList(utenti.QualificheManager.GetPeopleGroupsQualificheByIdPeople(utente.idPeople));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.Debug(e.Message);
                loginResult = DocsPaVO.utente.UserLogin.LoginResult.APPLICATION_ERROR;
                logger.Debug("Errore nella gestione degli utenti (loginMethod)");
                utente = null;
            }

            return(utente);
        }