Exemplo n.º 1
0
        public static void HandleAuthResponse(MooNetClient client, int moduleId, byte[] authMessage)
        {
            if (!OngoingAuthentications.ContainsKey(client))
            {
                return;                                              // TODO: disconnect him also. /raist.
            }
            var srp6 = OngoingAuthentications[client];

            byte[] A        = authMessage.Skip(1).Take(128).ToArray();            // client's public ephemeral
            byte[] M_client = authMessage.Skip(1 + 128).Take(32).ToArray();       // client's proof of session key.
            byte[] seed     = authMessage.Skip(1 + 32 + 128).Take(128).ToArray(); // client's second challenge.

            var success = srp6.Verify(A, M_client, seed);

            //if (Config.Instance.DisablePasswordChecks || success)
            if (success)
            {
                client.SessionKey = srp6.SessionKey;
                // send the logon proof.
                var message = bnet.protocol.authentication.ModuleMessageRequest.CreateBuilder()
                              .SetModuleId(moduleId)
                              .SetMessage(ByteString.CopyFrom(srp6.LogonProof))
                              .Build();

                client.MakeRPC(() =>
                               bnet.protocol.authentication.AuthenticationClient.CreateStub(client).ModuleMessage(null, message, callback => client.CheckAuthenticator()));

                client.Account = AccountManager.GetAccountByEmail(srp6.Account.Email);
                //if (client.Account.LoggedInClient != null)
                //    client.Account.LoggedInClient.Connection.Disconnect();
                //client.Account.LoggedInClient = client;
            }
            else // authentication failed because of invalid credentals.
            {
                client.AuthenticationErrorCode = AuthenticationErrorCodes.InvalidCredentials;
                //end authentication
                client.AuthenticationComplete();
            }

            OngoingAuthentications.Remove(client);
        }