예제 #1
0
        private void OnClAuthRespond(ClAuthRespond msg, ClientId id)
        {
            var cl          = clients[id];
            var accessFlags = UserAccess.Default;
            var result      = AuthenticateClient(msg.Login, msg.Password, ref accessFlags);
            var respond     = new SvAuthResult {
                Result = result
            };

            if (result == AuthResult.Accepted)
            {
                cl.Login         = msg.Login;
                cl.Password      = msg.Password;
                cl.AccessFlags   = accessFlags;
                cl.Authenticated = true;
                nameToClient.Add(cl.Login, cl);
                Root.Log(LogLevel.Info, "Client #{0} ({1}) : authentication succeeded", cl.Id, cl.Login);
                respond.Message = "All ok";
                if (SendTo(id, respond))
                {
                    OnClientAuthSuccess(id);
                }
            }
            else
            {
                Root.Log(LogLevel.Info, "Client #{0} ({1}) : authentication failed <{2}>",
                         cl.Id, msg.Login, result);
                // XXX: add extra details here
                respond.Message = "";
                if (SendTo(id, respond))
                {
                    DisconnectClient(cl);
                }
            }
        }
예제 #2
0
        public void SaveLoadMessageCryptoContainer()
        {
            // arrange
            const string refLogin    = "******";
            const string refPassword = "******";
            var          msg         = new ClAuthRespond
            {
                Login    = refLogin,
                Password = refPassword,
            };

            using (var csp = CryptoProviderFactory.Instance.CreateSymmetric(SdmSymmetricAlgorithm.AES))
            {
                using (var container = new MessageCryptoContainer())
                {
                    foreach (var p in protocols)
                    {
                        // act
                        container.Store(msg, csp, p);
                        MultiprotocolSaveLoad(container, () =>
                        {
                            var emsg = (ClAuthRespond)container.Extract(msg.Id, csp, p);
                            // assert
                            Assert.AreEqual(emsg.Login, refLogin);
                            Assert.AreEqual(emsg.Password, refPassword);
                        });
                    }
                }
            }
        }
예제 #3
0
        private void OnAuthChallenge(SvAuthChallenge msg)
        {
            sessionKey = asymCp.Decrypt(msg.SessionKey);
            var respond = new ClAuthRespond {
                Login = login, Password = password
            };

            Send(respond);
        }
예제 #4
0
        public void SaveLoadClAuthRespond()
        {
            // arrange
            const string refLogin    = "******";
            const string refPassword = "******";
            var          msg         = new ClAuthRespond
            {
                Login    = refLogin,
                Password = refPassword,
            };

            // act
            MultiprotocolSaveLoad(msg, () =>
            {
                // assert
                Assert.AreEqual(msg.Login, refLogin);
                Assert.AreEqual(msg.Password, refPassword);
            });
        }