예제 #1
0
    protected void LoginButton_Click(object sender, EventArgs e)
    {
        try
        {
            CryptoClass crypto   = new CryptoClass();
            String      id       = userIdTb.Text;
            String      password = crypto.Encrypt(PasswordTb.Text);

            Assignment5ServiceRefs.Service1Client serviceRef = new Assignment5ServiceRefs.Service1Client();
            if (serviceRef.checkUserCredentials(id, password))
            {
                HttpCookie userCookies = new HttpCookie("userInfo");
                userCookies["id"]   = userIdTb.Text;
                userCookies.Expires = DateTime.Now.AddMonths(6);
                Response.Cookies.Add(userCookies);
                FormsAuthentication.RedirectFromLoginPage(userIdTb.Text, Persistent.Checked);
                Session["type"]     = "member";
                userCookies["type"] = "member";
                Response.Redirect("~/MemberPages/Member.aspx");
            }
            else
            {
                LoginErrorLbl.Text = "Invalid credentials!";
            }
        }
        catch
        {
            LoginErrorLbl.Text = "Invalid credentials!";
        }
    }
예제 #2
0
    protected void LogInButton_Click(object sender, EventArgs e)
    {
        try
        {
            //Create object of Crypto class
            CryptoClass crypto = new CryptoClass();
            String      id     = UserNameTb.Text;
            //Encrypt the password
            String password = crypto.Encrypt(PasswordTb.Text);

            //Create object of reference class
            Assignment5ServiceRefs.Service1Client serviceRef = new Assignment5ServiceRefs.Service1Client();
            //get the role from the Staff.xml
            string role = serviceRef.checkUserCredentialsForStaff(id, password);
            //if the role is not empty
            if (!role.Equals(""))
            {
                //Create a cookie and store the user id
                HttpCookie userCookies = new HttpCookie("userInfo");
                userCookies["id"] = UserNameTb.Text;
                //Cookie expires in 6 months
                userCookies.Expires = DateTime.Now.AddMonths(6);
                Response.Cookies.Add(userCookies);
                //Redirect to the staff page after authentication
                FormsAuthentication.RedirectFromLoginPage(UserNameTb.Text, Persistent.Checked);
                //Store the role in the session
                Session["type"]     = role;
                userCookies["type"] = role;
                //If the role is staff, redirect to the staff page
                if (role.Equals("staff"))
                {
                    Response.Redirect("~/StaffPage2/StaffPage.aspx");
                }
                //else if the role is admin, redirect to the admin page
                else if (role.Equals("admin"))
                {
                    Response.Redirect("~/StaffPage1/AdminPage.aspx");
                }
                //else redirect to the public default page
                else
                {
                    Response.Redirect("~/Default.aspx");
                }
            }
            //Print error message if the credentials are invalid
            else
            {
                LoginErrorLbl.Text = "Invalid credentials!";
            }
        }
        catch
        {
            LoginErrorLbl.Text = "Invalid credentials!";
        }
    }
예제 #3
0
    protected void signUpButton_Click(object sender, EventArgs e)
    {
        try
        {
            CryptoClass crypto = new CryptoClass();
            Assignment5ServiceRefs.Service1Client serviceRef = new Assignment5ServiceRefs.Service1Client();

            if (!UserIdTb.Text.ToString().Equals("") && !NameTb.Text.ToString().Equals("") && !PasswordTb.Text.ToString().Equals("") && !CardNoTb.Text.ToString().Equals(""))
            {
                String status = serviceRef.SignUpMembers(UserIdTb.Text, crypto.Encrypt(PasswordTb.Text), NameTb.Text, CardNoTb.Text);
                if (status.Equals("UserIdTaken"))
                {
                    UserIdErrorLbl.Text = "User Id is already taken";
                }
                else if (status.Equals("false"))
                {
                    UserIdErrorLbl.Text = "An exception occured during sign up.";
                }
                else
                {
                    Session["name"] = NameTb.Text;
                    FormsAuthentication.RedirectFromLoginPage(NameTb.Text, true);
                    Response.Redirect("~/MemberPages/Member");
                }
            }
            else
            {
                if (UserIdTb.Text.ToString().Equals(""))
                {
                    UserIdErrorLbl.Text = "User Id is required";
                }
                if (NameTb.Text.ToString().Equals(""))
                {
                    NameErrorLbl.Text = "Name is required";
                }
                if (PasswordTb.Text.ToString().Equals(""))
                {
                    PasswordErrorLbl.Text = "Password is required";
                }
                if (CardNoTb.Text.ToString().Equals(""))
                {
                    CardErrorLbl.Text = "Card Number is required";
                }
            }
        }
        catch
        {
            UserIdErrorLbl.Text = "An exception occured during sign up.";
        }
    }
예제 #4
0
        // трансляция сообщения подключенным клиентам
        protected internal void BroadcastMessage(string message, string id)
        {
            CryptoClass enc = new CryptoClass();

            for (int i = 0; i < clients.Count; i++)
            {
                if (clients[i].Id != id) // если id клиента не равно id отправляющего
                {
                    string en   = enc.Encrypt(message, keys[i]);
                    byte[] data = Encoding.Unicode.GetBytes(en);
                    clients[i].Stream.Write(data, 0, data.Length); //передача данных
                }
            }
        }
예제 #5
0
        protected internal void PrivateMessage(string polname, string otprname, string message)//личка
        {
            CryptoClass enc = new CryptoClass();

            if (message != "")
            {
                message = otprname + ":" + message;
            }
            else
            {
                message = otprname;
            }
            int i = usernames.IndexOf(polname);

            Console.WriteLine(message);
            string en = enc.Encrypt(message, keys[i]);

            byte[] data = Encoding.Unicode.GetBytes(en);
            clients[i].Stream.Write(data, 0, data.Length);
        }
예제 #6
0
        public void SendMessage(Enum enumElement, string message)
        {
            byte[] data;
            switch (enumElement)
            {
            case ClientKeys.FILEINFO:
                data = Encoding.Unicode.GetBytes(Cr.Encrypt(GetDescription(ClientKeys.FILEINFO) + message, key));
                break;

            case ClientKeys.FILE:
                data = Encoding.Unicode.GetBytes(Cr.Encrypt(GetDescription(ClientKeys.FILE) + RemoveNulls(message), key));
                break;

            case ClientKeys.FILEREMOVE:
                data = Encoding.Unicode.GetBytes(Cr.Encrypt(GetDescription(ClientKeys.FILEREMOVE) + message, key));
                break;

            case ClientKeys.FILEACCEPT:
                data = Encoding.Unicode.GetBytes(Cr.Encrypt(GetDescription(ClientKeys.FILEACCEPT) + message, key));
                break;

            case ClientKeys.FILEREADY:
                data = Encoding.Unicode.GetBytes(Cr.Encrypt(GetDescription(ClientKeys.FILEREADY), key));
                break;

            case ClientKeys.AUTORISATION:
                data = Encoding.Unicode.GetBytes((int)ClientKeys.AUTORISATION + message);
                break;

            case ClientKeys.NULL:
                data = new byte[] { };
                break;

            default:
                data = Encoding.Unicode.GetBytes(Cr.Encrypt(Convert.ToInt32(enumElement) + message, key));
                break;
            }
            stream.Write(data, 0, data.Length);
        }
예제 #7
0
        public void Process()
        {
            try
            {
                Stream = client.GetStream();
                // получаем имя пользователя
                string message = GetMessage();
                if (message[0] == '1') //регистрация
                {
                    message = message.Remove(0, 1);
                    if (!FileWrite(message).Result) //отклонение регистрации
                    {
                        byte[] reject = Encoding.Unicode.GetBytes("0");
                        Stream.Write(reject, 0, reject.Length);
                    }
                }

                if (message[0] == '2') //авторизация
                {
                    message = message.Remove(0, 1);
                    if (FileRead(message).Result == 2) //обработать несколько юзеров с одним ником
                    {
                        CryptoClass enc = new CryptoClass();
                        key = enc.GetStringKey(); //генерация ключа
                        server.Keys(key);
                        Console.WriteLine(key);
                        string keymess = "6" + key;
                        byte[] keym    = Encoding.Unicode.GetBytes(keymess);
                        Stream.Write(keym, 0, keym.Length); //отправка ключа
                        string[] name = message.Split(';'); //список юзеров
                        userName = name[0];
                        user     = userName;
                        message  = "8" + userName;//connect
                        // посылаем сообщение о входе в чат всем подключенным пользователям
                        server.BroadcastMessage(message, this.Id);

                        //список всех юзеров для новоприбывшего
                        string snames = "7";
                        server.Usernames(user);
                        List <string> unames = server.Usrnms;
                        for (int i = 0; i < unames.Count; i++)
                        {
                            snames += unames[i] + ";";
                        }
                        snames = snames.Remove(snames.Length - 1);
                        snames = enc.Encrypt(snames, key);
                        byte[] lnames = Encoding.Unicode.GetBytes(snames);
                        Stream.Write(lnames, 0, lnames.Length);
                        Console.WriteLine(message.Remove(0, 1) + " вошёл в чат");
                        string[] info = new string[3]; //0 получатель файла, 1 имя.расширение файла, 2 размер файла
                        while (true)                   //обмен сообщениями
                        {
                            try
                            {
                                message = GetMessage();
                                message = enc.Decrypt(message, key);
                                if (message[0] == '3')//обычное сообщение
                                {
                                    message = message.Remove(0, 1);
                                    message = String.Format("3" + userName + ":" + message);
                                    Console.WriteLine(message);
                                    server.BroadcastMessage(message, this.Id);
                                }
                                if (message[0] == '4')//личка
                                {
                                    message = message.Remove(0, 1);
                                    string PrivateMsg  = message.Substring(message.IndexOf(':') + 1);
                                    string PrivateName = message.Substring(0, message.IndexOf(':'));
                                    Console.WriteLine(this.userName + " для " + PrivateName + ": " + PrivateMsg);
                                    server.PrivateMessage(PrivateName, "4" + this.userName, PrivateMsg);
                                }
                                if (message[0] == 'h')//заголовок файла
                                {
                                    message = message.Remove(0, 1);
                                    info    = message.Split(':');
                                    Console.WriteLine("файл от " + this.userName + " для " + info[0] + ": " + info[1] + " " + info[2]);
                                    server.PrivateMessage(info[0], "h" + this.userName, info[1] + ":" + info[2]);
                                }
                                if (message[0] == 'a')//принял передачу
                                {
                                    message = message.Remove(0, 1);
                                    message = RemoveNulls(message);
                                    Console.WriteLine(this.userName + " принял файл от " + message);
                                    server.PrivateMessage(message, "a" + this.userName, "");
                                }
                                if (message[0] == 'r')//отклонил передачу
                                {
                                    message = message.Remove(0, 1);
                                    message = RemoveNulls(message);
                                    Console.WriteLine(this.userName + " отклонил файл от " + message);
                                    server.PrivateMessage(message, "r" + this.userName, "");
                                }
                                if (message[0] == 'f')//приём файла
                                {
                                    Console.WriteLine("прием");
                                    message = message.Remove(0, 1);
                                    //message = RemoveKosyak(message);
                                    GetFile(info[1], message);
                                }
                                if (message[0] == 's')//приём файла
                                {
                                    Console.WriteLine("отправка");
                                    SendFile(info[0], info[1]);
                                    File.Delete(info[1]);
                                }
                            }
                            catch
                            {
                                message = String.Format("9" + userName);//disconnect
                                Console.WriteLine(message.Remove(0, 1) + " покинул чат");
                                server.BroadcastMessage(message, this.Id);
                                break;
                            }
                        }
                    }
                }
                // в бесконечном цикле получаем сообщения от клиента
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                // в случае выхода из цикла закрываем ресурсы
                server.RemoveConnection(this.Id);
                Close();
            }
        }