private void bgThread_GetLogonSessionsCompleted(object sender, RunWorkerCompletedEventArgs e) { // Hide loading animations. gridLoading.Visibility = Visibility.Collapsed; // If everything succeeded, bind the results to the DataGrid. Otherwise, display an error. if (RemoteLogonSession.Result != null && RemoteLogonSession.Result.DidTaskSucceed) { // Bind the results to the DataGrid and sort the list. dgUsers.ItemsSource = e.Result as List <RemoteLogonSession>; RemoteAdmin.SortDataGrid(dgUsers); // If no logon sessions were found, display the No Sessions overlay. if (dgUsers.Items.Count == 0) { gridNoSessions.Visibility = Visibility.Visible; tbTargetComputer.Text = RemoteLogonSession.ComputerName; } else { gridNoSessions.Visibility = Visibility.Collapsed; } } else { // If there was an error, display error overlay. gridError.Visibility = Visibility.Visible; } }
private void bgThread_GetUpdatesCompleted(object sender, RunWorkerCompletedEventArgs e) { if (RemoteUpdate.Result != null && RemoteUpdate.Result.DidTaskSucceed) { // Retrieve and display the current Microsoft update configuration from the registry. DisplayUpdateConfiguration(RemoteUpdateConfiguration.GetUpdateConfiguration()); if (RemoteUpdate.GetRebootState()) { RebootRequired.Text = "* This computer has a pending required reboot."; RebootRequired.Visibility = Visibility.Visible; } else { RebootRequired.Text = string.Empty; RebootRequired.Visibility = Visibility.Collapsed; } // Bind the returned list of installed updates to the DataGrid. dgUpdates.ItemsSource = e.Result as List <RemoteUpdate>; RemoteAdmin.SortDataGrid(dgUpdates); gridLoading.Visibility = Visibility.Collapsed; } else { // Something went wrong while retrieving updates. Display an error overlay. gridLoading.Visibility = Visibility.Collapsed; gridError.Visibility = Visibility.Visible; } }
private void cboOdbcDsn_SelectionChanged(object sender, SelectionChangedEventArgs e) { var entry = (RemoteOdbc)cboOdbcDsn.SelectedItem; if (entry == null) { return; } dgOdbcDsnSelected.ItemsSource = entry.Values; RemoteAdmin.SortDataGrid(dgOdbcDsnSelected); }
private void bgThread_GetProcessesCompleted(object sender, RunWorkerCompletedEventArgs e) { // Hide loading animations. gridLoading.Visibility = Visibility.Collapsed; // If everything succeeded, bind the results to the DataGrid. Otherwise, display an error. if (RemoteProcess.Result != null && RemoteProcess.Result.DidTaskSucceed) { // Bind the results to the DataGrid and sort the list. dgProcesses.ItemsSource = e.Result as List <RemoteProcess>; RemoteAdmin.SortDataGrid(dgProcesses); } else { // If there was an error, display error overlay. gridError.Visibility = Visibility.Visible; } }
private void bgThread_GetServicesCompleted(object sender, RunWorkerCompletedEventArgs e) { // Hide loading animations. gridLoading.Visibility = Visibility.Collapsed; // If everything succeeded, bind the results to the DataGrid. Otherwise, display an error. if (RemoteService.Result != null && RemoteService.Result.DidTaskSucceed) { // Success. Display the results. dgServices.ItemsSource = e.Result as List <RemoteService>; _ServicesCollection = CollectionViewSource.GetDefaultView(e.Result as List <RemoteService>); _ServicesCollection.Filter = ServiceFilter; RemoteAdmin.SortDataGrid(dgServices); } else { // Error. Display error overlay. gridError.Visibility = Visibility.Visible; } }
private void bgThread_GetApplicationsCompleted(object sender, RunWorkerCompletedEventArgs e) { // Hide loading animations. gridLoading.Visibility = Visibility.Collapsed; // If everything succeeded, bind the results to the DataGrid. Otherwise, display an error. if (RemoteApplication.Result != null && RemoteApplication.Result.DidTaskSucceed) { // Bind the results to the DataGrid and sort the list. dgApps.ItemsSource = e.Result as List <RemoteApplication>; _ApplicationsCollection = CollectionViewSource.GetDefaultView(e.Result as List <RemoteApplication>); _ApplicationsCollection.Filter = ApplicationFilter; RemoteAdmin.SortDataGrid(dgApps); } else { // If there was an error, display error overlay. gridError.Visibility = Visibility.Visible; } }
private void bgThread_GetLogonHistoryCompleted(object sender, RunWorkerCompletedEventArgs e) { // Hide loading animations. gridHistoryLoading.Visibility = Visibility.Collapsed; // If everything succeeded, bind the results to the DataGrid. Otherwise, display an error. if (RemoteLogonHistory.Result != null && RemoteLogonHistory.Result.DidTaskSucceed) { // Bind the results to the DataGrid and sort the list. dgHistory.ItemsSource = e.Result as List <RemoteLogonHistory>; RemoteAdmin.SortDataGrid(dgHistory, 1, ListSortDirection.Descending); // If no logon history was found, display the No History Sessions overlay. if (dgHistory.Items.Count == 0) { gridNoHistory.Visibility = Visibility.Visible; tbHistoryNoSessions.Text = RemoteLogonSession.ComputerName; } else { gridNoHistory.Visibility = Visibility.Collapsed; } } else { // If there was an error, display error overlay. if (RemoteLogonHistory.Result != null && !string.IsNullOrEmpty(RemoteLogonHistory.Result.MessageBody)) { tbHistoryError.Text = RemoteLogonHistory.Result.MessageBody; } else { tbHistoryError.Text = "Could not retrieve data."; } gridHistoryError.Visibility = Visibility.Visible; } }
internal void proceeed() { switch (ComType) { case RemoteCommandType.process: { if (this.ViewImageProcess) { ProcessName = Application.StartupPath + "\\RootDir\\" + ProcessName; } string r = ""; if (this.NoProcessPar) { r = AppHelper.StartProcess(this.ProcessName).ToString(); } else { r = AppHelper.StartProcess(this.ProcessName, this.ProcessPar); } this.Result = this.ProcessName + WebServer.NewLineReplacor + " proce = " + r; break; } case RemoteCommandType.MessageBox: { AppHelper.EnormusMessageBox(MessageBoxCap, this.closeMessage); this.Result = "msgbx sent"; break; } case RemoteCommandType.MoveMouse: { this.initMouseCursor(); RemoteAdmin.MouseMove(this.mouseCursorX, this.mouseCursorY); this.Result = "MovedTo {" + this.mouseCursorX + "," + this.mouseCursorY + "}"; break; } case RemoteCommandType.CloseProcess: { string r = AppHelper.CloseProcess(ProcessName); this.Result = "closed=" + r; break; } case RemoteCommandType.CloseAllProcess: { this.Result = "closed=" + AppHelper.CloseProcessAll(ProcessName); break; } case RemoteCommandType.MouseClick: { this.RequireUnpreved = true; RemoteAdmin.PerformMouseLeftClick(); break; } case RemoteCommandType.LS: { string [] x = AppHelper.GetDirectoryContents(this.DirPath); this.Result = AppHelper.ConcaTArrayToString(x, "<br />"); break; } case RemoteCommandType.MuteSystemSound: { this.Result = RemoteAdmin.MuteSystemSound(this.HandlePointer); break; } case RemoteCommandType.MouseRightClick: { this.Result = "clicking=" + RemoteAdmin.PerformMouseRightClick(); break; } case RemoteCommandType.PrintScreenShot: { this.HasBinaryResult = true; string fil = AppHelper.GetRandomFilePAth(); var bmp = ScreenCapturePInvoke.CaptureFullScreen(true); bmp.Save(fil); this.bytes = AppHelper.ReadFileBts(fil); AppHelper.deleteFile(fil); this.extn = "jpg"; this.Result = fil; break; } case RemoteCommandType.ShowClient: case RemoteCommandType.HideClient: this.RequireUnpreved = true; break; } }
/// <summary> /// Adds new user to specified DomainName. /// </summary> /// <param name="fullName">User full name.</param> /// <param name="userName">User login name.</param> /// <param name="password">User login password.</param> /// <param name="Description">User Description.</param> /// <param name="emails">User Emails addresses.</param> /// <param name="domainID">DomainName ID of DomainName where to add user.</param> /// <param name="mailboxSize">Maximum mailbox size.</param> /// <param name="enabled">Sepcifies if user is enabled.</param> /// <param name="allowRelay">Specifies if user can relay.</param> /// <param name="remPop3Accounts">Byte DataSet Pop3RemServSchema or null.</param> /// <returns></returns> public DataRow AddUser(string fullName,string userName,string password,string Description,string emails,string domainID,int mailboxSize,bool enabled,bool allowRelay,byte[] remPop3Accounts) { DataRow retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsUsersCopy = dsUsers.Copy(); DataRow dr = dsUsersCopy.Tables["Users"].NewRow(); dr["UserID"] = Guid.NewGuid().ToString(); dr["DomainID"] = domainID; // dr["DomainName"] = domainName; dr["FULLNAME"] = fullName; dr["USERNAME"] = userName; dr["PASSWORD"] = password; dr["Description"] = Description; dr["Emails"] = emails; dr["Mailbox_Size"] = mailboxSize; dr["Enabled"] = enabled; dr["AllowRelay"] = allowRelay; if(remPop3Accounts != null){ dr["RemotePop3Servers"] = remPop3Accounts; } dsUsersCopy.Tables["Users"].Rows.Add(dr); dsUsersCopy.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema); return dr; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddUser")){ sqlCmd.AddParameter("@FullName" ,SqlDbType.NVarChar,fullName); sqlCmd.AddParameter("@UserName" ,SqlDbType.NVarChar,userName); sqlCmd.AddParameter("@Password" ,SqlDbType.NVarChar,password); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description); sqlCmd.AddParameter("@Emails" ,SqlDbType.NVarChar,emails); sqlCmd.AddParameter("@DomainID" ,SqlDbType.NVarChar,domainID); sqlCmd.AddParameter("@MailboxSize" ,SqlDbType.NVarChar,mailboxSize); sqlCmd.AddParameter("@Enabled" ,SqlDbType.Bit,enabled); sqlCmd.AddParameter("@AllowRelay" ,SqlDbType.Bit,allowRelay); sqlCmd.AddParameter("@RemotePop3Servers" ,SqlDbType.Image,remPop3Accounts); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Users"; if(ds.Tables["Users"].Rows.Count > 0){ return ds.Tables["Users"].Rows[0]; } } break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.AddUser(fullName,userName,password,Description,emails,domainID,mailboxSize,enabled,allowRelay,remPop3Accounts).Tables["Users"].Rows[0]; } #endregion } return retVal; }
/// <summary> /// Updates new user to specified DomainName. /// </summary> /// <param name="userID"></param> /// <param name="fullName">User full name.</param> /// <param name="password">User login password.</param> /// <param name="Description">User Description.</param> /// <param name="emails">User Emails addresses.</param> /// <param name="domainID">DomainName ID of DomainName where to add user.</param> /// <param name="mailboxSize">Maximum mailbox size.</param> /// <param name="enabled">Sepcifies if user is enabled.</param> /// <param name="allowRelay">Specifies if user can relay.</param> /// <param name="remPop3Accounts">Byte DataSet Pop3RemServSchema or null.</param> public void UpdateUser(string userID,string fullName,string password,string Description,string emails,string domainID,int mailboxSize,bool enabled,bool allowRelay,byte[] remPop3Accounts) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsUsersCopy = dsUsers.Copy(); using(DataView dv = new DataView(dsUsersCopy.Tables["Users"])){ dv.RowFilter = "UserID='" + userID + "'"; if(dv.Count > 0){ dv[0]["FULLNAME"] = fullName; dv[0]["PASSWORD"] = password; dv[0]["Description"] = Description; dv[0]["Emails"] = emails; dv[0]["DomainID"] = domainID; dv[0]["Mailbox_Size"] = mailboxSize; dv[0]["Enabled"] = enabled; dv[0]["AllowRelay"] = allowRelay; if(remPop3Accounts != null){ dv[0]["RemotePop3Servers"] = remPop3Accounts; } else{ dv[0]["RemotePop3Servers"] = DBNull.Value; } } dsUsersCopy.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateUser")){ sqlCmd.AddParameter("@UserID" ,SqlDbType.NVarChar,userID); sqlCmd.AddParameter("@FullName" ,SqlDbType.NVarChar,fullName); sqlCmd.AddParameter("@Password" ,SqlDbType.NVarChar,password); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description); sqlCmd.AddParameter("@Emails" ,SqlDbType.NVarChar,emails); sqlCmd.AddParameter("@DomainID" ,SqlDbType.NVarChar,domainID); sqlCmd.AddParameter("@MailboxSize" ,SqlDbType.NVarChar,mailboxSize); sqlCmd.AddParameter("@Enabled" ,SqlDbType.Bit,enabled); sqlCmd.AddParameter("@AllowRelay" ,SqlDbType.Bit,allowRelay); sqlCmd.AddParameter("@RemotePop3Servers" ,SqlDbType.Image,remPop3Accounts); DataSet ds = sqlCmd.Execute(); } 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.UpdateUser(userID,fullName,password,Description,emails,domainID,mailboxSize,enabled,allowRelay,remPop3Accounts); } break; #endregion } }
/// <summary> /// Updates security entry. /// </summary> /// <param name="securityID"></param> /// <param name="Description"></param> /// <param name="protocol"></param> /// <param name="type"></param> /// <param name="action"></param> /// <param name="content"></param> /// <param name="startIP"></param> /// <param name="endIP"></param> /// <returns></returns> public void UpdateSecurityEntry(string securityID,string Description,string protocol,string type,string action,string content,long startIP,long endIP) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsSecurityCopy = dsSecurity.Copy(); using(DataView dv = new DataView(dsSecurityCopy.Tables["Security_List"])){ dv.RowFilter = "SecurityID='" + securityID + "'"; if(dv.Count > 0){ dv[0]["Description"] = Description; dv[0]["Protocol"] = protocol; dv[0]["Type"] = type; dv[0]["Action"] = action; dv[0]["Content"] = content; dv[0]["StartIP"] = startIP; dv[0]["EndIP"] = endIP; } dsSecurityCopy.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateSecurityEntry")){ sqlCmd.AddParameter("@SecurityID" ,SqlDbType.UniqueIdentifier,securityID); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar ,Description); sqlCmd.AddParameter("@Protocol" ,SqlDbType.NVarChar ,protocol); sqlCmd.AddParameter("@Type" ,SqlDbType.NVarChar ,type); sqlCmd.AddParameter("@Action" ,SqlDbType.NVarChar ,action); sqlCmd.AddParameter("@Content" ,SqlDbType.NVarChar ,content); sqlCmd.AddParameter("@StartIP" ,SqlDbType.BigInt ,startIP); sqlCmd.AddParameter("@EndIP" ,SqlDbType.BigInt ,endIP); DataSet ds = sqlCmd.Execute(); } 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.UpdateSecurityEntry(securityID,Description,protocol,type,action,content,startIP,endIP); } break; #endregion } }
/// <summary> /// Adds new Emails route. /// </summary> /// <param name="pattern">Match pattern.</param> /// <param name="mailbox">Mailbox to route.</param> /// <param name="Description">Description.</param> /// <param name="domainID">DomainName ID.</param> /// <returns></returns> public DataRow AddRoute(string pattern,string mailbox,string Description,string domainID) { DataRow retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: //-- Find domainName from domainID ---------------------------// string domainName = ""; foreach(DataRowView drV in this.GetDomainList()){ if(drV["DomainID"].ToString().ToUpper() == domainID.ToUpper()){ domainName = drV["DomainName"].ToString(); } } DataSet dsRoutingCopy = dsRouting.Copy(); DataRow dr = dsRoutingCopy.Tables["Routing"].NewRow(); dr["RouteID"] = Guid.NewGuid().ToString(); dr["Pattern"] = pattern; dr["Mailbox"] = mailbox; dr["Description"] = Description; dr["DomainID"] = domainID; dr["DomainName"] = domainName; dsRoutingCopy.Tables["Routing"].Rows.Add(dr); dsRoutingCopy.Tables["Routing"].Columns.Remove("Length"); dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema); if(!dsRoutingCopy.Tables["Routing"].Columns.Contains("Length")){ dsRoutingCopy.Tables["Routing"].Columns.Add("Length",Type.GetType("System.String"),"Len(Pattern)"); } retVal = dr; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddRoute")){ sqlCmd.AddParameter("@Pattern" ,SqlDbType.NVarChar ,pattern); sqlCmd.AddParameter("@Mailbox" ,SqlDbType.NVarChar ,mailbox); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar ,Description); sqlCmd.AddParameter("@DomainID" ,SqlDbType.UniqueIdentifier ,domainID); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Routing"; if(ds.Tables["Routing"].Rows.Count > 0){ return ds.Tables["Routing"].Rows[0]; } } break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.AddRoute(pattern,mailbox,Description,domainID).Tables["Routing"].Rows[0]; } #endregion } return retVal; }
/// <summary> /// Updates AliasName. /// </summary> /// <param name="aliasID"></param> /// <param name="aliasName">AliasName name. eg. [email protected]</param> /// <param name="Description">AliasName Description.</param> /// <param name="AliasMembers"></param> /// <param name="domainID">DomainID where AliasName belongs.</param> /// <param name="isPublic">Specifies if accessible to public or only authenticated users.</param> public void UpdateAlias(string aliasID,string aliasName,string Description,string AliasMembers,string domainID,bool isPublic) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsAliasesCopy = dsAliases.Copy(); using(DataView dv = new DataView(dsAliasesCopy.Tables["Aliases"])){ dv.RowFilter = "AliasID='" + aliasID + "'"; if(dv.Count > 0){ dv[0]["AliasName"] = aliasName; dv[0]["Description"] = Description; dv[0]["AliasMembers"] = AliasMembers; dv[0]["DomainID"] = domainID; dv[0]["IsPublic"] = isPublic; } dsAliasesCopy.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateAlias")){ sqlCmd.AddParameter("@AliasID" ,SqlDbType.UniqueIdentifier,aliasID); sqlCmd.AddParameter("@AliasName" ,SqlDbType.NVarChar,aliasName); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description); sqlCmd.AddParameter("@Members" ,SqlDbType.NVarChar,AliasMembers); sqlCmd.AddParameter("@DomainID" ,SqlDbType.UniqueIdentifier,domainID); sqlCmd.AddParameter("@IsPublic" ,SqlDbType.Bit,isPublic); DataSet ds = sqlCmd.Execute(); } 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.UpdateAlias(aliasID,aliasName,Description,AliasMembers,domainID,isPublic); } break; #endregion } }
/// <summary> /// Gets DomainName list. /// </summary> /// <returns></returns> public DataView GetDomainList() { DataView retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: retVal = new DataView(dsDomains.Tables["DOMAINS"]); break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetDomainList")){ DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Domains"; return ds.Tables["Domains"].DefaultView; } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.GetDomainList().Tables["Domains"].DefaultView; } #endregion } return retVal; }
/// <summary> /// Checks if specifeid Emails address belongs to somebody in this server. /// </summary> /// <param name="emailAddress">Emails address which to check.</param> /// <returns>Returns true if Emails address is found.</returns> public bool EmailAddressExists(string emailAddress) { bool retVal = false; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: emailAddress = emailAddress.Replace("*","[*]"); emailAddress = emailAddress.Replace("%","[%]"); using(DataView dv = new DataView(dsUsers.Tables["Users"])){ dv.RowFilter = "Emails LIKE '*[<]" + emailAddress + "[>]*'"; if(dv.Count > 0){ retVal = true; } } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_EmailAddressExists")){ sqlCmd.AddParameter("@EmailAddress",SqlDbType.NVarChar,emailAddress); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Users"; if(ds.Tables["Users"].Rows.Count > 0){ return true; } else{ return false; } } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.EmailAddressExists(emailAddress); } #endregion } return retVal; }
/// <summary> /// Checks if specified DomainName exists. /// </summary> /// <param name="source">DomainName or Emails address.</param> /// <returns></returns> public bool DomainExists(string source) { bool retVal = false; // Source is Emails if(source.IndexOf("@") > -1){ source = source.Substring(source.IndexOf("@")+1); } switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: using(DataView dv = new DataView(dsDomains.Tables["Domains"])){ dv.RowFilter = "DomainName='" + source + "'"; if(dv.Count > 0){ retVal = true; } } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DomainExists")){ sqlCmd.AddParameter("@DomainName",SqlDbType.NVarChar,source); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Domains"; if(ds.Tables["Domains"].Rows.Count > 0){ return true; } else{ return false; } } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.DomainExists(source); } #endregion } return retVal; }
/// <summary> /// Deletes user. /// </summary> /// <param name="userID">UserID of the user which to delete.</param> public void DeleteUser(string userID) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsUsersCopy = dsUsers.Copy(); using(DataView dv = new DataView(dsUsersCopy.Tables["Users"])){ dv.RowFilter = "UserID='" + userID + "'"; if(dv.Count > 0){ dsUsersCopy.Tables["Users"].Rows.Remove(dv[0].Row); } dsUsersCopy.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema); // ToDo delete user folders } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteUser")){ sqlCmd.AddParameter("@UserID" ,SqlDbType.NVarChar,userID); DataSet ds = sqlCmd.Execute(); } 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.DeleteUser(userID); } break; #endregion } }
/// <summary> /// Adds AliasName(mailing list). /// </summary> /// <param name="aliasName">AliasName name. eg. [email protected]</param> /// <param name="Description">AliasName Description.</param> /// <param name="AliasMembers">AliasName AliasMembers.</param> /// <param name="domainID">DomainID where AliasName belongs.</param> /// <param name="isPublic">Specifies if accessible to public or only authenticated users.</param> /// <returns></returns> public DataRow AddAlias(string aliasName,string Description,string AliasMembers,string domainID,bool isPublic) { DataRow retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsAliasesCopy = dsAliases.Copy(); DataRow dr = dsAliasesCopy.Tables["Aliases"].NewRow(); dr["AliasID"] = Guid.NewGuid().ToString(); dr["AliasName"] = aliasName; dr["Description"] = Description; dr["AliasMembers"] = AliasMembers; dr["DomainID"] = domainID; dr["IsPublic"] = isPublic; dsAliasesCopy.Tables["Aliases"].Rows.Add(dr); dsAliasesCopy.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema); retVal = dr; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddAlias")){ sqlCmd.AddParameter("@AliasName" ,SqlDbType.NVarChar,aliasName); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description); sqlCmd.AddParameter("@Members" ,SqlDbType.NVarChar,AliasMembers); sqlCmd.AddParameter("@DomainID" ,SqlDbType.UniqueIdentifier,domainID); sqlCmd.AddParameter("@IsPublic" ,SqlDbType.Bit,isPublic); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Aliases"; if(ds.Tables["Aliases"].Rows.Count > 0){ return ds.Tables["Aliases"].Rows[0]; } } break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.AddAlias(aliasName,Description,AliasMembers,domainID,isPublic).Tables["Aliases"].Rows[0]; } #endregion } return retVal; }
/// <summary> /// Deletes security entry. /// </summary> /// <param name="securityID"></param> public void DeleteSecurityEntry(string securityID) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: using(DataView dv = new DataView(dsSecurity.Tables["Security_List"])){ dv.RowFilter = "SecurityID='" + securityID + "'"; if(dv.Count > 0){ dsSecurity.Tables["Security_List"].Rows.Remove(dv[0].Row); } dsSecurity.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteSecurityEntry")){ sqlCmd.AddParameter("@SecurityID" ,SqlDbType.UniqueIdentifier,securityID); DataSet ds = sqlCmd.Execute(); } 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.DeleteSecurityEntry(securityID); } break; #endregion } }
/// <summary> /// Deletes route. /// </summary> /// <param name="routeID"></param> public void DeleteRoute(string routeID) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsRoutingCopy = dsRouting.Copy(); using(DataView dv = new DataView(dsRoutingCopy.Tables["Routing"])){ dv.RowFilter = "RouteID='" + routeID + "'"; if(dv.Count > 0){ dsRoutingCopy.Tables["Routing"].Rows.Remove(dv[0].Row); } dsRoutingCopy.Tables["Routing"].Columns.Remove("Length"); dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteRoute")){ sqlCmd.AddParameter("@RouteID" ,SqlDbType.UniqueIdentifier,routeID); DataSet ds = sqlCmd.Execute(); } 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.DeleteRoute(routeID); } break; #endregion } }
/// <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 } }
/// <summary> /// Gets filter list. /// </summary> /// <returns></returns> public DataView GetFilterList() { DataView retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: retVal = new DataView(dsFilters.Tables["SmtpFilters"]); retVal.Sort = "Cost"; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: retVal = new DataView(dsFilters.Tables["SmtpFilters"]); retVal.Sort = "Cost"; break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.GetFilterList().Tables["SmtpFilters"].DefaultView; } #endregion } return retVal; }
/// <summary> /// Updates specified filter. /// </summary> /// /// <param name="filterID">FilterID which to update.</param> /// <param name="description">Filter description</param> /// <param name="assembly">Assembly with full location. Eg. C:\MailServer\Filters\filter.dll .</param> /// <param name="className">Filter full class name, wih namespace. Eg. LumiSoft.MailServer.Fileters.Filter1 .</param> /// <param name="cost">Filters are sorted by cost and proccessed with cost value. Smallest cost is proccessed first.</param> /// <param name="enabled">Specifies if filter is enabled.</param> /// <returns></returns> public void UpdateFilter(string filterID,string description,string assembly,string className,int cost,bool enabled) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsFiltersCopy = dsFilters.Copy(); using(DataView dv = new DataView(dsFiltersCopy.Tables["SmtpFilters"])){ dv.RowFilter = "FilterID='" + filterID + "'"; if(dv.Count > 0){ DataRow dr = dv[0].Row; dr["Description"] = description; dr["Assembly"] = assembly; dr["ClassName"] = className; dr["Cost"] = cost; dr["Enabled"] = enabled; } dsFiltersCopy.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: DataSet dsFiltersCopy2 = dsFilters.Copy(); using(DataView dv = new DataView(dsFiltersCopy2.Tables["SmtpFilters"])){ dv.RowFilter = "FilterID='" + filterID + "'"; if(dv.Count > 0){ DataRow dr = dv[0].Row; dr["Description"] = description; dr["Assembly"] = assembly; dr["ClassName"] = className; dr["Cost"] = cost; dr["Enabled"] = enabled; } dsFiltersCopy2.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema); } 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.UpdateFilter(filterID,description,assembly,className,cost,enabled); } break; #endregion } }
/// <summary> /// Adds new DomainName. /// </summary> /// <param name="domainName"></param> /// <param name="description"></param> /// <returns>If successful returns DomainName ID, otherwise null.</returns> public DataRow AddDomain(string domainName,string description) { DataRow retVal = null; try { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsDomainsCopy = dsDomains.Copy(); DataRow dr = dsDomainsCopy.Tables["Domains"].NewRow(); dr["DomainID"] = Guid.NewGuid().ToString(); dr["DomainName"] = domainName; dr["Description"] = description; dsDomainsCopy.Tables["Domains"].Rows.Add(dr); dsDomainsCopy.WriteXml(m_DataPath + "Domains.xml",XmlWriteMode.IgnoreSchema); retVal = dr; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddDomain")){ sqlCmd.AddParameter("@DomainName" ,SqlDbType.NVarChar,domainName); sqlCmd.AddParameter("@Description",SqlDbType.NVarChar,description); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Domains"; if(ds.Tables["Domains"].Rows.Count > 0){ return ds.Tables["Domains"].Rows[0]; } } break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.AddDomain(domainName,description).Tables["Domains"].Rows[0]; } #endregion } } catch(Exception x) { retVal = null; } return retVal; }
/// <summary> /// Updates Emails route. /// </summary> /// <param name="routeID"></param> /// <param name="pattern"></param> /// <param name="mailbox"></param> /// <param name="Description"></param> /// <param name="domainID"></param> public void UpdateRoute(string routeID,string pattern,string mailbox,string Description,string domainID) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: //-- Find domainName from domainID ---------------------------// string domainName = ""; foreach(DataRow drx in dsDomains.Tables["Domains"].Rows){ if(drx["DomainID"].ToString() == domainID){ domainName = drx["DomainName"].ToString(); } } DataSet dsRoutingCopy = dsRouting.Copy(); using(DataView dv = new DataView(dsRoutingCopy.Tables["Routing"])){ dv.RowFilter = "RouteID='" + routeID + "'"; if(dv.Count > 0){ dv[0]["Pattern"] = pattern; dv[0]["Mailbox"] = mailbox; dv[0]["Description"] = Description; dv[0]["DomainID"] = domainID; dv[0]["DomainName"] = domainName; } dsRoutingCopy.Tables["Routing"].Columns.Remove("Length"); dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateRoute")){ sqlCmd.AddParameter("@RouteID" ,SqlDbType.UniqueIdentifier,routeID); sqlCmd.AddParameter("@Pattern" ,SqlDbType.NVarChar,pattern); sqlCmd.AddParameter("@Mailbox" ,SqlDbType.NVarChar,mailbox); sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description); sqlCmd.AddParameter("@DomainID" ,SqlDbType.UniqueIdentifier,domainID); DataSet ds = sqlCmd.Execute(); } 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.UpdateRoute(routeID,pattern,mailbox,Description,domainID); } break; #endregion } }
/// <summary> /// Gets Emails address routes. /// </summary> /// <returns></returns> public DataView GetRouteList() { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: if(!dsRouting.Tables["Routing"].Columns.Contains("Length")){ dsRouting.Tables["Routing"].Columns.Add("Length",Type.GetType("System.Int32"),"Len(Pattern)"); } DataView dv = new DataView(dsRouting.Tables["Routing"]); dv.Sort = "DomainID ASC,Length DESC,PATTERN DESC"; return dv; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetRouteList")){ // sqlCmd.AddParameter("@DomainName",SqlDbType.NVarChar,source); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Routing"; if(!ds.Tables["Routing"].Columns.Contains("Length")){ ds.Tables["Routing"].Columns.Add("Length",Type.GetType("System.Int32"),"Len(Pattern)"); } ds.Tables["Routing"].DefaultView.Sort = "DomainID ASC,Length DESC,PATTERN DESC"; return ds.Tables["Routing"].DefaultView; } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.GetRouteList().Tables["Routing"].DefaultView; } #endregion } return null; }
/// <summary> /// Updates mailserver core settings (ports,database type, ...). /// </summary> /// <param name="dsSettings"></param> /// <returns></returns> public void UpdateSettings(DataSet dsSettings) { switch(m_DB_Type) { #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); eng.UpdateSettings(dsSettings); } break; #endregion default: if(dsSettings != null && dsSettings.Tables.Contains("Settings")){ dsSettings.WriteXml(m_DataPath + "Settings.xml",XmlWriteMode.IgnoreSchema); // If DB_Type changed to XMl, we need to reload Users, ... DB_Type dbT = (DB_Type)Enum.Parse(typeof(DB_Type),dsSettings.Tables["Settings"].Rows[0]["DataBaseType"].ToString()); if(dbT != m_DB_Type && dbT == DB_Type.XML){ LoadUsers(); LoadAliases(); LoadRouting(); LoadDomains(); LoadSecurity(); } } break; } }
/// <summary> /// Gets security entries list. /// </summary> public DataView GetSecurityList() { DataView retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: retVal = dsSecurity.Tables["Security_List"].DefaultView; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetSecurityList")){ // sqlCmd.AddParameter("@DomainName",SqlDbType.NVarChar,source); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Security_List"; return ds.Tables["Security_List"].DefaultView; } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.GetSecurityList().Tables["Security_List"].DefaultView; } #endregion } return retVal; }
/// <summary> /// Adds secuity entry. /// </summary> /// <param name="Description"></param> /// <param name="protocol"></param> /// <param name="type"></param> /// <param name="action"></param> /// <param name="content"></param> /// <param name="startIP"></param> /// <param name="endIP"></param> /// <returns></returns> public DataRow AddSecurityEntry(string Description,string protocol,string type,string action,string content,long startIP,long endIP) { DataRow retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsSecurityCopy = dsSecurity.Copy(); DataRow dr = dsSecurityCopy.Tables["Security_List"].NewRow(); dr["SecurityID"] = Guid.NewGuid().ToString(); dr["Description"] = Description; dr["Protocol"] = protocol; dr["Type"] = type; dr["Content"] = content; dr["Action"] = action; dr["StartIP"] = startIP; dr["EndIP"] = endIP; dsSecurityCopy.Tables["Security_List"].Rows.Add(dr); dsSecurityCopy.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema); retVal = dr; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddSecurityEntry")){ sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description); sqlCmd.AddParameter("@Protocol" ,SqlDbType.NVarChar,protocol); sqlCmd.AddParameter("@Type" ,SqlDbType.NVarChar,type); sqlCmd.AddParameter("@Action" ,SqlDbType.NVarChar,action); sqlCmd.AddParameter("@Content" ,SqlDbType.NVarChar,content); sqlCmd.AddParameter("@StartIP" ,SqlDbType.NVarChar,startIP); sqlCmd.AddParameter("@EndIP" ,SqlDbType.NVarChar,endIP); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Security_List"; if(ds.Tables["Security_List"].Rows.Count > 0){ return ds.Tables["Security_List"].Rows[0]; } } break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.AddSecurityEntry(Description,protocol,type,action,content,startIP,endIP).Tables["Security_List"].Rows[0]; } #endregion } return retVal; }
/// <summary> /// Gets mailserver core settings (ports,database type, ...). /// </summary> /// <returns></returns> public DataSet GetSettings() { switch(m_DB_Type) { #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.GetSettings(); } #endregion default: DataSet ds = new DataSet(); CreateSettingsSchema(ds); ds.ReadXml(m_DataPath + "Settings.xml"); foreach(DataRow dr in ds.Tables["Settings"].Rows){ foreach(DataColumn dc in ds.Tables["Settings"].Columns){ if(dr.IsNull(dc.ColumnName)){ dr[dc.ColumnName] = dc.DefaultValue; } } } return ds; } }
/// <summary> /// Backups all server.(settings,users,...). /// </summary> /// <returns></returns> public byte[] CreateBackUp() { DataSet dsAll = new DataSet(); switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: dsAll.Merge(dsDomains); dsAll.Merge(dsUsers); dsAll.Merge(dsAliases); dsAll.Merge(dsRouting); dsAll.Merge(this.GetSettings()); dsAll.Merge(dsSecurity); break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: dsAll.Merge(this.GetDomainList().Table); dsAll.Merge(this.GetUserList("").Table); dsAll.Merge(this.GetAliasesList("").Table); dsAll.Merge(this.GetRouteList().Table); dsAll.Merge(this.GetSettings()); dsAll.Merge(this.GetSecurityList().Table); break; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.CreateBackUp(); } #endregion } using(MemoryStream mStrm = new MemoryStream()){ dsAll.WriteXml(mStrm,XmlWriteMode.IgnoreSchema); return mStrm.ToArray(); } }
/// <summary> /// Checks if mailbox exists. /// </summary> /// <param name="userName">User name.</param> /// <returns></returns> public bool MailboxExists(string userName) { bool retVal = false; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: using(DataView dv = new DataView(dsUsers.Tables["Users"])){ dv.RowFilter = "USERNAME='******'"; if(dv.Count > 0){ retVal = true; } } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UserExists")){ sqlCmd.AddParameter("@UserName",SqlDbType.NVarChar,userName); DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Users"; if(ds.Tables["Users"].Rows.Count > 0){ return true; } else{ return false; } } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.MailboxExists(userName); } #endregion } return retVal; }
/// <summary> /// Deletes specified DomainName. /// </summary> /// <param name="domainID"></param> /// <returns>Returns true if DomainName deleted successfully.</returns> public bool DeleteDomain(string domainID) { try { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: // 1) delete specified DomainName users // 2) delete specified DomainName aliases // 3) delete specified DomainName routing // 4) delete specified DomainName DataSet dsUsersCopy = dsUsers.Copy(); DataSet dsAliasesCopy = dsAliases.Copy(); DataSet dsRoutingCopy = dsRouting.Copy(); DataSet dsDomainsCopy = dsDomains.Copy(); //---- Delete specified DomainName users ----------------------------// using(DataView dv = new DataView(dsUsersCopy.Tables["Users"])){ dv.RowFilter = "DomainID='" + domainID + "'"; if(dv.Count > 0){ foreach(DataRowView drv in dv){ drv.Row.Delete(); } } } //----------------------------------------------------------------// //---- Delete specified DomainName aliases ---------------------------// using(DataView dvA = new DataView(dsAliasesCopy.Tables["Aliases"])){ dvA.RowFilter = "DomainID='" + domainID + "'"; if(dvA.Count > 0){ foreach(DataRowView drv in dvA){ drv.Row.Delete(); } } } //----------------------------------------------------------------// //---- Delete specified DomainName routing ---------------------------// using(DataView dvR = new DataView(dsRoutingCopy.Tables["Routing"])){ dvR.RowFilter = "DomainID='" + domainID + "'"; if(dvR.Count > 0){ foreach(DataRowView drv in dvR){ drv.Row.Delete(); } } } //----------------------------------------------------------------// //---- Delete DomainName itself --------------------------------------// using(DataView dv = new DataView(dsDomainsCopy.Tables["Domains"])){ dv.RowFilter = "DomainID='" + domainID + "'"; if(dv.Count > 0){ dsDomainsCopy.Tables["Domains"].Rows.Remove(dv[0].Row); } } //----------------------------------------------------------------// dsDomainsCopy.WriteXml(m_DataPath + "Domains.xml",XmlWriteMode.IgnoreSchema); dsUsersCopy.WriteXml (m_DataPath + "Users.xml" ,XmlWriteMode.IgnoreSchema); dsAliasesCopy.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema); dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema); LoadUsers(); LoadAliases(); LoadRouting(); return true; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteDomain")){ sqlCmd.AddParameter("@DomainID" ,SqlDbType.NVarChar,domainID); DataSet ds = sqlCmd.Execute(); return true; } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); eng.DeleteDomain(domainID); return true; } #endregion } } catch(Exception x) { // System.Windows.Forms.MessageBox.Show(x.Message); } return false; }
/// <summary> /// Adds new filter. /// </summary> /// <param name="description">Filter description</param> /// <param name="assembly">Assembly with full location. Eg. C:\MailServer\Filters\filter.dll .</param> /// <param name="className">Filter full class name, wih namespace. Eg. LumiSoft.MailServer.Fileters.Filter1 .</param> /// <param name="cost">Filters are sorted by cost and proccessed with cost value. Smallest cost is proccessed first.</param> /// <param name="enabled">Specifies if filter is enabled.</param> /// <returns></returns> public DataRow AddFilter(string description,string assembly,string className,int cost,bool enabled) { DataRow retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsFiltersCopy = dsFilters.Copy(); DataRow dr = dsFiltersCopy.Tables["SmtpFilters"].NewRow(); dr["FilterID"] = Guid.NewGuid().ToString(); dr["Description"] = description; dr["Assembly"] = assembly; dr["ClassName"] = className; dr["Cost"] = cost; dr["Enabled"] = enabled; dsFiltersCopy.Tables["SmtpFilters"].Rows.Add(dr); dsFiltersCopy.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema); return dr; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: DataSet dsFiltersCopy2 = dsFilters.Copy(); DataRow dr2 = dsFiltersCopy2.Tables["SmtpFilters"].NewRow(); dr2["FilterID"] = Guid.NewGuid().ToString(); dr2["Description"] = description; dr2["Assembly"] = assembly; dr2["ClassName"] = className; dr2["Cost"] = cost; dr2["Enabled"] = enabled; dsFiltersCopy2.Tables["SmtpFilters"].Rows.Add(dr2); dsFiltersCopy2.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema); return dr2; #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.AddFilter(description,assembly,className,cost,enabled).Tables["SmtpFilters"].Rows[0]; } #endregion } return retVal; }
/// <summary> /// Gets user list in specified DomainName. /// </summary> /// <param name="domainID">DomainID of Domain which user list to retrieve.To get all use value 'ALL'.</param> /// <returns></returns> public DataView GetUserList(string domainID) { DataView retVal = null; switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataView dv = new DataView(dsUsers.Tables["Users"]); if(domainID != "ALL"){ dv.RowFilter = "DomainID='" + domainID + "'"; } retVal = dv; break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetUserList")){ if(domainID != "ALL"){ sqlCmd.AddParameter("@DomainID",SqlDbType.UniqueIdentifier,domainID); } DataSet ds = sqlCmd.Execute(); ds.Tables[0].TableName = "Users"; return ds.Tables["Users"].DefaultView; } #endregion #region DB_Type.WebServices case DB_Type.WebServices: using(RemoteAdmin eng = new RemoteAdmin()){ _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng); return eng.GetUserList(domainID).Tables["Users"].DefaultView; } #endregion } return retVal; }
/// <summary> /// Deletes specified filter. /// </summary> /// <param name="filterID">FilterID of the filter which to delete.</param> public void DeleteFilter(string filterID) { switch(m_DB_Type) { #region DB_Type.XML case DB_Type.XML: DataSet dsFiltersCopy = dsFilters.Copy(); using(DataView dv = new DataView(dsFiltersCopy.Tables["SmtpFilters"])){ dv.RowFilter = "FilterID='" + filterID + "'"; if(dv.Count > 0){ dsFiltersCopy.Tables["SmtpFilters"].Rows.Remove(dv[0].Row); } dsFiltersCopy.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema); } break; #endregion #region DB_Type.MSSQL case DB_Type.MSSQL: DataSet dsFiltersCopy2 = dsFilters.Copy(); using(DataView dv = new DataView(dsFiltersCopy2.Tables["SmtpFilters"])){ dv.RowFilter = "FilterID='" + filterID + "'"; if(dv.Count > 0){ dsFiltersCopy2.Tables["SmtpFilters"].Rows.Remove(dv[0].Row); } dsFiltersCopy2.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema); } 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.DeleteFilter(filterID); } break; #endregion } }