select ist nun implementiert
This commit is contained in:
parent
62359d6d91
commit
c554e39451
@ -41,5 +41,13 @@ namespace MailServer.DataBase
|
|||||||
MySqlDataReader reader = command.ExecuteReader();
|
MySqlDataReader reader = command.ExecuteReader();
|
||||||
return reader;
|
return reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void write(string sql)
|
||||||
|
{
|
||||||
|
Console.WriteLine(sql);
|
||||||
|
MySqlCommand command = connection.CreateCommand();
|
||||||
|
command.CommandText = sql;
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,24 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
/*using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Text.RegularExpressions;
|
||||||
|
/*using System.Linq;
|
||||||
using System.Text;*/
|
using System.Text;*/
|
||||||
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
|
using LumiSoft.IMAP.Server;
|
||||||
|
|
||||||
namespace MailServer.DataBase
|
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
|
class MysqlImap
|
||||||
{
|
{
|
||||||
private MysqlConnector mysql;
|
private MysqlConnector mysql;
|
||||||
@ -27,7 +36,7 @@ namespace MailServer.DataBase
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
while(reader.Read()) {
|
while(reader.Read()) {
|
||||||
if (reader.GetString(0).ToLower() == pass.ToLower())
|
if (reader.GetString("pass").ToLower() == pass.ToLower())
|
||||||
{
|
{
|
||||||
reader.Close();
|
reader.Close();
|
||||||
return true;
|
return true;
|
||||||
@ -48,6 +57,10 @@ namespace MailServer.DataBase
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private string escape(int num)
|
||||||
|
{
|
||||||
|
return escape(num.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
static string getMd5Hash(string input)
|
static string getMd5Hash(string input)
|
||||||
{
|
{
|
||||||
@ -60,5 +73,78 @@ namespace MailServer.DataBase
|
|||||||
}
|
}
|
||||||
return sBuilder.ToString();
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,8 @@ namespace LumiSoft.IMAP.Server
|
|||||||
public IMAP_MessageCollection Messages
|
public IMAP_MessageCollection Messages
|
||||||
{
|
{
|
||||||
get { return m_pMessages; }
|
get { return m_pMessages; }
|
||||||
|
///MYCHANGE 1
|
||||||
|
//set { m_pMessages = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using LumiSoft.Misc.Auth;
|
using LumiSoft.Misc.Auth;
|
||||||
using LumiSoft.Misc;
|
using LumiSoft.Misc;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
|
||||||
namespace LumiSoft.IMAP.Server
|
namespace LumiSoft.IMAP.Server
|
||||||
{
|
{
|
||||||
@ -17,9 +18,9 @@ namespace LumiSoft.IMAP.Server
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defalut constructor.
|
/// Defalut constructor.
|
||||||
/// </summary>
|
/// </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)};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.ServiceProcess;
|
using System.ServiceProcess;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
|
||||||
using MailServer.Services;
|
using MailServer.Services;
|
||||||
using MailServer.Logger;
|
using MailServer.Logger;
|
||||||
@ -22,13 +23,13 @@ namespace MailServer
|
|||||||
ServiceBase[] ServicesToRun;
|
ServiceBase[] ServicesToRun;
|
||||||
ServicesToRun = new ServiceBase[]
|
ServicesToRun = new ServiceBase[]
|
||||||
{
|
{
|
||||||
new IMAP_Service(logger)
|
new IMAP_Service(logger,false)
|
||||||
};
|
};
|
||||||
ServiceBase.Run(ServicesToRun);
|
ServiceBase.Run(ServicesToRun);
|
||||||
}
|
}
|
||||||
else if (args.Length == 1 || args[0] == "-r")
|
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);
|
imap_s.Start(args);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
using LumiSoft.IMAP.Server;
|
using LumiSoft.IMAP.Server;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using LumiSoft.Misc;
|
||||||
|
|
||||||
namespace MailServer.Services
|
namespace MailServer.Services
|
||||||
{
|
{
|
||||||
@ -32,7 +34,15 @@ namespace MailServer.Services
|
|||||||
{
|
{
|
||||||
components = new System.ComponentModel.Container();
|
components = new System.ComponentModel.Container();
|
||||||
this.ServiceName = "IMAP_Server";
|
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
|
#endregion
|
||||||
|
@ -7,6 +7,7 @@ using LumiSoft.Misc;
|
|||||||
using LumiSoft.Misc.SocketServer;
|
using LumiSoft.Misc.SocketServer;
|
||||||
using LumiSoft.IMAP.Server;
|
using LumiSoft.IMAP.Server;
|
||||||
using MailServer.Logger;
|
using MailServer.Logger;
|
||||||
|
using MailServer.DataBase;
|
||||||
|
|
||||||
namespace MailServer.Services
|
namespace MailServer.Services
|
||||||
{
|
{
|
||||||
@ -16,6 +17,8 @@ namespace MailServer.Services
|
|||||||
{
|
{
|
||||||
this.logger.add(EventType.Info, "IMAP", "Auth user: " + e.UserName);
|
this.logger.add(EventType.Info, "IMAP", "Auth user: " + e.UserName);
|
||||||
e.Validated = database.checkUser(e.UserName, e.PasswData);
|
e.Validated = database.checkUser(e.UserName, e.PasswData);
|
||||||
|
if(e.Validated)
|
||||||
|
database.setSessionID(e.Session.SessionID, e.UserName);
|
||||||
if (!e.Validated)
|
if (!e.Validated)
|
||||||
this.logger.add(EventType.Warning, "IMAP", "Auth User Failed: " + e.UserName);
|
this.logger.add(EventType.Warning, "IMAP", "Auth User Failed: " + e.UserName);
|
||||||
//Console.WriteLine(e.ToString());
|
//Console.WriteLine(e.ToString());
|
||||||
@ -55,21 +58,39 @@ namespace MailServer.Services
|
|||||||
void server_GetFolders(object sender, IMAP_Folders e)
|
void server_GetFolders(object sender, IMAP_Folders e)
|
||||||
{
|
{
|
||||||
Console.WriteLine(e.ToString());
|
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)
|
void server_GetMessageItems(object sender, IMAP_eArgs_MessageItems e)
|
||||||
{
|
{
|
||||||
Console.WriteLine(e.ToString());
|
Console.WriteLine(e.ToString());
|
||||||
|
//a003
|
||||||
}
|
}
|
||||||
|
|
||||||
void server_GetMessagesInfo(object sender, IMAP_eArgs_GetMessagesInfo e)
|
void server_GetMessagesInfo(object sender, IMAP_eArgs_GetMessagesInfo e)
|
||||||
{
|
{
|
||||||
Console.WriteLine(e.ToString());
|
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)
|
void server_GetSharedRootFolders(object sender, SharedRootFolders_EventArgs e)
|
||||||
{
|
{
|
||||||
Console.WriteLine(e.ToString());
|
Console.WriteLine(e.ToString());
|
||||||
|
e.PublicRootFolders = new string[] { "Inbox" };
|
||||||
}
|
}
|
||||||
|
|
||||||
void server_GetSubscribedFolders(object sender, IMAP_Folders e)
|
void server_GetSubscribedFolders(object sender, IMAP_Folders e)
|
||||||
@ -130,7 +151,7 @@ namespace MailServer.Services
|
|||||||
|
|
||||||
void server_ValidateIPAddress(object sender, ValidateIP_EventArgs e)
|
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());
|
//Console.WriteLine(e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,12 @@ namespace MailServer.Services
|
|||||||
private IMAP_Server server;
|
private IMAP_Server server;
|
||||||
private MysqlImap database;
|
private MysqlImap database;
|
||||||
private EventLogger logger;
|
private EventLogger logger;
|
||||||
|
private bool ssl;
|
||||||
|
|
||||||
public IMAP_Service(EventLogger log)
|
public IMAP_Service(EventLogger log, bool usessl)
|
||||||
{
|
{
|
||||||
this.logger = log;
|
this.logger = log;
|
||||||
|
this.ssl = usessl;
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
database = new MysqlImap();
|
database = new MysqlImap();
|
||||||
putEvents();
|
putEvents();
|
||||||
|
Loading…
Reference in New Issue
Block a user