UserLoginControl.cs 7.98 KB
using System;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using MoyaAdminLib;
using System.Web.Script.Serialization;
using System.Net;
using ThermoPrinterLibrary;

namespace MoyaSignup
{
    public partial class UserLoginControl : UserControl
    {
        public event EventHandler LoginOk;

        public delegate void ThermoPrinterEvent(ThermoPrinter.Models model);

        public event ThermoPrinterEvent SetPrinter;
        public User CurrentUser;

        public UserLoginControl()
        {
            InitializeComponent();
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            BackColor = Color.Transparent;
            infoLabel.Text = "Hei! Kirjoita sähköpostiosoitteesi";
        }

        private void UserLoginControl_Load(object sender, EventArgs e)
        {
        }

        private void TxtEmail_TextChanged(object sender, EventArgs e)
        {
            var txt = txtEmail.Text;
            if (IsValidEmail(txt))
            {
                timer1.Stop();
                timer1.Start();
            }
            else
            {
                if (txtEmail.Text == "thermo2")
                {
                    SetPrinter?.Invoke(ThermoPrinter.Models.IDP3210);
                    txtEmail.Text = "OK";
                }
                else if (txtEmail.Text == "thermo1")
                {
                    SetPrinter?.Invoke(ThermoPrinter.Models.TMT188II);
                    txtEmail.Text = "OK";
                }

                timer1.Stop();
                CurrentUser = null;
                btnNewProfile.Visible = false;
                infoLabel.Text = "Hei! Kirjoita sähköpostiosoitteesi";
            }
        }

        private static bool IsValidEmail(string email)
        {
            if (!email.Contains("@") || !email.Contains("."))
                return false;

            var parts = email.Split(new[] {"@"}, StringSplitOptions.RemoveEmptyEntries);
            if (parts.Length == 2)
            {
                if (!parts[1].Contains("."))
                    return false;
                var domainparts = parts[1].Split(new[] {"."}, StringSplitOptions.RemoveEmptyEntries);
                if (domainparts.Length < 2)
                    return false;
                var ltd = domainparts[domainparts.Length - 1];
                if (ltd.Length < 2)
                    return false;
            }
            else
            {
                return false;
            }

            try
            {
                var addr = new System.Net.Mail.MailAddress(email);
                return addr.Address == email;
            }
            catch
            {
                return false;
            }
        }

        private void Timer1_Tick(object sender, EventArgs e)
        {
            var client = new RestClient();
            try
            {
                var json = client.MakeRequest("user", "email=" + txtEmail.Text);
                var ser = new JavaScriptSerializer();
                var euser = ser.Deserialize<Eventuser>(json);
                if (euser != null)
                {
                    btnNewProfile.Visible = false;
                    CurrentUser = new User(euser);
                    infoLabel.Text = "Hei! " + CurrentUser + " Kirjoita salasanasi ja kirjaudu";
                    ShowLogin(true);
                }
            }
            catch (WebException ex)
            {
                timer1.Stop();
                var apiException = ex as MoyaApiException;
                if (apiException != null && apiException.StatusCode == HttpStatusCode.NotFound)
                {
                    CurrentUser = null;
                    infoLabel.Text = "Uusi kävijä?";
                    btnNewProfile.Visible = true;
                    ShowLogin(false);
                }
                else
                {
                    Logger.Error("Connection to MoyaApi failed", ex);

                    MessageBox.Show(
                        "Yhteys taustajärjestelmään epäonnistui. Ota yhteys infoon.",
                        "Järjestelmävirhe",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error
                    );
                }
            }
            catch (Exception ex)
            {
                timer1.Stop();
                Logger.Error("Unexpected exception", ex);

                MessageBox.Show(
                    "Odottamaton virhe. Ota yhteys infoon.",
                    "Järjestelmävirhe",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                );
            }
        }

        private void ShowLogin(bool show)
        {
            passwordTextBox.Visible = show;
            loginButton.Visible = show;
        }

        private void Login()
        {
            var client = new RestClient(RestClient.ApiURL, HttpVerb.POST);
            //client.PostData = "password=" + WebUtility.UrlEncode(passwordTextBox.Text);
            client.PostData = "password=" + passwordTextBox.Text;
            client.ContentType = "application/x-www-form-urlencoded";
            try
            {
                var json = client.MakeRequest("v2/user/" + CurrentUser.UserId + "/check-password");
                // string json2 = client.MakeRequest("user/"+ CurrentUser.UserId +"/check-password");
                // MoyaWeb/rest/user/eventusers
                var ser = new JavaScriptSerializer();
                var euser = ser.Deserialize<Eventuser>(json);
                if (euser != null)
                {
                    CurrentUser = new User(euser)
                    {
                        Email = txtEmail.Text
                    };

                    LoginOk?.Invoke(this, null);
                }
                else
                {
                    WrongPass();
                }
            }
            catch (Exception)
            {
                WrongPass();
            }
        }

        private void LoginButton_Click(object sender, EventArgs e)
        {
            Login();
        }

        private void WrongPass()
        {
            infoLabel.Text = "Väärä salasana. Syötä salasana uudelleen";
        }

        private void PasswordTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                Login();
        }

        private void BtnNewProfile_Click(object sender, EventArgs e)
        {
            CurrentUser = new User
            {
                Email = txtEmail.Text
            };
            //Send info to parent control
            LoginOk?.Invoke(this, null);
        }


        internal void Clear()
        {
            CurrentUser = null;
            txtEmail.Text = "";
            passwordTextBox.Visible = false;
            passwordTextBox.Text = "";
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            BackColor = Color.Transparent;
            infoLabel.Text = "Hei! Kirjoita sähköpostiosoitteesi";
            loginButton.Visible = false;
        }

        private void UserLoginControl_KeyUp(object sender, KeyEventArgs e)
        {
            /*if (e.Alt && e.Control && e.KeyCode == Keys.S)
            {
                Application.Exit();
                return;
            }

            if (e.Alt && e.KeyCode == Keys.F5)
            {
                //userDetailsEditor1.SetPrinter(ThermoPrinterLibrary.ThermoPrinter.Models.IDP3210);
                //MessageBox.Show("Printteri: IDP3210");
            }*/
        }

        private void TxtEmail_KeyUp(object sender, KeyEventArgs e)
        {
            /*if (e.Alt && e.Control && e.KeyCode == Keys.S)
            {
                Program.form1.AllowShutdown = true;
                Application.Exit();
                return;
            }
            if (e.Alt && e.KeyCode == Keys.F5)
            {
                //userDetailsEditor1.SetPrinter(ThermoPrinterLibrary.ThermoPrinter.Models.IDP3210);
                //MessageBox.Show("Printteri: IDP3210");
            }*/
        }
    }
}