public void PublishStatus(IEnumerable <UnifiedPolicyStatus> statuses, bool deleteConfiguration = true)
        {
            Dictionary <Guid, List <UnifiedPolicyStatus> > dictionary = UnifiedPolicySession.PartitionByTenant <UnifiedPolicyStatus>(statuses, (UnifiedPolicyStatus status) => status.TenantId);

            foreach (Guid guid in dictionary.Keys)
            {
                ITenantConfigurationSession              tenantSession = UnifiedPolicySession.GetTenantSession(guid);
                ConfigurationSettingStatusBatch          configurationSettingStatusBatch = new ConfigurationSettingStatusBatch(guid);
                IEnumerable <UnifiedPolicySettingStatus> enumerable = (from s in dictionary[guid]
                                                                       select UnifiedPolicyStorageFactory.ToStatusStorage(s)).Cache <UnifiedPolicySettingStatus>();
                foreach (UnifiedPolicySettingStatus configurable in enumerable)
                {
                    configurationSettingStatusBatch.Add(new TenantSettingFacade <UnifiedPolicySettingStatus>(configurable));
                }
                tenantSession.Save(configurationSettingStatusBatch);
                if (deleteConfiguration)
                {
                    foreach (UnifiedPolicySettingStatus unifiedPolicySettingStatus in from s in enumerable
                             where s.ObjectStatus == StatusMode.Deleted
                             select s)
                    {
                        IEnumerable <UnifiedPolicySettingStatus> source = tenantSession.Find <UnifiedPolicySettingStatus>(QueryFilter.AndTogether(new QueryFilter[]
                        {
                            new ComparisonFilter(ComparisonOperator.Equal, UnifiedPolicySettingStatusSchema.SettingType, unifiedPolicySettingStatus.SettingType),
                            new ComparisonFilter(ComparisonOperator.Equal, UnifiedPolicySettingStatusSchema.ObjectId, unifiedPolicySettingStatus.Id.ObjectGuid)
                        }), null, false, null).Cast <UnifiedPolicySettingStatus>();
                        if (source.All((UnifiedPolicySettingStatus s) => s.ObjectStatus == StatusMode.Deleted))
                        {
                            UnifiedPolicySession.DeleteReferencedObject(tenantSession, unifiedPolicySettingStatus);
                        }
                    }
                }
            }
        }
 public static void Authorize(IEnumerable <Guid> claimedTenantIds, Guid requestedTenantId)
 {
     UnifiedPolicySession.Authorize(claimedTenantIds, new Guid[]
     {
         requestedTenantId
     });
 }
        private TResult GetObjectInternal <TStorage, TResult>(Guid tenantId, Guid objectId, bool includeDeletedObjects, Func <TStorage, TResult> convertFunc) where TStorage : UnifiedPolicyStorageBase, new() where TResult : PolicyConfigurationBase
        {
            TResult result = default(TResult);
            ITenantConfigurationSession tenantSession = UnifiedPolicySession.GetTenantSession(tenantId);
            QueryFilter filter   = UnifiedPolicySession.CreateGetObjectQueryFilter(tenantId, objectId, includeDeletedObjects);
            TStorage    tstorage = tenantSession.Find <TStorage>(filter, null, false, null).Cast <TStorage>().FirstOrDefault <TStorage>();

            if (tstorage != null)
            {
                result = convertFunc(tstorage);
            }
            return(result);
        }
        private PolicyChangeBatch GetBindingChanges(TenantCookieCollection tenantCookies)
        {
            IConfigDataProvider   configDataProvider = ConfigDataProviderFactory.Default.Create(DatabaseType.Directory);
            PolicyChangeBatch     newBatch           = UnifiedPolicySession.GetNewBatch <BindingConfiguration>(tenantCookies);
            List <BindingStorage> list  = new List <BindingStorage>();
            List <ScopeStorage>   list2 = new List <ScopeStorage>();

            new List <BindingConfiguration>();
            foreach (TenantCookie tenantCookie in ((IEnumerable <TenantCookie>)tenantCookies))
            {
                PolicySyncCookie policySyncCookie = PolicySyncCookie.Deserialize(tenantCookie.Cookie);
                string           pagingWatermark  = UnifiedPolicySession.GetPagingWatermark <BindingConfiguration>(policySyncCookie);
                string           pagingWatermark2 = UnifiedPolicySession.GetPagingWatermark <ScopeConfiguration>(policySyncCookie);
                QueryFilter      queryFilter      = UnifiedPolicySession.CreateGetChangesQueryFilter(tenantCookie, pagingWatermark, tenantCookies.Workload, true);
                QueryFilter      queryFilter2     = UnifiedPolicySession.CreateGetChangesQueryFilter(tenantCookie, pagingWatermark2, tenantCookies.Workload, true);
                list.AddRange(configDataProvider.FindPaged <BindingStorage>(queryFilter, null, false, null, 1000).Cast <BindingStorage>());
                list2.AddRange(configDataProvider.FindPaged <ScopeStorage>(queryFilter2, null, false, null, 1000).Cast <ScopeStorage>());
                bool flag;
                UnifiedPolicySession.SetPagingWatermark <BindingConfiguration>(policySyncCookie, PagingHelper.GetProcessedCookie(queryFilter, out flag));
                bool flag2;
                UnifiedPolicySession.SetPagingWatermark <ScopeConfiguration>(policySyncCookie, PagingHelper.GetProcessedCookie(queryFilter2, out flag2));
                TenantCookie tenantCookie2 = newBatch.NewCookies[tenantCookie.TenantId];
                tenantCookie2.Cookie   = policySyncCookie.Serialize();
                tenantCookie2.MoreData = (!flag || !flag2);
            }
            using (List <ScopeStorage> .Enumerator enumerator2 = list2.GetEnumerator())
            {
                while (enumerator2.MoveNext())
                {
                    UnifiedPolicySession.< > c__DisplayClass19 CS$ < > 8__locals1 = new UnifiedPolicySession.< > c__DisplayClass19();
                    CS$ < > 8__locals1.scope = enumerator2.Current;
                    Guid           parentBindingId = Guid.Parse((string)CS$ < > 8__locals1.scope[UnifiedPolicyStorageBaseSchema.ContainerProp]);
                    BindingStorage bindingStorage  = list.FirstOrDefault((BindingStorage b) => b.Id.ObjectGuid == parentBindingId && b.OrganizationalUnitRoot.ObjectGuid == CS$ < > 8__locals1.scope.OrganizationalUnitRoot.ObjectGuid);
                    if (bindingStorage == null)
                    {
                        bindingStorage = configDataProvider.Find <BindingStorage>(UnifiedPolicySession.CreateGetObjectQueryFilter(CS$ < > 8__locals1.scope.OrganizationalUnitRoot.ObjectGuid, parentBindingId, true), null, false, null).Cast <BindingStorage>().FirstOrDefault <BindingStorage>();
                        list.Add(bindingStorage);
                    }
                    if (CS$ < > 8__locals1.scope.ObjectState == ObjectState.Deleted)
                    {
                        bindingStorage.RemovedScopes.Add(CS$ < > 8__locals1.scope);
                    }
        private PolicyChangeBatch GetChangesInternal <TStorage, TResult>(TenantCookieCollection tenantCookies, Func <TStorage, TResult> convertFunc, bool scopeToWorkload) where TStorage : UnifiedPolicyStorageBase, new() where TResult : PolicyConfigurationBase
        {
            PolicyChangeBatch newBatch = UnifiedPolicySession.GetNewBatch <TResult>(tenantCookies);
            List <TResult>    list     = new List <TResult>();

            foreach (TenantCookie tenantCookie in ((IEnumerable <TenantCookie>)tenantCookies))
            {
                PolicySyncCookie policySyncCookie = PolicySyncCookie.Deserialize(tenantCookie.Cookie);
                string           pagingWatermark  = UnifiedPolicySession.GetPagingWatermark <TResult>(policySyncCookie);
                QueryFilter      queryFilter      = UnifiedPolicySession.CreateGetChangesQueryFilter(tenantCookie, pagingWatermark, tenantCookies.Workload, scopeToWorkload);
                list.AddRange(from TStorage s in UnifiedPolicySession.GetTenantSession(tenantCookie.TenantId).FindPaged <TStorage>(queryFilter, null, false, null, 1000)
                              select convertFunc(s));
                bool flag;
                UnifiedPolicySession.SetPagingWatermark <TResult>(policySyncCookie, PagingHelper.GetProcessedCookie(queryFilter, out flag));
                TenantCookie tenantCookie2 = newBatch.NewCookies[tenantCookie.TenantId];
                tenantCookie2.Cookie   = policySyncCookie.Serialize();
                tenantCookie2.MoreData = !flag;
            }
            newBatch.Changes = list;
            return(newBatch);
        }
        private static void DeleteReferencedObject(ITenantConfigurationSession session, UnifiedPolicySettingStatus deleteStatus)
        {
            IConfigurable configurable = null;
            bool          flag         = false;
            QueryFilter   filter       = UnifiedPolicySession.CreateGetObjectQueryFilter(deleteStatus.OrganizationalUnitRoot.ObjectGuid, deleteStatus.Id.ObjectGuid, true);
            string        settingType;

            if ((settingType = deleteStatus.SettingType) != null)
            {
                if (!(settingType == "AssociationStorage"))
                {
                    if (!(settingType == "BindingStorage"))
                    {
                        if (!(settingType == "PolicyStorage"))
                        {
                            if (!(settingType == "RuleStorage"))
                            {
                                if (!(settingType == "ScopeStorage"))
                                {
                                    goto IL_F7;
                                }
                                configurable = session.Find <ScopeStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                            }
                            else
                            {
                                configurable = session.Find <RuleStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                            }
                        }
                        else
                        {
                            configurable = session.Find <PolicyStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                            flag         = true;
                        }
                    }
                    else
                    {
                        configurable = session.Find <BindingStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                    }
                }
                else
                {
                    configurable = session.Find <AssociationStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                }
                if (flag)
                {
                    IEnumerable <RuleStorage> enumerable = from RuleStorage r in session.Find <RuleStorage>(new ComparisonFilter(ComparisonOperator.Equal, DalHelper.IncludeTombstonesProperty, true), null, false, null)
                                                           where r.ParentPolicyId == deleteStatus.Id.ObjectGuid && r.ObjectState != ObjectState.Deleted
                                                           select r;
                    foreach (RuleStorage instance in enumerable)
                    {
                        session.Delete(instance);
                    }
                    IEnumerable <BindingStorage> enumerable2 = session.Find <BindingStorage>(QueryFilter.AndTogether(new QueryFilter[]
                    {
                        new ComparisonFilter(ComparisonOperator.Equal, UnifiedPolicyStorageBaseSchema.ContainerProp, deleteStatus.Id.ObjectGuid),
                        new ComparisonFilter(ComparisonOperator.Equal, DalHelper.IncludeTombstonesProperty, true)
                    }), null, false, null).Cast <BindingStorage>();
                    foreach (BindingStorage instance2 in enumerable2)
                    {
                        session.Delete(instance2);
                    }
                }
                if (configurable != null && configurable.ObjectState != ObjectState.Deleted)
                {
                    session.Delete(configurable);
                }
                return;
            }
IL_F7:
            throw new NotSupportedException(string.Format("Unable to delete object of type '{0}'", deleteStatus.SettingType ?? "<null>"));
        }