/// <summary>
        /// Adds a token to the waitlist.
        /// </summary>
        /// <param name="clientId">clientId: ID_A</param>
        /// <param name="hashedToken">hashed token</param>
        /// <param name="loginLog">Log-Object</param>
        public static void AddToWaitList(string clientId, string hashedToken, LoginLog loginLog)
        {
            if (String.IsNullOrEmpty(clientId) || String.IsNullOrEmpty(hashedToken) || loginLog == null)
                throw new ArgumentException("No null values or empty strings allowed.");

            hashedToken = hashedToken.ToUpper();

            // sets overridden log to success: false.
            if (Items.ContainsKey(clientId))
            {
                Repository.SetLoginSuccess(Items[clientId].LoginLog, false);
            }

            // will override old entry
            Items[clientId] = new WaitlistItem
                {
                    HashedToken = hashedToken,
                    LoginLog = loginLog
                };

            // Start Timer
            Timer removeTimer = new Timer {Interval = Timeframe};
            removeTimer.Elapsed += (sender, e) => RemoveFromWaitlist(sender, e, clientId);
            removeTimer.Enabled = true;
        }
 protected bool Equals(WaitlistItem other)
 {
     return string.Equals(HashedToken, other.HashedToken) && Equals(LoginLog, other.LoginLog);
 }