///// <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); } }
/// <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); } }
/// <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); }