public IEnumerable<FileShareWrapper> SetFolderSecurityInfo(string folderid, IEnumerable<FileShareParams> share, bool notify, string sharingMessage) { if (share != null && share.Any()) { var list = new Web.Files.Services.WCFService.ItemList<AceWrapper>(share.Select(x => x.ToAceObject())); var aceCollection = new AceCollection { Entries = new Web.Files.Services.WCFService.ItemList<string> { "folder_" + folderid }, Aces = list, Message = sharingMessage }; _fileStorageService.SetAceObject(aceCollection, notify); } return GetFolderSecurityInfo(folderid); }
public void ChangeAttachedFileLinksAddresses(int tenantId) { var doc = new HtmlDocument(); doc.LoadHtml(HtmlBody); var linkNodes = doc.DocumentNode.SelectNodes("//a[contains(@class,'mailmessage-filelink-link')]"); if (linkNodes == null) return; var fileStorageService = new FileStorageServiceController(); var setLinks = new List<Tuple<string, string>>(); foreach (var linkNode in linkNodes) { var fileId = linkNode.Attributes["data-fileid"].Value; var objectId = "file_" + fileId; linkNode.Attributes["class"].Remove(); // 'mailmessage-filelink-link' linkNode.Attributes["data-fileid"].Remove(); // 'data-fileid' var setLink = setLinks.SingleOrDefault(x => x.Item1 == fileId); if (setLink != null) { linkNode.SetAttributeValue("href", setLink.Item2); _logger.Info("ChangeAttachedFileLinks() Change file link href: {0}", fileId); continue; } var aceCollection = new AceCollection { Entries = new ItemList<string> { objectId }, Aces = new ItemList<AceWrapper> { new AceWrapper { SubjectId = FileConstant.ShareLinkId, SubjectGroup = true, Share = FileLinksShareMode } } }; fileStorageService.SetAceObject(aceCollection, false); _logger.Info("ChangeAttachedFileLinks() Set public accees to file: {0}", fileId); var sharedInfo = fileStorageService.GetSharedInfo(new ItemList<string> { objectId }).Find(r => r.SubjectId == FileConstant.ShareLinkId); linkNode.SetAttributeValue("href", sharedInfo.SubjectName); _logger.Info("ChangeAttachedFileLinks() Change file link href: {0}", fileId); setLinks.Add(new Tuple<string, string>(fileId, sharedInfo.SubjectName)); } linkNodes = doc.DocumentNode.SelectNodes("//div[contains(@class,'mailmessage-filelink')]"); foreach (var linkNode in linkNodes) { linkNode.Attributes["class"].Remove(); } HtmlBody = doc.DocumentNode.OuterHtml; }
public string GenerateSharedLink(string fileid, FileShare share) { var file = GetFileInfo(fileid); var objectid = "file_" + file.Id; var sharedInfo = _fileStorageService.GetSharedInfo(new Web.Files.Services.WCFService.ItemList<string> { objectid }).Find(r => r.SubjectId == FileConstant.ShareLinkId); if (sharedInfo == null || sharedInfo.Share != share) { var list = new Web.Files.Services.WCFService.ItemList<AceWrapper> { new AceWrapper { SubjectId = FileConstant.ShareLinkId, SubjectGroup = true, Share = share } }; var aceCollection = new AceCollection { Entries = new Web.Files.Services.WCFService.ItemList<string> { objectid }, Aces = list }; _fileStorageService.SetAceObject(aceCollection, false); sharedInfo = _fileStorageService.GetSharedInfo(new Web.Files.Services.WCFService.ItemList<string> { objectid }).Find(r => r.SubjectId == FileConstant.ShareLinkId); } return sharedInfo.SubjectName; }
public ItemList<string> SetAceObject(AceCollection aceCollection, bool notify) { using (var fileDao = GetFileDao()) using (var folderDao = GetFolderDao()) { var result = new ItemList<string>(); foreach (var objectId in aceCollection.Entries) { Debug.Assert(objectId != null, "objectId != null"); var entryType = objectId.StartsWith("file_") ? FileEntryType.File : FileEntryType.Folder; var entryId = objectId.Substring((entryType == FileEntryType.File ? "file_" : "folder_").Length); var entry = entryType == FileEntryType.File ? (FileEntry)fileDao.GetFile(entryId) : (FileEntry)folderDao.GetFolder(entryId); try { FileSharing.SetAceObject(aceCollection.Aces, entry, notify, aceCollection.Message); FilesMessageService.Send(entry, GetHttpRequest(OperationContext.Current), entryType == FileEntryType.Folder ? MessageAction.FolderUpdatedAccess : MessageAction.FileUpdatedAccess, entry.Title); } catch(Exception e) { throw GenerateException(e); } //reget SharedByMe entry = entryType == FileEntryType.File ? (FileEntry)fileDao.GetFile(entryId) : (FileEntry)folderDao.GetFolder(entryId); if (entry.SharedByMe) { result.Add(objectId); } } return result; } }