예제 #1
0
        ///// <summary>
        /////
        ///// </summary>
        ///// <param name="idUser"></param>
        ///// <param name="ldapInfo"></param>
        //public void SaveLdapUserConfig(string idUser, LdapConfig ldapInfo)
        //{
        //    try
        //    {
        //        using (DocsPaDB.DBProvider dbProvider = new DBProvider())
        //        {
        //            DocsPaUtils.Query queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("S_CONTAINS_LDAP_USER_CONFIG");
        //            queryDef.setParam("idUser", idUser);

        //            string commandText = queryDef.getSQL();
        //            logger.Debug(commandText);

        //            string field;

        //            if (dbProvider.ExecuteScalar(out field, commandText))
        //            {
        //                string queryName = string.Empty;

        //                if (Convert.ToInt32(field) > 0)
        //                    queryName = "U_UPDATE_LDAP_USER_CONFIG";
        //                else
        //                    queryName = "I_INSERT_LDAP_USER_CONFIG";

        //                queryDef = DocsPaUtils.InitQuery.getInstance().getQuery(queryName);

        //                queryDef.setParam("idUser", idUser);
        //                queryDef.setParam("serverName", this.NormalizeStringValue(ldapInfo.ServerName));
        //                queryDef.setParam("groupDN", this.NormalizeStringValue(ldapInfo.GroupDN));

        //                commandText = queryDef.getSQL();
        //                logger.Debug(commandText);

        //                int rowsAffected;
        //                if (!dbProvider.ExecuteNonQuery(commandText, out rowsAffected))
        //                    throw new ApplicationException(string.Format("Errore in esecuzione query {0}", queryName));
        //            }
        //            else
        //                throw new ApplicationException("Errore in esecuzione query S_CONTAINS_LDAP_USER_CONFIG");
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        string errorMessage = "Errore nell'aggiornamento delle configurazione LDAP per l'utente";

        //        logger.Debug(errorMessage, ex);
        //        throw new ApplicationException(errorMessage, ex);
        //    }
        //}

        /// <summary>
        ///
        /// </summary>
        /// <param name="idAmministrazione"></param>
        /// <returns></returns>
        public LdapSyncronizationHistoryItem[] GetLdapSyncHistory(string idAmministrazione)
        {
            try
            {
                List <LdapSyncronizationHistoryItem> result = new List <LdapSyncronizationHistoryItem>();

                using (DocsPaDB.DBProvider dbProvider = new DBProvider())
                {
                    DocsPaUtils.Query queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("S_GET_LDAP_SYNC_HISTORY");
                    queryDef.setParam("idAmm", idAmministrazione);

                    string commandText = queryDef.getSQL();
                    logger.Debug(commandText);

                    using (IDataReader reader = dbProvider.ExecuteReader(commandText))
                    {
                        while (reader.Read())
                        {
                            LdapSyncronizationHistoryItem item = new LdapSyncronizationHistoryItem();

                            item.Id               = Convert.ToInt32(DocsPaUtils.Data.DataReaderHelper.GetValue <object>(reader, "SYSTEM_ID", false));
                            item.User             = DocsPaUtils.Data.DataReaderHelper.GetValue <string>(reader, "USER_ID", false);
                            item.Date             = DocsPaUtils.Data.DataReaderHelper.GetValue <DateTime>(reader, "SYNC_DATE", false);
                            item.ItemsSyncronized = Convert.ToInt32(DocsPaUtils.Data.DataReaderHelper.GetValue <object>(reader, "ITEMS_SYNCRONIZED", false, 0));
                            item.ErrorDetails     = DocsPaUtils.Data.DataReaderHelper.GetValue <string>(reader, "ERROR_DETAILS", true, string.Empty);

                            result.Add(item);
                        }
                    }
                }

                return(result.ToArray());
            }
            catch (Exception ex)
            {
                string errorMessage = "Errore nel reperimento delle informazioni sulle sincronizzazioni LDAP effettuate per l'amministrazione";

                logger.Debug(errorMessage, ex);
                throw new ApplicationException(errorMessage, ex);
            }
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="idAmministrazione"></param>
        /// <param name="syncResponse"></param>
        /// <returns></returns>
        public LdapSyncronizationHistoryItem SaveLdapSyncResult(string idAmministrazione, LdapSyncronizationResponse syncResponse)
        {
            try
            {
                LdapSyncronizationHistoryItem result = null;

                using (DocsPaDB.DBProvider dbProvider = new DBProvider())
                {
                    dbProvider.BeginTransaction();

                    const string TABLE_NAME = "DPA_LDAP_SYNC_HISTORY";

                    DocsPaUtils.Query queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("I_INSERT_LDAP_SYNC_HISTORY_ITEM");

                    queryDef.setParam("colId", DocsPaDbManagement.Functions.Functions.GetSystemIdColName());
                    queryDef.setParam("idValue", DocsPaDbManagement.Functions.Functions.GetSystemIdNextVal(TABLE_NAME));
                    queryDef.setParam("idAmm", idAmministrazione);
                    queryDef.setParam("userId", this.NormalizeStringValue(syncResponse.User));
                    queryDef.setParam("syncDate", DocsPaDbManagement.Functions.Functions.GetDate());
                    queryDef.setParam("itemsSync", syncResponse.ItemsSyncronized.ToString());
                    queryDef.setParam("errorDetails", this.NormalizeStringValue(syncResponse.ErrorDetails));

                    string commandText = queryDef.getSQL();
                    logger.Debug(commandText);

                    int rowsAffected;
                    if (dbProvider.ExecuteNonQuery(commandText, out rowsAffected))
                    {
                        if (rowsAffected == 1)
                        {
                            commandText = DocsPaDbManagement.Functions.Functions.GetQueryLastSystemIdInserted(TABLE_NAME);
                            logger.Debug(commandText);

                            string field;
                            if (dbProvider.ExecuteScalar(out field, commandText))
                            {
                                result              = new LdapSyncronizationHistoryItem();
                                result.Id           = Convert.ToInt32(field);
                                result.User         = syncResponse.User;
                                result.Date         = syncResponse.Date;
                                result.ErrorDetails = syncResponse.ErrorDetails;

                                dbProvider.CommitTransaction();
                            }
                        }
                    }
                    else
                    {
                        throw new ApplicationException("Errore in esecuzione query I_INSERT_LDAP_SYNC_HISTORY_ITEM");
                    }
                }

                return(result);
            }
            catch (Exception ex)
            {
                string errorMessage = "Errore nell'aggiornamento delle informazioni sulla sincronizzazione LDAP effettuata per l'amministrazione";

                logger.Debug(errorMessage, ex);
                throw new ApplicationException(errorMessage, ex);
            }
        }
예제 #3
0
        /// <summary>
        /// Task di sincronizzazione degli utenti in docspa con gli utenti in ldap per l'amministrazione corrente
        /// </summary>
        /// <param name="request"></param>
        public static LdapSyncronizationResponse SyncronizeLdapUsers(LdapSyncronizationRequest request)
        {
            LdapSyncronizationResponse response = new LdapSyncronizationResponse();

            response.User = request.InfoUtente.userId;

            DocsPaDB.Query_DocsPAWS.Ldap ldapDbServices = new DocsPaDB.Query_DocsPAWS.Ldap();

            try
            {
                // Reperimento amministrazione corrente
                InfoAmministrazione admin = GetAdmin(request.IdAmministrazione);

                if (admin == null)
                {
                    throw new ApplicationException(string.Format("Amministrazione con id '{0}' non trovata", request.IdAmministrazione));
                }
                else
                {
                    response.AdminCode = admin.Codice;
                }

                //if (string.IsNullOrEmpty(admin.Dominio))
                //    throw new ApplicationException("Dominio predefinito non specificato per l'amministrazione");

                // Verifica che il servizio di integrazione con ldap è attivo o meno
                DocsPaLdapServices.LdapConfigurations.CheckForLdapIntegrationActivated();

                LdapConfig ldapInfo = ldapDbServices.GetLdapConfig(request.IdAmministrazione);

                if (ldapInfo != null)
                {
                    // Reperimento password per l'utente di dominio
                    ldapInfo.DomainUserPassword = ldapDbServices.GetLdapConfigDomainUserPassword(request.IdAmministrazione);

                    // Reperimento utenti in amministrazione
                    Dictionary <string, OrgUtente> docspaUsers = GetUsers();

                    // Reperimento utenti in ldap
                    Dictionary <string, LdapUser> ldapUsers = GetLdapUsers(ldapInfo);

                    List <LdapSyncronizationResponseItem> responseItems = new List <LdapSyncronizationResponseItem>();

                    // Rimozione utenti in docspa non più presenti in ldap
                    RemoveUsers(request.InfoUtente, request.IdAmministrazione, docspaUsers, ldapUsers, responseItems);

                    // Inserimento o aggiornamento degli utenti in docspa da ldap
                    AddOrUpdateUsers(request.InfoUtente, request.IdAmministrazione, admin.Dominio, docspaUsers, ldapUsers, responseItems);

                    // Calcolo del numero di elementi sincronizzati
                    foreach (LdapSyncronizationResponseItem item in responseItems)
                    {
                        if (item.Result != LdapSyncronizationResultEnum.Error)
                        {
                            response.ItemsSyncronized++;
                        }
                    }

                    response.Items = responseItems.ToArray();
                }
            }
            catch (Exception ex)
            {
                response.ErrorDetails = ex.Message;

                logger.Error(response.ErrorDetails);
            }
            finally
            {
                LdapSyncronizationHistoryItem historyItem = ldapDbServices.SaveLdapSyncResult(request.IdAmministrazione, response);

                // Persistenza istanza LdapSyncronizationHistoryItem
                PersistResponseHistory(response, historyItem.Id);
            }

            return(response);
        }