Esempio n. 1
0
        public CKdcToClientLogInData LogInApp(string userName)
        {
            if (users_list.ContainsKey(userName))
            {
                Console.WriteLine("you already logged");
                return(null);
            }

            Console.WriteLine("LOGIN: NAME {0} ", userName);

            CKdcToClientLogInData msgKdcToClientLoggin = new CKdcToClientLogInData();

            User retUserFromDB = m_DBservice.getUserByName(userName);

            if (retUserFromDB != null)
            {
                byte[] userSessionKey = CAes.NewKey();
                string challenge      = Path.GetRandomFileName();
                int    port           = 1100 + retUserFromDB.ID;
                byte[] localPortByte  = BitConverter.GetBytes(port);

                msgKdcToClientLoggin.m_username        = CAes.SimpleEncryptWithPassword(userName, retUserFromDB.PassWord);
                msgKdcToClientLoggin.m_kdcAsSessionKey = CAes.SimpleEncryptWithPassword(userSessionKey, retUserFromDB.PassWord);
                msgKdcToClientLoggin.m_challenge       = CAes.SimpleEncryptWithPassword(challenge, retUserFromDB.PassWord);
                msgKdcToClientLoggin.m_localPort       = CAes.SimpleEncryptWithPassword(localPortByte, retUserFromDB.PassWord);

                UserServiceData userServiceData = new UserServiceData(userSessionKey, OperationContext.Current.GetCallbackChannel <IClientKdcCallBack>());
                userServiceData.logginChallenge = challenge + challenge;
                users_list.Add(userName, userServiceData);
            }
            else
            {
                msgKdcToClientLoggin = null;
            }

            return(msgKdcToClientLoggin);
        }
Esempio n. 2
0
        private void login_worker_DoWork(object sender, DoWorkEventArgs e)
        {
            bool        looginSuccess   = false;
            IKdcService proxy           = KdcProxy.Instance.GetProxy();
            string      usernameInvoked = string.Empty;
            string      passwordInvoked = string.Empty;

            Dispatcher.BeginInvoke(new Action(delegate
            {
                usernameInvoked = txtUserName.Text;
                passwordInvoked = txtPassWord.Password.ToString();
            }));


            Thread.Sleep(100);
            // try to log in to the server
            ClientAllData.Instance.setMyUsername(usernameInvoked);
            CKdcToClientLogInData logginData = proxy.LogInApp(usernameInvoked);

            // parse the result
            if (logginData != null)
            {
                string passWordHash = string.Empty;
                using (MD5 md5Hash = MD5.Create())
                {
                    passWordHash = CMd5hash.GetMd5Hash(md5Hash, passwordInvoked);
                }

                string retDecUserName = CAes.SimpleDecryptWithPassword(logginData.m_username, passWordHash);
                byte[] retDecPassword = CAes.SimpleDecryptWithPassword(logginData.m_kdcAsSessionKey, passWordHash);
                byte[] localPortByte  = CAes.SimpleDecryptWithPassword(logginData.m_localPort, passWordHash);
                int    localPort      = BitConverter.ToInt32(localPortByte, 0);

                if (retDecUserName == usernameInvoked)
                {
                    string retChallenge = CAes.SimpleDecryptWithPassword(logginData.m_challenge, passWordHash);

                    CLogInStatus logginStatus = new CLogInStatus();
                    logginStatus.m_username  = retDecUserName;
                    logginStatus.m_logInFail = false;
                    logginStatus.m_challenge = CAes.SimpleEncrypt(retChallenge + retChallenge, retDecPassword, retDecPassword);
                    if (proxy.SetLoginStatus(logginStatus))
                    {
                        clientPrivateData myClient = ClientAllData.Instance.getMyClient();
                        myClient.username          = retDecUserName;
                        myClient.m_kdcAsSessionKey = retDecPassword;
                        myClient.m_loginSucccess   = true;
                        myClient.m_localPort       = localPort;
                        looginSuccess = true;
                    }
                }
            }

            if (!looginSuccess)
            {
                CLogInStatus logginStatus = new CLogInStatus();
                logginStatus.m_username  = usernameInvoked;
                logginStatus.m_logInFail = true;
                proxy.SetLoginStatus(logginStatus);
            }
        }