// Token: 0x06001BF4 RID: 7156 RVA: 0x0006C8D0 File Offset: 0x0006AAD0
        protected override string InternalExecute()
        {
            Guid        guid        = Guid.NewGuid();
            UserContext userContext = UserContextManager.GetUserContext(base.CallContext.HttpContext, base.CallContext.EffectiveCaller, true);

            if (this.permissionsRequest.AttachmentDataProviderPermissions != null)
            {
                base.CallContext.ProtocolLog.Set(UpdateAttachmentPermissionsMetadata.NumberOfUserIDs, this.permissionsRequest.UserIds.Length);
                List <string> largeDLsList;
                this.permissionsRequest.UserIds = UpdateAttachmentPermissions.ExpandDLsAndGetAllUsers(userContext, this.permissionsRequest.UserIds, out largeDLsList, base.CallContext);
                List <string> resourceList;
                Dictionary <string, List <AttachmentPermissionAssignment> > dictionary = this.ProcessUpdateAttachmentPermissionsRequest(this.permissionsRequest, userContext, base.CallContext, out resourceList);
                base.CallContext.ProtocolLog.Set(UpdateAttachmentPermissionsMetadata.NumberOfAttachmentDataProviders, dictionary.Count);
                base.CallContext.ProtocolLog.Set(UpdateAttachmentPermissionsMetadata.NumberOfUsersToSetPermissions, this.permissionsRequest.UserIds.Length);
                foreach (KeyValuePair <string, List <AttachmentPermissionAssignment> > keyValuePair in dictionary)
                {
                    AttachmentDataProvider provider = userContext.AttachmentDataProviderManager.GetProvider(base.CallContext, keyValuePair.Key);
                    UpdateAttachmentPermissions.UpdateAttachmentPermissionsAsync(provider, this.permissionsRequest.UserIds, keyValuePair.Value.ToArray(), userContext, resourceList, largeDLsList);
                }
            }
            return(guid.ToString());
        }
 // Token: 0x06001BF5 RID: 7157 RVA: 0x0006CC0C File Offset: 0x0006AE0C
 internal static void UpdateAttachmentPermissionsAsync(AttachmentDataProvider attachmentDataProvider, string[] userIds, AttachmentPermissionAssignment[] permissionAssignments, UserContext userContext, List <string> resourceList, List <string> largeDLsList)
 {
     try
     {
         OwaDiagnostics.SendWatsonReportsForGrayExceptions(async delegate()
         {
             UpdatePermissionsAsyncResult updatePermissionsAsyncResult = await attachmentDataProvider.UpdateDocumentPermissionsAsync(userIds, permissionAssignments, default(CancellationToken)).ConfigureAwait(false);
             if (updatePermissionsAsyncResult.ResultCode != AttachmentResultCode.Success)
             {
                 UpdateAttachmentPermissions.CreateFailureMessages(userContext, userContext.ExchangePrincipal, null, null, resourceList, null);
             }
             else
             {
                 UpdateAttachmentPermissions.ProcessUpdatePermissionsAsyncResult(userContext, updatePermissionsAsyncResult, resourceList, largeDLsList);
             }
         });
     }
     catch (GrayException ex)
     {
         ExTraceGlobals.AttachmentHandlingTracer.TraceError <string>(0L, "UpdateAttachmentPermissions.UpdateAttachmentPermissionsAsync Exception while trying to update permissions async : {0}", ex.StackTrace);
     }
 }
        // Token: 0x06001BF6 RID: 7158 RVA: 0x0006CC90 File Offset: 0x0006AE90
        private Dictionary <string, List <AttachmentPermissionAssignment> > ProcessUpdateAttachmentPermissionsRequest(UpdateAttachmentPermissionsRequest request, UserContext userContext, CallContext callContext, out List <string> resourceList)
        {
            Dictionary <string, List <AttachmentPermissionAssignment> > dictionary = new Dictionary <string, List <AttachmentPermissionAssignment> >();
            List <string> list = new List <string>();

            resourceList = new List <string>();
            AttachmentDataProvider[] providers = userContext.AttachmentDataProviderManager.GetProviders(callContext, null);
            foreach (AttachmentDataProviderPermissions attachmentDataProviderPermissions2 in request.AttachmentDataProviderPermissions)
            {
                if (attachmentDataProviderPermissions2.PermissionAssignments != null)
                {
                    string attachmentDataProviderId = attachmentDataProviderPermissions2.AttachmentDataProviderId;
                    foreach (AttachmentPermissionAssignment attachmentPermissionAssignment in attachmentDataProviderPermissions2.PermissionAssignments)
                    {
                        resourceList.Add(attachmentPermissionAssignment.ResourceLocation);
                    }
                    if (string.IsNullOrEmpty(attachmentDataProviderId))
                    {
                        if (providers != null)
                        {
                            foreach (AttachmentPermissionAssignment attachmentPermissionAssignment2 in attachmentDataProviderPermissions2.PermissionAssignments)
                            {
                                bool flag = false;
                                AttachmentDataProvider[] array = providers;
                                int l = 0;
                                while (l < array.Length)
                                {
                                    AttachmentDataProvider attachmentDataProvider = array[l];
                                    if (attachmentDataProvider.FileExists(attachmentPermissionAssignment2.ResourceLocation))
                                    {
                                        flag = true;
                                        if (dictionary.ContainsKey(attachmentDataProvider.Id))
                                        {
                                            dictionary[attachmentDataProvider.Id].Add(attachmentPermissionAssignment2);
                                            break;
                                        }
                                        dictionary.Add(attachmentDataProvider.Id, new List <AttachmentPermissionAssignment>());
                                        dictionary[attachmentDataProvider.Id].Add(attachmentPermissionAssignment2);
                                        break;
                                    }
                                    else
                                    {
                                        l++;
                                    }
                                }
                                if (!flag)
                                {
                                    list.Add(attachmentPermissionAssignment2.ResourceLocation);
                                }
                            }
                        }
                    }
                    else if (dictionary.ContainsKey(attachmentDataProviderId))
                    {
                        dictionary[attachmentDataProviderId].AddRange(attachmentDataProviderPermissions2.PermissionAssignments);
                    }
                    else
                    {
                        dictionary.Add(attachmentDataProviderId, new List <AttachmentPermissionAssignment>());
                        dictionary[attachmentDataProviderId].AddRange(attachmentDataProviderPermissions2.PermissionAssignments);
                    }
                }
            }
            if (list.Count > 0)
            {
                ExTraceGlobals.AttachmentHandlingTracer.TraceDebug <int>(0L, "[UpdateAttachmentPermissions : ProcessUpdateAttachmentPermissionsRequest] There were {0} number of resources not found on the existing data providers", list.Count);
                UpdateAttachmentPermissions.CreateFailureMessages(userContext, userContext.ExchangePrincipal, null, list, resourceList, null);
            }
            return(dictionary);
        }
示例#4
0
 protected internal Attachments(IStorageEntitySetScope <IStoreSession> parentScope, IEntityReference <IItem> parentItem, AttachmentDataProvider attachmentDataProvider, IEntityCommandFactory <Attachments, IAttachment> commandFactory = null) : base(parentScope, "Attachments", commandFactory ?? EntityCommandFactory <Attachments, IAttachment, CreateAttachment, DeleteAttachment, FindAttachments, ReadAttachment, UpdateAttachment> .Instance)
 {
     this.ParentItem             = parentItem;
     this.AttachmentDataProvider = attachmentDataProvider;
 }