Пример #1
0
		public static void EventSink_AccountLogin( AccountLoginEventArgs e )
		{
			if ( !IPLimiter.SocketBlock && !IPLimiter.Verify( e.State.Address ) )
			{
				e.Accepted = false;
				e.RejectReason = ALRReason.InUse;

				Console.WriteLine( "Login: {0}: Past IP limit threshold", e.State );

				using ( StreamWriter op = new StreamWriter( "ipLimits.log", true ) )
					op.WriteLine( "{0}\tPast IP limit threshold\t{1}", e.State, DateTime.Now );

				return;
			}

			string un = e.Username;
			string pw = e.Password;

			e.Accepted = false;
			Account acct = Accounts.GetAccount( un ) as Account;

			if ( acct == null )
			{
				if ( AutoAccountCreation && un.Trim().Length > 0 )	//To prevent someone from making an account of just '' or a bunch of meaningless spaces 
				{
					e.State.Account = acct = CreateAccount( e.State, un, pw );
					e.Accepted = acct == null ? false : acct.CheckAccess( e.State );

					if ( !e.Accepted )
						e.RejectReason = ALRReason.BadComm;
				}
				else
				{
					Console.WriteLine( "Login: {0}: Invalid username '{1}'", e.State, un );
					e.RejectReason = ALRReason.Invalid;
				}
			}
			else if ( !acct.HasAccess( e.State ) )
			{
				Console.WriteLine( "Login: {0}: Access denied for '{1}'", e.State, un );
				e.RejectReason = ( m_LockdownLevel > AccessLevel.Player ? ALRReason.BadComm : ALRReason.BadPass );
			}
			else if ( !acct.CheckPassword( pw ) )
			{
				Console.WriteLine( "Login: {0}: Invalid password for '{1}'", e.State, un );
				e.RejectReason = ALRReason.BadPass;
			}
			else if ( acct.Banned )
			{
				Console.WriteLine( "Login: {0}: Banned account '{1}'", e.State, un );
				e.RejectReason = ALRReason.Blocked;
			}
			else
			{
				Console.WriteLine( "Login: {0}: Valid credentials for '{1}'", e.State, un );
				e.State.Account = acct;
				e.Accepted = true;

				acct.LogAccess( e.State );
			}

			if ( !e.Accepted )
				AccountAttackLimiter.RegisterInvalidAccess( e.State );
		}
Пример #2
0
 public static void InvokeAccountLogin( AccountLoginEventArgs e )
 {
     if ( AccountLogin != null )
         AccountLogin( e );
 }
		public static void EventSink_AccountLogin( AccountLoginEventArgs e )
		{
			e.Accepted = false;
			e.RejectReason = ALRReason.BadComm;
			return;

			/*if ( !IPLimiter.SocketBlock && !IPLimiter.Verify( e.State.Address ) )
			{
				e.Accepted = false;
				e.RejectReason = ALRReason.InUse;

				Console.WriteLine( "Login: {0}: Past IP limit threshold", e.State );

				using ( StreamWriter op = new StreamWriter( "ipLimits.log", true ) )
					op.WriteLine( "{0}\tPast IP limit threshold\t{1}", e.State, DateTime.Now );

				return;
			}

			string un = e.Username;
			string pw = e.Password;

			e.Accepted = false;
			Account acct = Accounts.GetAccount( un );

			if ( acct == null )
				{
				if ( AutoAccountCreation )
				{
					e.State.Account = acct = CreateAccount( e.State, un, pw );
					e.Accepted = acct == null ? false : acct.CheckAccess( e.State );
						//e.CityInfo = StartingCities; //I forgot to add this line, Thanks to eva42 for pointing it out to me.

				}
				else
				{
					Console.WriteLine( "Login: {0}: Invalid username '{1}'", e.State, un );
					e.RejectReason = ALRReason.Invalid;
				}
			}
			else if ( !acct.HasAccess( e.State ) )
			{
				Console.WriteLine( "Login: {0}: Access denied for '{1}'", e.State, un );
				e.RejectReason = ( m_LockdownLevel > AccessLevel.Player ? ALRReason.BadComm : ALRReason.BadPass );
			}
			else if ( !acct.CheckPassword( pw ) )
			{
				Console.WriteLine( "Login: {0}: Invalid password for '{1}'", e.State, un );
				e.RejectReason = ALRReason.BadPass;
			}
			else if ( acct.Banned )
			{
				Console.WriteLine( "Login: {0}: Banned account '{1}'", e.State, un );
				e.RejectReason = ALRReason.Blocked;
			}
			else
			{
				Console.WriteLine( "Login: {0}: Valid credentials for '{1}'", e.State, un );
				e.State.Account = acct;
				e.Accepted = true;

				acct.LogAccess( e.State );
			}

			if ( !e.Accepted )
				AccountAttackLimiter.RegisterInvalidAccess( e.State );*/
		}
Пример #4
0
        public static void EventSink_AccountLogin( AccountLoginEventArgs e )
        {
            if ( !IPLimiter.SocketBlock && !IPLimiter.Verify( e.State.Address ) )
            {
                e.Accepted = false;
                e.RejectReason = ALRReason.InUse;

                log.Info(String.Format("Login: {0}: Past IP limit threshold", e.State));

                return;
            }

            string un = e.Username;
            string pw = e.Password;

            e.Accepted = false;
            Account acct = Accounts.GetAccount( un );

            if ( acct == null )
            {
                if ( AutoAccountCreation )
                {
                    e.State.Account = acct = CreateAccount( e.State, un, pw );
                    e.Accepted = acct == null ? false : acct.CheckAccess( e.State );

                    if ( !e.Accepted )
                        e.RejectReason = ALRReason.BadComm;
                }
                else
                {
                    log.Warn(String.Format("Login: {0}: Invalid username '{1}'", e.State, un));
                    e.RejectReason = ALRReason.Invalid;
                }
            }
            else if ( !acct.HasAccess( e.State ) )
            {
                log.Error(String.Format("Login: {0}: Access denied for '{1}'", e.State, un));
                e.RejectReason = ( m_LockdownLevel > AccessLevel.Player ? ALRReason.BadComm : ALRReason.BadPass );
            }
            else if ( !acct.CheckPassword( pw ) )
            {
                log.Error(String.Format("Login: {0}: Invalid password for '{1}'", e.State, un));
                e.RejectReason = ALRReason.BadPass;
            }
            else if ( acct.Banned )
            {
                log.Error(String.Format("Login: {0}: Banned account '{1}'", e.State, un));
                e.RejectReason = ALRReason.Blocked;
            }
            else
            {
                log.Info(String.Format("Login: {0}: Valid credentials for '{1}'", e.State, un));
                e.State.Account = acct;
                e.Accepted = true;

                acct.LogAccess( e.State );
            }

            if ( !e.Accepted )
                AccountAttackLimiter.RegisterInvalidAccess( e.State );
        }
        public static void EventSink_AccountLogin( AccountLoginEventArgs e )
        {
            /*
            e.Accepted = false;
            return;
            */
            if ( !IPLimiter.SocketBlock && !IPLimiter.Verify( e.State.Address ) )
            {
                e.Accepted = false;
                e.RejectReason = ALRReason.InUse;

                Console.WriteLine( "Login: {0}: Past IP limit threshold", e.State );

                using ( StreamWriter op = new StreamWriter( "ipLimits.log", true ) )
                    op.WriteLine( "{0}\tPast IP limit threshold\t{1}", e.State, DateTime.Now );

                return;
            }

            string un = e.Username;
            string pw = e.Password;

            e.Accepted = false;
            Account acct = Accounts.GetAccount( un ) as Account;

            /*** BEGIN ADDED CODE ***/
            if (acct == null) {
            Console.WriteLine("pulling {0}", un);
                System.Reflection.Assembly[] assemblies = System.AppDomain.CurrentDomain.GetAssemblies();
                foreach (System.Reflection.Assembly assembly in assemblies) {
                    try {
                        Type syncdb = assembly.GetType("Server.Accounting.SyncDB");
                        if (syncdb != null) {
            Console.WriteLine("found type SyncDB {0} in {1}", syncdb, assembly);
                            syncdb.InvokeMember("PullAccount",
                                                System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public,
                                                null,
                                                null,
                                                new Object[]{ un });
            Console.WriteLine("after PullAccount");
                            break;
                        }
                    } catch (Exception ex) {
            Console.WriteLine("during PullAccount: {0}", ex);
                    }
                }
                acct = Accounts.GetAccount( un ) as Account;
            }
            /*** END ADDED CODE ***/

            if ( acct == null )
            {
                if ( AutoAccountCreation && un.Trim().Length > 0 )	//To prevent someone from making an account of just '' or a bunch of meaningless spaces
                {
                    e.State.Account = acct = CreateAccount( e.State, un, pw );
                    e.Accepted = acct == null ? false : acct.CheckAccess( e.State );

                    if ( !e.Accepted )
                        e.RejectReason = ALRReason.BadComm;
                }
                else
                {
                    Console.WriteLine( "Login: {0}: Invalid username '{1}'", e.State, un );
                    e.RejectReason = ALRReason.Invalid;
                }
            }
            else if ( !acct.HasAccess( e.State ) )
            {
                Console.WriteLine( "Login: {0}: Access denied for '{1}'", e.State, un );
                e.RejectReason = ( m_LockdownLevel > AccessLevel.Player ? ALRReason.BadComm : ALRReason.BadPass );
            }
            else if ( !acct.CheckPassword( pw ) )
            {
                Console.WriteLine( "Login: {0}: Invalid password for '{1}'", e.State, un );
                e.RejectReason = ALRReason.BadPass;
            }
            else if ( acct.Banned )
            {
                Console.WriteLine( "Login: {0}: Banned account '{1}'", e.State, un );
                e.RejectReason = ALRReason.Blocked;
            }
            else
            {
                Console.WriteLine( "Login: {0}: Valid credentials for '{1}'", e.State, un );
                e.State.Account = acct;
                e.Accepted = true;

                acct.LogAccess( e.State );
            }

            if ( !e.Accepted )
                AccountAttackLimiter.RegisterInvalidAccess( e.State );
        }
Пример #6
0
		public static void InvokeAccountLogin(AccountLoginEventArgs e)
		{
			if (AccountLogin != null)
			{
				foreach (AccountLoginEventHandler currentDelegate in AccountLogin.GetInvocationList())
				{
					try
					{
						currentDelegate.Invoke(e);
					}
					catch (Exception ex)
					{
						// Log an exception
						EventSink.InvokeLogException(new LogExceptionEventArgs(ex));
					}
				}
			}
		}
Пример #7
0
		public static void EventSink_AccountLogin(AccountLoginEventArgs e)
		{
			if (!IPLimiter.SocketBlock && !IPLimiter.Verify(e.State.Address))
			{
				e.Accepted = false;
				e.RejectReason = ALRReason.InUse;

				Console.WriteLine("Login: {0}: Past IP limit threshold", e.State);

				using (StreamWriter op = new StreamWriter("ipLimits.log", true))
					op.WriteLine("{0}\tPast IP limit threshold\t{1}", e.State, DateTime.Now);

				// tell other accounts on this IP what's going on
				IPLimiter.Notify(e.State.Address);
				return;
			}

			string un = e.Username;
			string pw = e.Password;

			e.Accepted = false;
			Account acct = Accounts.GetAccount(un);

			if (acct == null)
			{
				if (AutoAccountCreation)
				{
					e.State.Account = acct = CreateAccount(e.State, un, pw);
					e.Accepted = acct == null ? false : acct.CheckAccess(e.State);

					if (!e.Accepted)
						e.RejectReason = ALRReason.BadComm;
				}
				else
				{
					Console.WriteLine("Login: {0}: Invalid username '{1}'", e.State, un);
					e.RejectReason = ALRReason.Invalid;
				}
			}
			else if (IPLimiter.IPStillHot(acct, e.State.Address))
			{
				Console.WriteLine("Login: {0}: Access denied for '{1}'. IP too hot", e.State, un);
				e.RejectReason = ALRReason.InUse;
			}
			else if (!acct.HasAccess(e.State))
			{
				Console.WriteLine("Login: {0}: Access denied for '{1}'", e.State, un);
				e.RejectReason = (m_LockdownLevel > AccessLevel.Player ? ALRReason.BadComm : ALRReason.BadPass);
			}
			else if (!acct.CheckPassword(pw))
			{
				Console.WriteLine("Login: {0}: Invalid password for '{1}'", e.State, un);
				e.RejectReason = ALRReason.BadPass;
			}
			else if (acct.Banned)
			{
				Console.WriteLine("Login: {0}: Banned account '{1}'", e.State, un);
				e.RejectReason = ALRReason.Blocked;
			}
			else
			{
				Console.WriteLine("Login: {0}: Valid credentials for '{1}'", e.State, un);
				e.State.Account = acct;
				e.Accepted = true;

				acct.LogAccess(e.State);
				acct.LastLogin = DateTime.Now;
			}

			if (!e.Accepted)
				AccountAttackLimiter.RegisterInvalidAccess(e.State);
		}