using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.MySqlClient;
using System.IO;
namespace WmHmailserverExporterWeb {
public partial class _Default : System.Web.UI.Page {
protected string logPath = @"C:\Users\Willem L. Middelkoop\Documents\Visual Studio 2005\Projects\WmHmailserverExporter\WmHmailserverExporter\log";
protected string userStart = "\"RECEIVED: USER ";
protected string userEnd = "\"";
protected string passStart = "\"RECEIVED: PASS ";
protected string passEnd = "\"";
protected WmData.WmData data;
protected void Page_Load(object sender, EventArgs e) {
data = new WmData.WmData("root","YOUR_DB_PASSWORD", "localhost", 3306, "hmailexport");
string domainSelect = "SELECT domainid, domainname FROM hm_domains";
MySqlConnection domainConnection = getMySqlConnection();
MySqlCommand domainCommand = new MySqlCommand(domainSelect, domainConnection);
try {
domainConnection.Open();
MySqlDataReader domainReader = domainCommand.ExecuteReader();
while (domainReader.Read()) {
string domainName = (string)domainReader["domainname"];
int domainId = (int)domainReader["domainid"];
Response.Write("
" + domainName+"
");
string domainAliasSelect = "SELECT dadomainid, daalias FROM hm_domain_aliases WHERE dadomainid="+domainId;
MySqlConnection domainAliasConnection = getMySqlConnection();
MySqlCommand domainAliasCommand = new MySqlCommand(domainAliasSelect, domainAliasConnection);
try {
domainAliasConnection.Open();
Response.Write("
Domain aliases");
MySqlDataReader domainAliasReader = domainAliasCommand.ExecuteReader();
while (domainAliasReader.Read()) {
string aliasDomain = (string)domainAliasReader["daalias"];
Response.Write("
"+aliasDomain);
}
} finally {
domainAliasConnection.Close();
}
Response.Write("
");
string accountSelect = "SELECT accountaddress, accountforwardenabled, accountforwardaddress FROM hm_accounts WHERE accountdomainid=" + domainId+" ORDER BY accountaddress";
MySqlConnection accountConnection = getMySqlConnection();
MySqlCommand accountCommand = new MySqlCommand(accountSelect, accountConnection);
try {
accountConnection.Open();
Response.Write("
Accounts");
MySqlDataReader accountReader = accountCommand.ExecuteReader();
while(accountReader.Read()){
string accountName = (string)accountReader["accountaddress"];
string forwardAddress = (string)accountReader["accountforwardaddress"];
bool forwardEnabled = Convert.ToBoolean(accountReader["accountforwardenabled"]);
MailAccount account = getMailAccountIfExists(accountName);
if (account != null) {
Response.Write("
" + account.AccountName + " // " + account.Password);
} else {
if (forwardEnabled ) {
Response.Write("
" + accountName + " // !! forward to "+forwardAddress+" ");
} else {
Response.Write("
" + accountName + " // !!??: ______________________________");
}
}
string aliasSelect = "SELECT aliasname, aliasvalue FROM hm_aliases WHERE aliasvalue='" + accountName+"'";
MySqlConnection aliasConnection = getMySqlConnection();
MySqlCommand aliasCommand = new MySqlCommand(aliasSelect, aliasConnection);
try {
aliasConnection.Open();
MySqlDataReader aliasReader = aliasCommand.ExecuteReader();
while (aliasReader.Read()) {
string aliasName = (string)aliasReader["aliasname"];
Response.Write("
" + aliasName + "");
}
} finally {
aliasConnection.Close();
}
}
} finally {
accountConnection.Close();
}
}
} finally {
domainConnection.Close();
}
}
protected MailAccount getMailAccountIfExists(string accountName) {
string select = "accountname='" + accountName + "'";
ArrayList tmpRes = data.getObjects(typeof(MailAccount), select);
if (tmpRes.Count > 0) {
MailAccount first = (MailAccount)tmpRes[0];
return first;
} else {
return null;
}
}
protected void importUsersFromLogfiles() {
string falseUserString = userStart + "\"";
foreach (string logFile in Directory.GetFiles(logPath, "*.log")) {
TextReader reader = (TextReader)File.OpenText(logFile);
string logFileText = reader.ReadToEnd();
int iterator = 0;
while (iterator >= 0) {
iterator = logFileText.IndexOf(userStart, iterator);
if (iterator >= 0) {
string username = null;
string domainName = null;
string password = null;
string usernameString = logFileText.Substring(iterator, 20);
if (!usernameString.StartsWith(falseUserString)) {
try {
getCredentials(logFileText, ref iterator, ref username, ref domainName, ref password);
addCredentialsIfNew(domainName, username, password);
} catch (Exception error) {
System.Diagnostics.Trace.WriteLine("Error occured file " + Path.GetFileName(logFile) + " character " + iterator + " USERNAMETXT: " + usernameString);
}
} else {
System.Diagnostics.Trace.WriteLine("Prevented failure on log scan: " + usernameString);
iterator += falseUserString.Length;
}
}
}
reader.Close();
//break; // one file for now
}
}
protected void addCredentialsIfNew(string domainName, string accountName, string password) {
string select = "accountname='" + accountName.ToLower() + "'";
if (data.getObjects(typeof(MailAccount), select).Count == 0) {
MailAccount newAccount = new MailAccount();
newAccount.DomainName = domainName.ToLower();
newAccount.AccountName = accountName.ToLower();
newAccount.Password = password;
data.addObject(newAccount);
System.Diagnostics.Trace.WriteLine("Added account " + accountName);
}
}
protected void getCredentials(string logFileText, ref int iterator, ref string username, ref string domainName, ref string password) {
username = Tools.getStringInBetween(userStart, userEnd, logFileText, ref iterator);
domainName = username.Substring(username.IndexOf("@")+1);
password = Tools.getStringInBetween(passStart, passEnd, logFileText, ref iterator);
}
protected MySqlConnection getMySqlConnection() {
#region connection string
string connectionString = "server=localhost;" +
"port=3306;" +
"charset=utf8;" +
"database=hmailserver;" +
"uid=root;" +
"pwd=YOUR_DB_PASSWORD;";
#endregion
return new MySqlConnection(connectionString);
}
}
}