/// <summary> /// Restores server from backup.(settings,users,...). /// </summary> /// <param name="data"></param> public void RestoreBackUp(byte[] data) { DataSet dsAll = new DataSet(); dsAll.ReadXml(new MemoryStream(data)); DB_Type dbType = (DB_Type)Enum.Parse(typeof(DB_Type),dsAll.Tables["Settings"].Rows[0]["DataBaseType"].ToString()); switch(dbType) { #region DB_Type.XML case DB_Type.XML: if(dsAll.Tables.Contains("Domains")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Domains"]); dsX.WriteXml(m_DataPath + "Domains.xml",XmlWriteMode.IgnoreSchema); } if(dsAll.Tables.Contains("Users")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Users"]); dsX.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema); } if(dsAll.Tables.Contains("Aliases")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Aliases"]); dsX.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema); } if(dsAll.Tables.Contains("Routing")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Routing"]); dsX.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema); } if(dsAll.Tables.Contains("Settings")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Settings"]); dsX.WriteXml(m_DataPath + "Settings.xml",XmlWriteMode.IgnoreSchema); } if(dsAll.Tables.Contains("Security_List")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Security_List"]); dsX.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: #region Clear old settings using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_TruncateSettings")){ DataSet ds = sqlCmd.Execute(); } #endregion #region Restore domains if(dsAll.Tables.Contains("Domains")) { foreach(DataRow dr in dsAll.Tables["Domains"].Rows){ using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddDomain")){ if(dr.Table.Columns.Contains("DomainName")){ sqlCmd.AddParameter("@DomainName" ,SqlDbType.NVarChar,dr["DomainName"].ToString()); } if(dr.Table.Columns.Contains("Description")){ sqlCmd.AddParameter("@Description",SqlDbType.NVarChar,dr["Description"].ToString()); } if(dr.Table.Columns.Contains("DomainID")){ sqlCmd.AddParameter("@DomainID" ,SqlDbType.NVarChar,dr["DomainID"].ToString()); } DataSet ds = sqlCmd.Execute(); } } } #endregion #region Restore users if(dsAll.Tables.Contains("Users")){ foreach(DataRow dr in dsAll.Tables["Users"].Rows){ using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddUser")){ if(dr.Table.Columns.Contains("FULLNAME")){ sqlCmd.AddParameter("@FullName" ,SqlDbType.NVarChar,dr["FULLNAME"].ToString()); } if(dr.Table.Columns.Contains("USERNAME")){ sqlCmd.AddParameter("@UserName" ,SqlDbType.NVarChar,dr["USERNAME"].ToString()); } if(dr.Table.Columns.Contains("PASSWORD")){ sqlCmd.AddParameter("@Password" ,SqlDbType.NVarChar,dr["PASSWORD"].ToString()); } if(dr.Table.Columns.Contains("Description")){ sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString()); } if(dr.Table.Columns.Contains("Emails")){ sqlCmd.AddParameter("@Emails" ,SqlDbType.NVarChar,dr["Emails"].ToString()); } if(dr.Table.Columns.Contains("Mailbox_Size")){ sqlCmd.AddParameter("@MailboxSize" ,SqlDbType.NVarChar,dr["Mailbox_Size"].ToString()); } if(dr.Table.Columns.Contains("DomainID")){ sqlCmd.AddParameter("@DomainID" ,SqlDbType.NVarChar,dr["DomainID"].ToString()); } if(dr.Table.Columns.Contains("UserID")){ sqlCmd.AddParameter("@UserID" ,SqlDbType.NVarChar,dr["UserID"].ToString()); } if(dr.Table.Columns.Contains("RemotePop3Servers")){ sqlCmd.AddParameter("@RemotePop3Servers" ,SqlDbType.Image,(byte[])dr["RemotePop3Servers"]); } DataSet ds = sqlCmd.Execute(); } } } #endregion #region Restore aliases if(dsAll.Tables.Contains("Aliases")){ foreach(DataRow dr in dsAll.Tables["Aliases"].Rows){ using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddAlias")){ if(dr.Table.Columns.Contains("AliasName")){ sqlCmd.AddParameter("@AliasName" ,SqlDbType.NVarChar,dr["AliasName"].ToString()); } if(dr.Table.Columns.Contains("Description")){ sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString()); } if(dr.Table.Columns.Contains("AliasMembers")){ sqlCmd.AddParameter("@Members" ,SqlDbType.NVarChar,dr["AliasMembers"].ToString()); } if(dr.Table.Columns.Contains("DomainID")){ sqlCmd.AddParameter("@DomainID" ,SqlDbType.UniqueIdentifier,dr["DomainID"].ToString()); } if(dr.Table.Columns.Contains("AliasID")){ sqlCmd.AddParameter("@AliasID" ,SqlDbType.UniqueIdentifier,dr["AliasID"].ToString()); } DataSet ds = sqlCmd.Execute(); } } } #endregion #region Restore routing if(dsAll.Tables.Contains("Routing")){ foreach(DataRow dr in dsAll.Tables["Routing"].Rows){ using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddRoute")){ if(dr.Table.Columns.Contains("Pattern")){ sqlCmd.AddParameter("@Pattern" ,SqlDbType.NVarChar,dr["Pattern"].ToString()); } if(dr.Table.Columns.Contains("Mailbox")){ sqlCmd.AddParameter("@Mailbox" ,SqlDbType.NVarChar,dr["Mailbox"].ToString()); } if(dr.Table.Columns.Contains("Description")){ sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString()); } if(dr.Table.Columns.Contains("DomainID")){ sqlCmd.AddParameter("@DomainID" ,SqlDbType.UniqueIdentifier,dr["DomainID"].ToString()); } if(dr.Table.Columns.Contains("AliasID")){ sqlCmd.AddParameter("@RouteID" ,SqlDbType.UniqueIdentifier,dr["RouteID"].ToString()); } DataSet ds = sqlCmd.Execute(); } } } #endregion #region Restore settings if(dsAll.Tables.Contains("Settings")){ DataSet dsX = new DataSet(); dsX.Merge(dsAll.Tables["Settings"]); dsX.WriteXml(m_DataPath + "Settings.xml",XmlWriteMode.IgnoreSchema); } #endregion #region Restore security if(dsAll.Tables.Contains("Security_List")) { foreach(DataRow dr in dsAll.Tables["Security_List"].Rows){ using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddSecurityEntry")){ if(dr.Table.Columns.Contains("Description")){ sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString()); } if(dr.Table.Columns.Contains("Protocol")){ sqlCmd.AddParameter("@Protocol" ,SqlDbType.NVarChar,dr["Protocol"].ToString()); } if(dr.Table.Columns.Contains("Type")){ sqlCmd.AddParameter("@Type" ,SqlDbType.NVarChar,dr["Type"].ToString()); } if(dr.Table.Columns.Contains("Action")){ sqlCmd.AddParameter("@Action" ,SqlDbType.NVarChar,dr["Action"].ToString()); } if(dr.Table.Columns.Contains("Content")){ sqlCmd.AddParameter("@Content" ,SqlDbType.NVarChar,dr["Content"].ToString()); } if(dr.Table.Columns.Contains("StartIP")){ sqlCmd.AddParameter("@StartIP" ,SqlDbType.NVarChar,dr["StartIP"].ToString()); } if(dr.Table.Columns.Contains("EndIP")){ sqlCmd.AddParameter("@EndIP" ,SqlDbType.NVarChar,dr["EndIP"].ToString()); } if(dr.Table.Columns.Contains("SecurityID")){ sqlCmd.AddParameter("@SecurityID" ,SqlDbType.NVarChar,dr["SecurityID"].ToString()); } DataSet ds = sqlCmd.Execute(); } } } #endregion break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); eng.RestoreBackUp(data); } break; #endregion } }