171 lines
7.4 KiB
C#
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();
|
|
}));
|
|
}
|
|
}
|
|
}
|
|
}
|