public object Any(SyncAccountsDaily request)
        {
            var users = DiscourseClient.AdminGetUsers(1000);

            foreach (var discourseUser in users)
            {
                //Don't process discourse administrators or already suspended users
                if (discourseUser.Admin || discourseUser.IsSuspended())
                {
                    continue;
                }

                UserServiceResponse existingCustomerSubscription;
                try
                {
                    existingCustomerSubscription = ServiceStackAccountClient.GetUserSubscription(discourseUser.Email);
                }
                catch (Exception e)
                {
                    Log.Error("Failed to check user {0} subscription. Retrying... - {2}".Fmt(discourseUser.Username, e.Message));
                    try
                    {
                        existingCustomerSubscription = ServiceStackAccountClient.GetUserSubscription(discourseUser.Email);
                    }
                    catch (Exception ex)
                    {
                        Log.Error("Failed to check user {0} subscription. Cancelling sync. - {1}".Fmt(discourseUser.Username, ex.Message));
                        break;
                    }
                }

                //Skip users with valid SS subscriptions.
                if (existingCustomerSubscription.HasValidSubscription())
                {
                    continue;
                }

                try
                {
                    Thread.Sleep(2000);
                    //Existing user with active account but without a valid subscription
                    if (!discourseUser.NeedsApproval() && discourseUser.IsNotSuspended())
                    {
                        Log.Info("Suspending user '{0}'.".Fmt(discourseUser.Email));
                        SuspendUser(discourseUser);
                    }
                }
                catch (Exception e)
                {
                    Log.Error("Failed to suspend Discourse for user '{0}'. - {1}".Fmt(discourseUser.Email, e.Message));
                }
            }
            return(null);
        }
Пример #2
0
        public void TestSyncExpiredAccount()
        {
            var service = appHost.Container.Resolve <DailyServices>();

            var req = new SyncAccountsDaily();

            service.Any(req);
            var discourseClient = appHost.Resolve <IDiscourseClient>() as MockDiscourseClient;

            Assert.That(discourseClient != null);
            Assert.That(discourseClient.SuspendCalledCount == 1);
        }