private static bool handleEnterpriseSignIn(Credentials credentials, SignInTicket ticket, ObjectStore os)
        {
            ticket.SetStatus(Resources.DownloadingConnectListEllipsis_Text);

            EnterpriseInfo = new EnterpriseInfo(os, ticket.UserName);

            if (!EnterpriseInfo.IsValid)
            {
                ticket.SetError(Credentials.FromResponse(AuthenticateResponse.ClientSideError, Resources.NoServersForUser_Text));
                return false;
            }

            object value;
            if (credentials.TryGetValue(Credentials.TimeOffsetId, typeof(TimeSpan), out value))
            {
                _enterpriseTimeOffset = (TimeSpan)value;
            }

            EnterpriseServer = ticket.Server;
            EnterpriseObjectStore = os;
            return true;
        }
        public static bool SignIn(SignInTicket ticket, out int exitCode)
        {
            EnterpriseServer = null;
            EnterpriseObjectStore = null;

            exitCode = (int)LocalUIExitCode.Error;

            // Ideally we'd get the user and check for permissions, etc. but that would be another server round trip
            // and for now I'm doing it this way.
            if (ticket.UserName.Equals(UserNames.SpotMonitorUserName, StringComparison.InvariantCultureIgnoreCase) ||
                ticket.UserName.Equals(UserNames.AlertViewerUserName, StringComparison.InvariantCultureIgnoreCase))
            {
                exitCode = (int)LocalUIExitCode.IncorrectUserOrPassword;
                ticket.Status(string.Format(Resources.UserDoesNotHavePermissionToSignInSpec_Text, ticket.UserName), true);
                return false;
            }

            var credentials = ticket.Process(TicketFlags.NoUpgradeRedirect | TicketFlags.ConfigureLogging, out _os);

            if (!credentials.Valid)
            {
                ticket.SetError(credentials);
                return false;
            }
            if (credentials.AuthenticateType != AuthenticateType.EnterpriseServer)
            {
                ticket.SetError(Resources.NotEnterpriseServer_Text);
                return false;
            }

            if (!handleEnterpriseSignIn(credentials, ticket, _os))
            {
                exitCode = (int)LocalUIExitCode.IncorrectUserOrPassword;
                return false;
            }

            _ticket = ticket;

            _enterpriseTimeOffset = TimeSpan.Zero;
            object value;
            if (credentials.TryGetValue(Credentials.TimeOffsetId, typeof(TimeSpan), out value))
            {
                _enterpriseTimeOffset = (TimeSpan)value;

                //// we don't want to include the time zone difference in the ServerTimeOffset
                //var timeZoneDelta = DateTimeOffset.Now.Offset - ActiveCoreTime.Offset;
                ////VideoOverseer.SetServerTimeOffset(_activeCoreTimeOffset + timeZoneDelta);
                TimeUtils.ServerOffset = EnterpriseTime.Offset;

                if (_os != null)
                {
                    TimeUtils.ServerTimeZone = _os.TimeZoneData;
                }
            }

            AppLogin.Initialize(credentials.UserGuid, ticket.UserName, ticket.Password, ticket.EngineerPassword, ticket.ConnectionSpeed);

            SignInServer = ticket.Server;

            AppLogin.MachineHardware = _ticket.Server.HardwareVersion;
            AppLogin.StartedByShell = Runtime.IsLocalHost(SignInServer.HostAddress);
            _monitor = ConnectionMonitor.GetConnectionMonitor(_ticket.Server);
            _monitor.ConnectionStatusChanged += monitor_ConnectionStatusChanged;

            UserName = credentials.GetString(Credentials.UserFullNameId);
            LoginUserName = ticket.UserName;
            EnterpriseName = Ticket.Server.DisplayName;

            exitCode = (int)LocalUIExitCode.Ok;
            return true;
        }