2014-10-24 17:02:38 +00:00
//#define LOCAL_SERVER
using System ;
2014-04-25 21:55:43 +00:00
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows.Forms ;
using System.Net ;
using System.IO ;
using System.Security.Cryptography ;
using System.Configuration ;
using System.Threading ;
namespace MSGer.tk
{
public partial class LoginForm : Form
{
2014-10-24 17:02:38 +00:00
public static string UserCode = "" ;
2014-04-25 21:55:43 +00:00
public static Thread LThread ;
private void LoginForm_Load ( object sender , EventArgs e )
{
List < string > tmp ; //E-mail - 2014.04.02.
2014-10-24 17:02:38 +00:00
if ( Storage . Settings [ "email" ] . Length ! = 0 )
tmp = Storage . Settings [ "email" ] . Split ( ',' ) . ToList < string > ( ) ;
2014-04-25 21:55:43 +00:00
else tmp = new List < string > ( ) ;
2014-07-12 08:53:00 +00:00
//textBox1.Text = tmp[0];
//textBox1.Text = tmp[tmp.Count - 1]; //2014.07.08.
2014-07-23 22:44:20 +00:00
tmp . Add ( "" ) ;
2014-10-24 17:02:38 +00:00
textBox1 . Text = tmp [ Int32 . Parse ( Storage . Settings [ "lastusedemail" ] ) ] ; //2014.07.08.
2014-04-25 21:55:43 +00:00
textBox1 . AutoCompleteCustomSource . AddRange ( tmp . ToArray ( ) ) ;
2014-10-24 17:02:38 +00:00
this . Activate ( ) ;
this . Activate ( ) ;
2014-04-25 21:55:43 +00:00
}
public LoginForm ( )
{
InitializeComponent ( ) ;
2014-10-24 17:02:38 +00:00
this . Text = Language . Translate ( "login" ) ;
label1 . Text = Language . Translate ( "login" ) ;
label3 . Text = Language . Translate ( "login_password" ) ;
button1 . Text = Language . Translate ( "login" ) ;
linkLabel1 . Text = Language . Translate ( "registration" ) ;
linkLabel2 . Text = Language . Translate ( "forgotpassword" ) ;
2014-04-25 21:55:43 +00:00
textBox3 . Text = "" ;
List < string > lines = new List < string > ( ) ;
2014-10-24 17:02:38 +00:00
lines . Add ( Language . Translate ( "login_desc1" ) ) ;
2014-04-25 21:55:43 +00:00
lines . Add ( "" ) ;
2014-10-24 17:02:38 +00:00
lines . Add ( Language . Translate ( "login_desc2" ) ) ;
2014-04-25 21:55:43 +00:00
textBox3 . Lines = lines . ToArray ( ) ;
}
private void button1_Click ( object sender , EventArgs e )
{
2014-10-24 17:02:38 +00:00
if ( button1 . Text = = Language . Translate ( "button_cancel" ) )
2014-04-25 21:55:43 +00:00
{
2014-10-24 17:02:38 +00:00
ResetAfterLogin ( true ) ;
2014-04-25 21:55:43 +00:00
}
else
{
try
{
if ( LThread . IsAlive )
{
//2014.03.27. - Ne csináljon semmit - Elvégre ilyen nem fordulhat elő sokáig most már
return ;
}
}
catch
{
}
2014-07-12 08:53:00 +00:00
//Ellenőrizzen le néhány dolgot helyileg - 2014.04.28.
if ( textBox2 . Text . Length = = 0 )
return ;
2014-04-25 21:55:43 +00:00
// Create the thread object, passing in the Alpha.Beta method
// via a ThreadStart delegate. This does not start the thread.
LThread = new Thread ( new ThreadStart ( LoginUser ) ) ;
LThread . Name = "Login Thread" ;
// Start the thread
LThread . Start ( ) ;
// Spin for a while waiting for the started thread to become
// alive:
while ( ! LThread . IsAlive ) ;
}
}
public delegate int MyDelegate ( ) ;
public int SetLoginValues ( )
{
if ( UserText . Length = = 0 )
UserText = textBox1 . Text ;
else
textBox1 . Text = UserText ;
if ( PassText . Length = = 0 )
PassText = textBox2 . Text ;
else
textBox2 . Text = PassText ;
button1 . Text = LButtonText ;
linkLabel1 . Enabled = RegistLinkEn ; //2014.03.27.
if ( Closeable )
{
Closeable = false ;
Dispose ( ) ; //2014.04.04.
}
2014-10-24 17:02:38 +00:00
textBox1 . Enabled = false ; //2014.09.01.
textBox2 . Enabled = false ; //2014.09.01.
2014-04-25 21:55:43 +00:00
return 0 ;
}
2014-10-24 17:02:38 +00:00
public int ResetAfterLogin ( bool stoplogint )
2014-04-25 21:55:43 +00:00
{
button1 . Enabled = false ;
2014-10-24 17:02:38 +00:00
Request . Abort ( ) ;
if ( stoplogint ) //2014.09.01.
//{
LThread . Abort ( ) ; //2014.09.01.
//Networking.ReceiverConnection.Client.Shutdown(System.Net.Sockets.SocketShutdown.Receive); //2014.09.19.
//}
button1 . Text = Language . Translate ( "login" ) ;
2014-04-25 21:55:43 +00:00
button1 . Enabled = true ;
linkLabel1 . Enabled = true ;
2014-10-24 17:02:38 +00:00
textBox1 . Enabled = true ; //2014.09.01.
textBox2 . Enabled = true ; //2014.09.01.
2014-04-25 21:55:43 +00:00
return 0 ;
}
2014-10-24 17:02:38 +00:00
public int ResetAfterLogin ( )
{ //2014.09.01.
return ResetAfterLogin ( false ) ; //Ha a thread hívja meg, ne állítsa le a thread-et
}
2014-04-25 21:55:43 +00:00
public static string UserText = "" ; //2014.02.14.
public static string PassText = "" ;
public static string LButtonText = "" ;
public static bool RegistLinkEn = true ;
public static bool Closeable = false ;
public static HttpWebRequest Request ; //2014.03.27. - A megállitáshoz
public void LoginUser ( )
{
//Állitson vissza minden változót, hogy újra belerakja az értekeket - 2014.02.28.
UserText = "" ;
PassText = "" ;
RegistLinkEn = false ; //2014.03.27.
2014-10-24 17:02:38 +00:00
LButtonText = Language . Translate ( "button_cancel" ) ;
2014-04-25 21:55:43 +00:00
this . Invoke ( new MyDelegate ( SetLoginValues ) ) ;
//HttpWebRequest httpWReq =
// (HttpWebRequest)WebRequest.Create("http://msger.tk/client.php");
2014-10-24 17:02:38 +00:00
#if LOCAL_SERVER
HttpWebRequest httpWReq =
( HttpWebRequest ) WebRequest . Create ( "http://localhost/ChatWithWords/client.php" ) ;
#else
2014-04-25 21:55:43 +00:00
HttpWebRequest httpWReq =
( HttpWebRequest ) WebRequest . Create ( "http://msger.url.ph/client.php" ) ;
2014-10-24 17:02:38 +00:00
#endif
2014-04-25 21:55:43 +00:00
Request = httpWReq ; //2014.03.27.
ASCIIEncoding encoding = new ASCIIEncoding ( ) ;
string postData = "username=" + UserText ;
2014-10-24 17:02:38 +00:00
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
2014-04-25 21:55:43 +00:00
postData + = "&key=cas1fe4a6feFEFEFE1616CE8099VFE1444cdasf48c1ase5dg" ;
2014-10-24 17:02:38 +00:00
postData + = "&port=" + Storage . Settings [ "port" ] ; //2014.08.29.
postData + = "&isserver=" + Storage . Settings [ "isserver" ] ; //2014.09.26.
2014-04-25 21:55:43 +00:00
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 )
{
2014-10-24 17:02:38 +00:00
MessageBox . Show ( Language . Translate ( "connecterror" ) + "\n" + e . Message , Language . Translate ( "error" ) ) ;
2014-04-25 21:55:43 +00:00
this . Invoke ( new MyDelegate ( ResetAfterLogin ) ) ;
return ;
}
else
{
return ;
}
}
//Bejelentkezés folyamatban...
HttpWebResponse response ;
try
{
response = ( HttpWebResponse ) httpWReq . GetResponse ( ) ;
}
catch ( WebException e )
{
if ( e . Status ! = WebExceptionStatus . RequestCanceled )
{
2014-10-24 17:02:38 +00:00
MessageBox . Show ( Language . Translate ( "connecterror" ) + "\n" + e . Message , Language . Translate ( "error" ) ) ;
2014-04-25 21:55:43 +00:00
this . Invoke ( new MyDelegate ( ResetAfterLogin ) ) ;
return ;
}
else
{
return ;
}
}
string responseString = new StreamReader ( response . GetResponseStream ( ) ) . ReadToEnd ( ) ;
try
{
if ( responseString [ 0 ] = = '<' )
{
this . Invoke ( new MyDelegate ( ResetAfterLogin ) ) ;
2014-10-24 17:02:38 +00:00
MessageBox . Show ( Language . Translate ( "error" ) + ":\n" + responseString ) ;
2014-04-25 21:55:43 +00:00
return ;
}
else
responseString = responseString . Remove ( responseString . IndexOf ( '<' ) ) ;
}
catch
{
}
if ( String . Compare ( responseString , "Fail" ) = = 0 )
{
this . Invoke ( new MyDelegate ( ResetAfterLogin ) ) ;
2014-10-24 17:02:38 +00:00
MessageBox . Show ( Language . Translate ( "error" ) + ": " + Language . Translate ( "login_badnamepass" ) , Language . Translate ( "error" ) ) ;
2014-04-25 21:55:43 +00:00
}
else
{
//Elmenti az E-mail-t
2014-10-24 17:02:38 +00:00
if ( ! Storage . Settings [ "email" ] . Contains ( UserText ) )
2014-07-12 08:53:00 +00:00
{
2014-10-24 17:02:38 +00:00
if ( Storage . Settings [ "email" ] . Length ! = 0 ) //2014.07.08.
Storage . Settings [ "email" ] + = "," ;
Storage . Settings [ "email" ] + = UserText ;
2014-07-12 08:53:00 +00:00
}
2014-10-24 17:02:38 +00:00
//else - 2014.10.02. - Egyszer észrevettem a Google Code összehasonlítójával, hogy ez nem kéne ide
Storage . Settings [ "lastusedemail" ] = Storage . Settings [ "email" ] . Split ( ',' ) . ToList < string > ( ) . IndexOf ( UserText ) . ToString ( ) ;
//Settings.Default.Save();
2014-04-25 21:55:43 +00:00
//Bejelentkezés
string [ ] respstr = responseString . Split ( 'ͦ' ) ;
2014-10-24 17:02:38 +00:00
//CurrentUser.UserID = Convert.ToInt32(respstr[0]); //Régebben ezt találtam, most meg az Int32.Parse-t... (2014.04.02.)
//CurrentUser.Name = respstr[1]; //2014.04.04.
//respstr[1]:
if ( respstr [ 3 ] . Contains ( "Fail" ) )
{
this . Invoke ( new MyDelegate ( ResetAfterLogin ) ) ;
MessageBox . Show ( respstr [ 3 ] ) ;
return ;
}
string [ ] entries = respstr [ 3 ] . 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.AddRange(ips); //2014.08.29.
/ * foreach ( var entry in ips ) //2014.08.30.
{
UserInfo . IPs . Add ( entry ) ;
} * /
UserInfo . IPs = new HashSet < IPEndPoint > ( ips ) ; //2014.08.30.
//Storage.Settings["myip"] = respstr[2]; //2014.08.29. - A CurrentUser.IPs-en keresztül is lehet rá hivatkozni
CurrentUser . IP = IPAddress . Parse ( respstr [ 2 ] ) ; //2014.10.24. - Most már csak ott lehet rá hivatkozni, felesleges eltárolni
//CurrentUser.State = 1; //2014.08.31. 0:42 -- MainForm
//2014.09.19. - Bejelentkezés elküldése áthelyezve a MainForm-ba
CurrentUser . UserID = Int32 . Parse ( respstr [ 0 ] ) ; //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 = CurrentUser.UserID.ToString() + ".db"; //2014.08.07.
Storage . FileName = respstr [ 0 ] + ".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 [ 4 ] ; //2014.10.24. 1:39
//LoginForm.UserCode = CalculateMD5Hash(CalculateMD5Hash(PassText) + " Some text because why not " + CurrentUser.UserID).ToLower();
LoginForm . UserCode = CalculateMD5Hash ( ReceivedPass + " Some text because why not " + CurrentUser . UserID ) . ToLower ( ) ;
2014-04-25 21:55:43 +00:00
Closeable = true ;
this . Invoke ( new MyDelegate ( SetLoginValues ) ) ;
}
}
2014-10-24 17:02:38 +00:00
2014-04-25 21:55:43 +00:00
public static string CalculateMD5Hash ( string input )
{
// step 1, calculate MD5 hash from input
MD5 md5 = System . Security . Cryptography . MD5 . Create ( ) ;
byte [ ] inputBytes = System . Text . Encoding . ASCII . GetBytes ( input ) ;
byte [ ] hash = md5 . ComputeHash ( inputBytes ) ;
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder ( ) ;
for ( int i = 0 ; i < hash . Length ; i + + )
{
sb . Append ( hash [ i ] . ToString ( "X2" ) ) ;
}
return sb . ToString ( ) ;
}
private void RegistrateLink ( object sender , LinkLabelLinkClickedEventArgs e )
{
( new LoginForm_RegistrationForm ( ) ) . ShowDialog ( ) ;
}
private void LoginForm_FormClosing ( object sender , FormClosingEventArgs e )
{
if ( LThread ! = null & & LThread . IsAlive )
{
LThread . Abort ( ) ; //2014.03.27. - Na vajon kell-e más
Request . Abort ( ) ; //2014.03.27. - Kell... Ez
}
if ( CurrentUser . UserID = = 0 )
Program . Exit ( ) ;
}
2014-10-24 17:02:38 +00:00
private void linkLabel2_LinkClicked ( object sender , LinkLabelLinkClickedEventArgs e )
{
if ( textBox1 . Text . Length = = 0 )
{
MessageBox . Show ( "Nincs megadva felhasználónév." ) ; //Translate!
return ;
}
if ( MessageBox . Show ( "Új jelszót kérsz a megadott névhez?" , "" , MessageBoxButtons . YesNo ) = = DialogResult . Yes )
{
string ret = Networking . SendRequest ( "resetpass" , textBox1 . Text , 0 , false ) ;
if ( ret = = "nouser" )
MessageBox . Show ( "A megadott felhasználó nem létezik." ) ;
else if ( ret = = "already" )
MessageBox . Show ( "A link MÁR el lett küldve az E-mail címedre." ) ;
else if ( ret = = "sent" )
MessageBox . Show ( "A link elküldve az E-mail címedre." ) ;
else if ( ret . Contains ( "notsent" ) )
MessageBox . Show ( "A link NEM lett elküldve az E-mail címedre.\nHiba: " + ret . Remove ( ret . IndexOf ( "notsent" ) , "notsent" . Length + 1 ) ) ;
else
MessageBox . Show ( "Ismeretlen hiba:\n" + ret ) ;
}
}
2014-04-25 21:55:43 +00:00
}
}