// 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); }
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; }