select ist nun implementiert

This commit is contained in:
BlubbFish 2010-07-15 00:37:09 +00:00
parent 62359d6d91
commit c554e39451
8 changed files with 142 additions and 11 deletions

View File

@ -41,5 +41,13 @@ namespace MailServer.DataBase
MySqlDataReader reader = command.ExecuteReader();
return reader;
}
internal void write(string sql)
{
Console.WriteLine(sql);
MySqlCommand command = connection.CreateCommand();
command.CommandText = sql;
command.ExecuteNonQuery();
}
}
}

View File

@ -1,15 +1,24 @@
using System;
using System.Security.Cryptography;
using System.Text;
/*using System.Collections.Generic;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;
/*using System.Linq;
using System.Text;*/
using System.Text.RegularExpressions;
using MySql.Data.MySqlClient;
using LumiSoft.IMAP.Server;
namespace MailServer.DataBase
{
public struct IMAP_Message_ret
{
public string id;
public long uid;
public DateTime internalDate;
public long size;
public IMAP_MessageFlags flags;
}
class MysqlImap
{
private MysqlConnector mysql;
@ -27,7 +36,7 @@ namespace MailServer.DataBase
return false;
}
while(reader.Read()) {
if (reader.GetString(0).ToLower() == pass.ToLower())
if (reader.GetString("pass").ToLower() == pass.ToLower())
{
reader.Close();
return true;
@ -48,6 +57,10 @@ namespace MailServer.DataBase
return "";
}
}
private string escape(int num)
{
return escape(num.ToString());
}
static string getMd5Hash(string input)
{
@ -60,5 +73,78 @@ namespace MailServer.DataBase
}
return sBuilder.ToString();
}
internal void setSessionID(string p,string p_2)
{
MySqlDataReader reader1 = mysql.read("SELECT `id` FROM `users` WHERE `user` = '"+escape(p_2)+"'");
int user_id = 0;
if (reader1.HasRows)
{
while (reader1.Read())
{
user_id = reader1.GetInt32("id");
}
}
reader1.Close();
MySqlDataReader reader2 = mysql.read("SELECT `userID` FROM `session` WHERE `userID` = '"+escape(user_id)+"'");
if (reader2.HasRows)
{
reader2.Close();
mysql.write("UPDATE `session` SET `sessionID` = '" + escape(p) + "' WHERE `userID` = '" + escape(user_id) + "'");
}
else
{
reader2.Close();
mysql.write("INSERT INTO `session` (`sessionID`,`userID`) VALUES ('" + escape(p) + "','" + escape(user_id) + "')");
}
}
internal int getUserIdFromSessionId(string p)
{
MySqlDataReader reader = mysql.read("SELECT `userID` FROM `session` WHERE `sessionID` = '" + escape(p) + "'");
int ret = 0;
while (reader.Read())
{
ret = reader.GetInt32("userID");
}
reader.Close();
return ret;
}
internal int getFolderId(int user_id, string p)
{
MySqlDataReader reader = mysql.read("SELECT `id` FROM `folder` WHERE `userID` = '" + escape(user_id) + "' AND `name` = '"+escape(p)+"'");
int ret = 0;
while (reader.Read())
{
ret = reader.GetInt32("id");
}
reader.Close();
return ret;
}
internal List<IMAP_Message_ret> getMailWithFolderId(int folder_id)
{
List<IMAP_Message_ret> ret = new List<IMAP_Message_ret>();
MySqlDataReader reader = mysql.read("SELECT `id`,`messageid`,`date`,`size`,`flags` FROM `mails` WHERE `folder` = '"+escape(folder_id)+"'");
while (reader.Read())
{
IMAP_Message_ret mail = new IMAP_Message_ret();
mail.uid = reader.GetInt32("id");
mail.id = reader.GetString("messageid");
mail.internalDate = reader.GetDateTime("date");
mail.size = reader.GetUInt32("size");
mail.flags = getFlags(reader.GetInt32("flags"));
ret.Add(mail);
}
reader.Close();
return ret;
}
private IMAP_MessageFlags getFlags(int p)
{
return (IMAP_MessageFlags)p;
}
}
}

View File

@ -127,6 +127,8 @@ namespace LumiSoft.IMAP.Server
public IMAP_MessageCollection Messages
{
get { return m_pMessages; }
///MYCHANGE 1
//set { m_pMessages = value; }
}
/// <summary>

View File

@ -2,6 +2,7 @@
using LumiSoft.Misc.Auth;
using LumiSoft.Misc;
using System.Net;
using System.Security.Cryptography.X509Certificates;
namespace LumiSoft.IMAP.Server
{
@ -17,9 +18,9 @@ namespace LumiSoft.IMAP.Server
/// <summary>
/// Defalut constructor.
/// </summary>
public IMAP_Server() : base()
public IMAP_Server(int port, SslMode mode ,X509Certificate2 sslcert) : base()
{
this.BindInfo = new IPBindInfo[]{new IPBindInfo("",IPAddress.Any,143,SslMode.None,null)};
this.BindInfo = new IPBindInfo[]{new IPBindInfo("",IPAddress.Any,port,mode,sslcert)};
}
}
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using MailServer.Services;
using MailServer.Logger;
@ -22,13 +23,13 @@ namespace MailServer
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new IMAP_Service(logger)
new IMAP_Service(logger,false)
};
ServiceBase.Run(ServicesToRun);
}
else if (args.Length == 1 || args[0] == "-r")
{
IMAP_Service imap_s = new IMAP_Service(logger);
IMAP_Service imap_s = new IMAP_Service(logger,false);
imap_s.Start(args);
while (true)
{

View File

@ -1,4 +1,6 @@
using LumiSoft.IMAP.Server;
using System.Security.Cryptography.X509Certificates;
using LumiSoft.Misc;
namespace MailServer.Services
{
@ -32,7 +34,15 @@ namespace MailServer.Services
{
components = new System.ComponentModel.Container();
this.ServiceName = "IMAP_Server";
this.server = new IMAP_Server();
if (ssl)
{
X509Certificate2 cert = new X509Certificate2("cert\\server.pfx");
this.server = new IMAP_Server(993, SslMode.SSL, cert);
}
else
{
this.server = new IMAP_Server(143, SslMode.None, null);
}
}
#endregion

View File

@ -7,6 +7,7 @@ using LumiSoft.Misc;
using LumiSoft.Misc.SocketServer;
using LumiSoft.IMAP.Server;
using MailServer.Logger;
using MailServer.DataBase;
namespace MailServer.Services
{
@ -16,6 +17,8 @@ namespace MailServer.Services
{
this.logger.add(EventType.Info, "IMAP", "Auth user: " + e.UserName);
e.Validated = database.checkUser(e.UserName, e.PasswData);
if(e.Validated)
database.setSessionID(e.Session.SessionID, e.UserName);
if (!e.Validated)
this.logger.add(EventType.Warning, "IMAP", "Auth User Failed: " + e.UserName);
//Console.WriteLine(e.ToString());
@ -55,21 +58,39 @@ namespace MailServer.Services
void server_GetFolders(object sender, IMAP_Folders e)
{
Console.WriteLine(e.ToString());
e.Add("Inbox/test", true);
e.Add("Inbox/asd", false);
//e.Folders = new IMAP_Folder[] {new IMAP_Folder("Inbox/test",true),new IMAP_Folder("Inbox/asd",false)};
}
void server_GetMessageItems(object sender, IMAP_eArgs_MessageItems e)
{
Console.WriteLine(e.ToString());
//a003
}
void server_GetMessagesInfo(object sender, IMAP_eArgs_GetMessagesInfo e)
{
Console.WriteLine(e.ToString());
int user_id = database.getUserIdFromSessionId(e.Session.SessionID);
int folder_id = database.getFolderId(user_id, e.FolderInfo.Folder);
if (folder_id == 0)
e.ErrorText = "Folder not Exist";
else
{
List<IMAP_Message_ret> mails = database.getMailWithFolderId(folder_id);
foreach (IMAP_Message_ret mail in mails)
{
e.FolderInfo.Messages.Add(mail.id, mail.uid, mail.internalDate, mail.size, mail.flags);
}
e.FolderInfo.FolderUID = folder_id;
}
}
void server_GetSharedRootFolders(object sender, SharedRootFolders_EventArgs e)
{
Console.WriteLine(e.ToString());
e.PublicRootFolders = new string[] { "Inbox" };
}
void server_GetSubscribedFolders(object sender, IMAP_Folders e)
@ -130,7 +151,7 @@ namespace MailServer.Services
void server_ValidateIPAddress(object sender, ValidateIP_EventArgs e)
{
logger.add(EventType.Info, "IMAP", "ValidateIP: " + e.ConnectedIP);
logger.add(EventType.Info, "IMAP", "ValidateIP: " + e.ConnectedIP + " " + e.SessionTag);
//Console.WriteLine(e.ToString());
}
}

View File

@ -18,10 +18,12 @@ namespace MailServer.Services
private IMAP_Server server;
private MysqlImap database;
private EventLogger logger;
private bool ssl;
public IMAP_Service(EventLogger log)
public IMAP_Service(EventLogger log, bool usessl)
{
this.logger = log;
this.ssl = usessl;
InitializeComponent();
database = new MysqlImap();
putEvents();