예제 #1
0
        private void Checker_RequestErrored(object sender, EventArgs e)
        {
            Logger.Log4("Token Checkup failed");

            ClientTokenCheck checker = sender as ClientTokenCheck;

            if (checker == null || checker.Tag as ServerPlayer == null)
            {
                return;
            }

            ServerPlayer player = checker.Tag as ServerPlayer;

            Logger.Log3("Token verification failed for " + player.PlayerID.ToString() + ":" + player.Callsign);

            player.AuthStatus = ServerPlayer.AuthStatuses.Failed;
            if (!Config.AllowAnonUsers)
            {
                SendReject(player, MsgReject.RejectionCodes.RejectBadCallsign, Resources.BadAuthMessage);
            }
            else
            {
                SendAccept(player);
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            ClientToken tok = new ClientToken();

            tok.RequestCompleted += RequestCompleted;
            tok.RequestErrored   += RequestErrored;

            string callsign = "sadfsdfsdf";
            string password = "******";
            string globalIP = "IP";

            Wait = false;
            tok.GetToken(callsign, password);

            while (Wait)
            {
                Thread.Sleep(10);
            }

            if (Error)
            {
                Console.WriteLine("Error getting token " + tok.LastError);
                return;
            }

            Console.WriteLine("Got token " + tok.LastToken);

            Wait = true;

            ClientTokenCheck chk = new ClientTokenCheck();

            chk.RequestCompleted += RequestCompleted;
            chk.RequestErrored   += RequestErrored;

            List <string> groups = new List <string>();

            groups.Add("DEVELOPERS");
            groups.Add("Planning.Developers");
            groups.Add("A.GROUP.THAT.NEVER.EXISTS");

            tok.LastToken = string.Empty;

            chk.CheckToken(callsign, tok.LastToken, globalIP, groups);

            while (Wait)
            {
                Thread.Sleep(10);
            }

            if (Error)
            {
                Console.WriteLine("Error getting token " + chk.LastError);
                return;
            }

            Console.WriteLine("Got response OK" + chk.BZID);

            Console.ReadLine();
        }
예제 #3
0
        private void Checker_RequestCompleted(object sender, EventArgs e)
        {
            ClientTokenCheck checker = sender as ClientTokenCheck;

            if (checker == null || checker.Tag as ServerPlayer == null)
            {
                return;
            }

            ServerPlayer player = checker.Tag as ServerPlayer;

            Logger.Log3("Token verification returned for " + player.PlayerID.ToString() + ":" + player.Callsign + (checker.OK ? " OK:" : " BAD:") + (checker.NameRegistered ? "REGISTERED" : "UNKNOWN"));

            if (checker.OK)
            {
                player.AuthStatus       = ServerPlayer.AuthStatuses.Valid;
                player.BZID             = checker.BZID;
                player.GroupMemberships = checker.Groups;


                bool   ban    = false;
                string reason = string.Empty;

                if (CheckIDBan != null)
                {
                    ban = CheckIDBan(player, ref reason);
                }

                if (ban)
                {
                    PlayerBanned?.Invoke(this, player);
                    SendReject(player, MsgReject.RejectionCodes.RejectIDBanned, reason);
                }

                else
                {
                    SendAccept(player);
                }
            }
            else if (checker.NameRegistered && Config.ProtectRegisteredNames)
            {
                SendReject(player, MsgReject.RejectionCodes.RejectBadCallsign, Resources.NameTakenMessagae);
            }
            else
            {
                if (!Config.AllowAnonUsers)
                {
                    SendReject(player, MsgReject.RejectionCodes.RejectBadCallsign, Resources.NoUnregMessage);
                }
                else
                {
                    SendAccept(player);
                }
            }
        }
예제 #4
0
        private void HandleEnter(ServerPlayer player, NetworkMessage msg)
        {
            Logger.Log4("Processing enter for " + player.PlayerID.ToString());

            MsgEnter enter = msg as MsgEnter;

            if (enter == null)
            {
                return;
            }

            if (enter.PlayerType == Data.Players.PlayerTypes.ComputerPlayer)
            {
                if (player.HasValidEnter)   // keep the one valid connection
                {
                    Logger.Log1("Reject Solo bot on  " + player.PlayerID + " connection");
                    player.SendMessage(new MsgReject(MsgReject.RejectionCodes.RejectBadType, Resources.NoRobotsMessage));
                }
                else
                {
                    SendReject(player, MsgReject.RejectionCodes.RejectBadType, Resources.NoRobotsMessage);
                }
                return;
            }

            if (enter.Callsign == string.Empty || enter.Callsign.Length < 3)
            {
                SendReject(player, MsgReject.RejectionCodes.RejectBadCallsign, Resources.BadCallsignMessage);
                return;
            }

            player.DesiredTeam = enter.PlayerTeam;
            player.Callsign    = enter.Callsign;
            player.Motto       = enter.Motto;
            player.Token       = enter.Token;

            Server.BooleanResultPlayerEventArgs args = new Server.BooleanResultPlayerEventArgs(player);
            CheckPlayerAcceptance?.Invoke(this, args);

            if (!args.Result)
            {
                SendReject(player, MsgReject.RejectionCodes.RejectUnknown, Resources.APIRejectMessage);
                return;
            }

            player.HasValidEnter = true;
            if (player.Token == string.Empty && !Config.ProtectRegisteredNames)
            {
                player.AuthStatus = ServerPlayer.AuthStatuses.NoneProvided;
                if (!Config.AllowAnonUsers)
                {
                    SendReject(player, MsgReject.RejectionCodes.RejectBadCallsign, Resources.NoUnregMessage);
                }
                else
                {
                    SendAccept(player);
                }
            }
            else
            {
                Logger.Log3("Starting token verification for " + player.PlayerID.ToString() + ":" + enter.Callsign);

                player.AuthStatus = ServerPlayer.AuthStatuses.InProgress;

                ClientTokenCheck checker = new ClientTokenCheck();
                checker.Tag = player;
                checker.RequestCompleted += this.Checker_RequestCompleted;
                checker.RequestErrored   += this.Checker_RequestErrored;

                checker.CheckToken(player.Callsign, player.Token, player.GetIPAsString(), Config.Security.GetGroupNames());
            }
        }