Messenger/MSGer.tk/Forms/LoginForm.LoginUser.cs

171 lines
7.4 KiB
C#

using System; //Copyright (c) NorbiPeti 2015 - See LICENSE file
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MSGer.tk
{
partial class LoginForm
{
public static HttpWebRequest Request; //2014.03.27. - A megállitáshoz
public void LoginUser()
{
string UserText = "";
string PassText = "";
this.Invoke(new Action(delegate
{ //2015.04.03.
UserText = textBox1.Text;
PassText = textBox2.Text;
linkLabel1.Enabled = false;
button1.Text = Language.Translate(Language.StringID.Button_Cancel);
}));
HttpWebRequest httpWReq =
(HttpWebRequest)WebRequest.Create("http://msger.url.ph/client.php");
Request = httpWReq; //2014.03.27.
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "username=" + UserText;
postData += "&password=" + CalculateMD5Hash(PassText).ToLower(); //ToLower: 2014.10.24. 1:22 - Most már a PHP-nak is titkosítania kell többek közt MD5-tel
postData += "&key=cas1fe4a6feFEFEFE1616CE8099VFE1444cdasf48c1ase5dg";
//postData += "&port=" + Storage.Settings[SettingType.Port]; //2014.08.29.
postData += "&port=" + CurrentUser.Port; //2015.05.24.
List<IPAddress> myips = new List<IPAddress>();
do
{ //Az ips már deklarálva lesz később; megváltoztattam myips-re ezt
foreach (var ipaddr in Dns.GetHostAddresses(Dns.GetHostName()))
if (ipaddr.AddressFamily == AddressFamily.InterNetworkV6)
myips.Add(ipaddr);
string ipstr = "";
foreach (var ip in myips)
{
ipstr += ip + ";";
}
postData += "&ip=" + Uri.EscapeUriString(ipstr);
} while (false);
byte[] data = encoding.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoded";
httpWReq.ContentLength = data.Length;
try
{
using (Stream stream = httpWReq.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
catch (WebException e)
{
if (e.Status != WebExceptionStatus.RequestCanceled)
{
new ErrorHandler(ErrorType.ServerConnectError, e); //2015.06.04.
ResetAfterLogin(false); //2015.04.03.
return;
}
else
{
return;
}
}
HttpWebResponse response;
try
{
response = (HttpWebResponse)httpWReq.GetResponse();
}
catch (WebException e)
{
if (e.Status != WebExceptionStatus.RequestCanceled)
{
new ErrorHandler(ErrorType.ServerConnectError, e); //2015.06.04.
ResetAfterLogin(false); //2015.04.03.
return;
}
else
{
return;
}
}
string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
try
{
if (responseString[0] == '<')
{
ResetAfterLogin(false); //2015.04.03.
new ErrorHandler(ErrorType.ServerConnectError, new Exception(responseString));
return;
}
else
responseString = responseString.Remove(responseString.IndexOf('<'));
}
catch
{
}
if (String.Compare(responseString, "Fail") == 0)
{
ResetAfterLogin(false); //2015.04.03.
MessageBox.Show(Language.Translate(Language.StringID.Error) + ": " + Language.Translate(Language.StringID.Login_BadNamePass), Language.Translate(Language.StringID.Error));
}
else if (responseString.Contains("Fail"))
{ //2015.04.03.
ResetAfterLogin(false);
new ErrorHandler(ErrorType.ServerConnectError, new Exception(responseString)); //2015.06.04.
}
else
{
//Elmenti az E-mail-t
if (!Storage.Settings[SettingType.Email].Contains(UserText))
{
if (Storage.Settings[SettingType.Email].Length != 0) //2014.07.08.
Storage.Settings[SettingType.Email] += ",";
Storage.Settings[SettingType.Email] += UserText;
}
Storage.Settings[SettingType.LastUsedEmail] = Storage.Settings[SettingType.Email].Split(',').ToList<string>().IndexOf(UserText).ToString();
string[] respstr = responseString.Split('ͦ');
if (respstr.Any(entry => entry.Contains("Fail"))) //2014.12.05.
{
//this.Invoke(new MyDelegate(ResetAfterLogin));
ResetAfterLogin(false); //2015.04.03.
/*try
{
MessageBox.Show(respstr.Single(entry => entry.Contains("Fail"))); //2014.12.05.
}
catch { }*/
MessageBox.Show(respstr.FirstOrDefault(entry => entry.Contains("Fail"))); //2014.12.05. - Single-->FirstOrDefault: 2015.06.06.
return;
}
string[] entries = respstr[(int)LoginInfo.IPs].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
IEnumerable<IPEndPoint> ips = entries.Select(entry => ((entry != ",") ? new IPEndPoint(IPAddress.Parse(entry.Split(',')[0]), Int32.Parse(entry.Split(',')[1])) : new IPEndPoint(IPAddress.Loopback, 0)));
UserInfo.IPs = new HashSet<IPEndPoint>(ips); //2014.08.30.
CurrentUser.IPs = myips;
CurrentUser.UserID = Int32.Parse(respstr[(int)LoginInfo.UserID]); //2014.09.01. - Áthelyeztem, hogy addig ne higgye bejelentkezettnek, amíg el nem küldi a többieknek
Storage.SaltKey = CalculateMD5Hash(PassText); //2014.08.07.
Storage.FileName = respstr[(int)LoginInfo.UserID] + ".db"; //2014.09.01. - Felesleges számmá alakítani, majd vissza
CurrentUser.UserName = UserText; //2014.09.01. - Ha semmit nem tud saját magáról, és más sem, de nem ismerőse saját magának, akkor az itt beállított felhasználónév érvényesül
CurrentUser.Name = UserText; //2014.09.01.
string ReceivedPass = respstr[(int)LoginInfo.Password]; //2014.10.24. 1:39
LoginForm.UserCode = CalculateMD5Hash(ReceivedPass + " Some text because why not " + CurrentUser.UserID).ToLower();
this.Invoke(new Action(delegate
{
this.Dispose();
}));
}
}
}
}