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); }
private static bool CanDownload(FileSecurity fileSecurity, File file, FileShare linkRight) { if (!file.DenyDownload) { return(true); } var canDownload = linkRight != FileShare.Restrict && linkRight != FileShare.Read && linkRight != FileShare.Comment; if (canDownload || SecurityContext.CurrentAccount.ID.Equals(ASC.Core.Configuration.Constants.Guest.ID)) { return(canDownload); } if (linkRight == FileShare.Read || linkRight == FileShare.Comment) { using (var fileDao = Global.DaoFactory.GetFileDao()) { file = fileDao.GetFile(file.ID); // reset Access prop } } canDownload = fileSecurity.CanDownload(file); return(canDownload); }
public string GenerateSharedLink(T fileId, FileShare share) { var file = GetFileInfo(fileId); var sharedInfo = FileStorageService.GetSharedInfo(new List <T> { fileId }, new List <T> { }).Find(r => r.SubjectId == FileConstant.ShareLinkId); if (sharedInfo == null || sharedInfo.Share != share) { var list = new List <AceWrapper> { new AceWrapper { SubjectId = FileConstant.ShareLinkId, SubjectGroup = true, Share = share } }; var aceCollection = new AceCollection <T> { Files = new List <T> { fileId }, Aces = list }; FileStorageService.SetAceObject(aceCollection, false); sharedInfo = FileStorageService.GetSharedInfo(new List <T> { fileId }, new List <T> { }).Find(r => r.SubjectId == FileConstant.ShareLinkId); } return(sharedInfo.Link); }
public static File GetParams(File file, bool lastVersion, FileShare linkRight, bool rightToRename, bool rightToEdit, bool editPossible, bool tryEdit, bool tryCoauth, out Configuration configuration) { if (file == null) { throw new FileNotFoundException(FilesCommonResource.ErrorMassage_FileNotFound); } if (!string.IsNullOrEmpty(file.Error)) { throw new Exception(file.Error); } var rightToReview = rightToEdit; var reviewPossible = editPossible; var rightToFillForms = rightToEdit; var fillFormsPossible = editPossible; var rightToComment = rightToEdit; var commentPossible = editPossible; var rightModifyFilter = rightToEdit; if (linkRight == FileShare.Restrict && CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsVisitor()) { rightToEdit = false; rightToReview = false; rightToFillForms = false; rightToComment = false; } var fileSecurity = Global.GetFilesSecurity(); rightToEdit = rightToEdit && (linkRight == FileShare.ReadWrite || linkRight == FileShare.CustomFilter || fileSecurity.CanEdit(file) || fileSecurity.CanCustomFilterEdit(file)); if (editPossible && !rightToEdit) { editPossible = false; } rightModifyFilter = rightModifyFilter && (linkRight == FileShare.ReadWrite || fileSecurity.CanEdit(file)); rightToRename = rightToRename && rightToEdit && fileSecurity.CanEdit(file); rightToReview = rightToReview && (linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanReview(file)); if (reviewPossible && !rightToReview) { reviewPossible = false; } rightToFillForms = rightToFillForms && (linkRight == FileShare.FillForms || linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanFillForms(file)); if (fillFormsPossible && !rightToFillForms) { fillFormsPossible = false; } rightToComment = rightToComment && (linkRight == FileShare.Comment || linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanComment(file)); if (commentPossible && !rightToComment) { commentPossible = false; } if (linkRight == FileShare.Restrict && !(editPossible || reviewPossible || fillFormsPossible || commentPossible) && !fileSecurity.CanRead(file)) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } if (file.RootFolderType == FolderType.TRASH) { throw new Exception(FilesCommonResource.ErrorMassage_ViewTrashItem); } if (file.ContentLength > SetupInfo.AvailableFileSize) { throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeEdit, FileSizeComment.FilesSizeToString(SetupInfo.AvailableFileSize))); } string strError = null; if ((editPossible || reviewPossible || fillFormsPossible || commentPossible) && EntryManager.FileLockedForMe(file.ID)) { if (tryEdit) { strError = FilesCommonResource.ErrorMassage_LockedFile; } rightToRename = false; rightToEdit = editPossible = false; rightToReview = reviewPossible = false; rightToFillForms = fillFormsPossible = false; rightToComment = commentPossible = false; } if (editPossible && !FileUtility.CanWebEdit(file.Title)) { rightToEdit = editPossible = false; } if (file.Encrypted && file.RootFolderType != FolderType.Privacy) { rightToEdit = editPossible = false; rightToReview = reviewPossible = false; rightToFillForms = fillFormsPossible = false; rightToComment = commentPossible = false; } if (!editPossible && !FileUtility.CanWebView(file.Title)) { throw new Exception(string.Format("{0} ({1})", FilesCommonResource.ErrorMassage_NotSupportedFormat, FileUtility.GetFileExtension(file.Title))); } if (reviewPossible && !FileUtility.CanWebReview(file.Title)) { rightToReview = reviewPossible = false; } if (fillFormsPossible && !FileUtility.CanWebRestrictedEditing(file.Title)) { rightToFillForms = fillFormsPossible = false; } if (commentPossible && !FileUtility.CanWebComment(file.Title)) { rightToComment = commentPossible = false; } var rightChangeHistory = rightToEdit && !file.Encrypted; if (FileTracker.IsEditing(file.ID)) { rightChangeHistory = false; bool coauth; if ((editPossible || reviewPossible || fillFormsPossible || commentPossible) && tryCoauth && (!(coauth = FileUtility.CanCoAuhtoring(file.Title)) || FileTracker.IsEditingAlone(file.ID))) { if (tryEdit) { var editingBy = FileTracker.GetEditingBy(file.ID).FirstOrDefault(); strError = string.Format(!coauth ? FilesCommonResource.ErrorMassage_EditingCoauth : FilesCommonResource.ErrorMassage_EditingMobile, Global.GetUserName(editingBy, true)); } rightToEdit = editPossible = reviewPossible = fillFormsPossible = commentPossible = false; } } var fileStable = file; if (lastVersion && file.Forcesave != ForcesaveType.None && tryEdit) { using (var fileDao = Global.DaoFactory.GetFileDao()) { fileStable = fileDao.GetFileStable(file.ID, file.Version); } } var docKey = GetDocKey(fileStable); var modeWrite = (editPossible || reviewPossible || fillFormsPossible || commentPossible) && tryEdit; if (file.FolderID != null) { EntryManager.SetFileStatus(file); } var rightToDownload = CanDownload(fileSecurity, file, linkRight); configuration = new Configuration(file) { Document = { Key = docKey, Permissions = { Edit = rightToEdit && lastVersion, Rename = rightToRename && lastVersion && !file.ProviderEntry, Review = rightToReview && lastVersion, FillForms = rightToFillForms && lastVersion, Comment = rightToComment && lastVersion, ChangeHistory = rightChangeHistory, ModifyFilter = rightModifyFilter, Print = rightToDownload, Download = rightToDownload } }, EditorConfig = { ModeWrite = modeWrite, }, ErrorMessage = strError, }; if (!lastVersion) { configuration.Document.Title += string.Format(" ({0})", file.CreateOnString); } return(file); }
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 long SendMessage(int id, string from, List <string> to, List <string> cc, List <string> bcc, string mimeReplyToId, bool importance, string subject, List <int> tags, string body, List <MailAttachmentData> attachments, FileShare fileLinksShareMode, string calendarIcs, bool isAutoreply, bool requestReceipt, bool requestRead) { try { Thread.CurrentThread.CurrentCulture = CurrentCulture; Thread.CurrentThread.CurrentUICulture = CurrentCulture; var daemonLabels = new DraftEngine.DeliveryFailureMessageTranslates( Defines.MailDaemonEmail, MailApiResource.DeliveryFailureSubject, MailApiResource.DeliveryFailureAutomaticMessage, MailApiResource.DeliveryFailureMessageIdentificator, MailApiResource.DeliveryFailureRecipients, MailApiResource.DeliveryFailureRecommendations, MailApiResource.DeliveryFailureBtn, MailApiResource.DeliveryFailureFAQInformation, MailApiResource.DeliveryFailureReason); return(MailEngineFactory.DraftEngine.Send(id, from, to, cc, bcc, mimeReplyToId, importance, subject, tags, body, attachments, fileLinksShareMode, calendarIcs, isAutoreply, requestReceipt, requestRead, daemonLabels)); } catch (DraftException ex) { string fieldName; switch (ex.FieldType) { case DraftFieldTypes.From: fieldName = MailApiResource.FieldNameFrom; break; case DraftFieldTypes.To: fieldName = MailApiResource.FieldNameTo; break; case DraftFieldTypes.Cc: fieldName = MailApiResource.FieldNameCc; break; case DraftFieldTypes.Bcc: fieldName = MailApiResource.FieldNameBcc; break; default: fieldName = ""; break; } switch (ex.ErrorType) { case DraftException.ErrorTypes.IncorrectField: throw new ArgumentException(MailApiResource.ErrorIncorrectEmailAddress.Replace("%1", fieldName)); case DraftException.ErrorTypes.EmptyField: throw new ArgumentException(MailApiResource.ErrorEmptyField.Replace("%1", fieldName)); default: throw; } } }
public bool SetAceLink(T fileId, FileShare share) { return(FileStorageService.SetAceLink(fileId, share)); }
public long SendMessage(int id, string from, List <string> to, List <string> cc, List <string> bcc, string mimeReplyToId, bool importance, string subject, List <int> tags, string body, List <MailAttachment> attachments, FileShare fileLinksShareMode, string calendarIcs, bool isAutoreply) { if (id < 1) { id = 0; } if (string.IsNullOrEmpty(from)) { throw new ArgumentNullException("from"); } if (!to.Any()) { throw new ArgumentNullException("to"); } var mailAddress = new MailAddress(from); var accounts = MailBoxManager.GetAccountInfo(TenantId, Username).ToAddressData(); var account = accounts.FirstOrDefault(a => a.Email.ToLower().Equals(mailAddress.Address)); if (account == null) { throw new ArgumentException("Mailbox not found"); } if (account.IsGroup) { throw new InvalidOperationException("Sending emails from a group address is forbidden"); } var mbox = MailBoxManager.GetUnremovedMailBox(account.MailboxId); if (mbox == null) { throw new ArgumentException("no such mailbox"); } if (!mbox.Enabled) { throw new InvalidOperationException("Sending emails from a disabled account is forbidden"); } string mimeMessageId, streamId; var previousMailboxId = mbox.MailBoxId; if (id > 0) { var message = GetMessage(id, false, false, false); if (message.Folder != MailFolder.Ids.drafts) { throw new InvalidOperationException("Sending emails is permitted only in the Drafts folder"); } mimeMessageId = message.MimeMessageId; streamId = message.StreamId; foreach (var attachment in attachments) { attachment.streamId = streamId; } previousMailboxId = message.MailboxId; } else { mimeMessageId = MailUtil.CreateMessageId(); streamId = MailUtil.CreateStreamId(); } var fromAddress = MailUtil.CreateFullEmail(mbox.Name, mailAddress.Address); var draft = new MailDraft(id, mbox, fromAddress, to, cc, bcc, subject, mimeMessageId, mimeReplyToId, importance, tags, body, streamId, attachments, calendarIcs) { FileLinksShareMode = fileLinksShareMode, PreviousMailboxId = previousMailboxId }; try { Thread.CurrentThread.CurrentCulture = CurrentCulture; Thread.CurrentThread.CurrentUICulture = CurrentCulture; var daemonLabels = new DraftManager.DeliveryFailureMessageTranslates( MailDaemonEmail, MailApiResource.DeliveryFailureSubject, MailApiResource.DeliveryFailureAutomaticMessage, MailApiResource.DeliveryFailureMessageIdentificator, MailApiResource.DeliveryFailureRecipients, MailApiResource.DeliveryFailureRecommendations, MailApiResource.DeliveryFailureBtn, MailApiResource.DeliveryFailureFAQInformation, MailApiResource.DeliveryFailureReason); var draftsManager = new DraftManager(MailBoxManager, Logger, daemonLabels, isAutoreply); return(draftsManager.Send(draft)); } catch (DraftException ex) { string fieldName; switch (ex.FieldType) { case DraftFieldTypes.From: fieldName = MailApiResource.FieldNameFrom; break; case DraftFieldTypes.To: fieldName = MailApiResource.FieldNameTo; break; case DraftFieldTypes.Cc: fieldName = MailApiResource.FieldNameCc; break; case DraftFieldTypes.Bcc: fieldName = MailApiResource.FieldNameBcc; break; default: fieldName = ""; break; } switch (ex.ErrorType) { case DraftException.ErrorTypes.IncorrectField: throw new ArgumentException(MailApiResource.ErrorIncorrectEmailAddress.Replace("%1", fieldName)); case DraftException.ErrorTypes.EmptyField: throw new ArgumentException(MailApiResource.ErrorEmptyField.Replace("%1", fieldName)); default: throw; } } }
public static File GetParams(File file, bool lastVersion, FileShare linkRight, bool rightToRename, bool rightToEdit, bool editPossible, bool tryEdit, bool tryCoauth, out Configuration configuration) { if (file == null) { throw new FileNotFoundException(FilesCommonResource.ErrorMassage_FileNotFound); } if (!string.IsNullOrEmpty(file.Error)) { throw new Exception(file.Error); } var rightToReview = rightToEdit; var reviewPossible = editPossible; if (linkRight == FileShare.Restrict && CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsVisitor()) { rightToEdit = false; rightToReview = false; } var fileSecurity = Global.GetFilesSecurity(); rightToEdit = rightToEdit && (linkRight == FileShare.ReadWrite || fileSecurity.CanEdit(file)); if (editPossible && !rightToEdit) { editPossible = false; } rightToRename = rightToRename && rightToEdit && fileSecurity.CanEdit(file); rightToReview = rightToReview && (linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanReview(file)); if (reviewPossible && !rightToReview) { reviewPossible = false; } if (linkRight == FileShare.Restrict && !(editPossible || reviewPossible) && !fileSecurity.CanRead(file)) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } if (file.RootFolderType == FolderType.TRASH) { throw new Exception(FilesCommonResource.ErrorMassage_ViewTrashItem); } if (file.ContentLength > SetupInfo.AvailableFileSize) { throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeEdit, FileSizeComment.FilesSizeToString(SetupInfo.AvailableFileSize))); } string strError = null; if ((editPossible || reviewPossible) && EntryManager.FileLockedForMe(file.ID)) { strError = FilesCommonResource.ErrorMassage_LockedFile; rightToRename = false; rightToEdit = false; editPossible = false; reviewPossible = false; } if (editPossible && !FileUtility.CanWebEdit(file.Title)) { rightToEdit = editPossible = false; } if (!editPossible && !FileUtility.CanWebView(file.Title)) { throw new Exception(string.Format("{0} ({1})", FilesCommonResource.ErrorMassage_NotSupportedFormat, FileUtility.GetFileExtension(file.Title))); } if (reviewPossible && !FileUtility.CanWebReview(file.Title)) { rightToReview = reviewPossible = false; } var rightChangeHistory = rightToEdit; if (FileTracker.IsEditing(file.ID)) { rightChangeHistory = false; bool coauth; if ((editPossible || reviewPossible) && tryCoauth && (!(coauth = FileUtility.CanCoAuhtoring(file.Title)) || FileTracker.IsEditingAlone(file.ID))) { if (tryEdit) { var editingBy = FileTracker.GetEditingBy(file.ID).FirstOrDefault(); strError = string.Format(!coauth ? FilesCommonResource.ErrorMassage_EditingCoauth : FilesCommonResource.ErrorMassage_EditingMobile, Global.GetUserName(editingBy)); } rightToEdit = editPossible = reviewPossible = false; } } var docKey = GetDocKey(file); var modeWrite = (editPossible || reviewPossible) && tryEdit; configuration = new Configuration(file) { Document = { Key = docKey, Permissions = { Edit = rightToEdit && lastVersion, Rename = rightToRename && lastVersion && !file.ProviderEntry, Review = rightToReview && lastVersion, ChangeHistory = rightChangeHistory, } }, EditorConfig = { ModeWrite = modeWrite, }, ErrorMessage = strError, }; return(file); }
public static bool Check(string doc, bool checkRead, IFileDao fileDao, out File file, out FileShare fileShare) { fileShare = Check(doc, fileDao, out file); return((!checkRead && (fileShare == FileShare.ReadWrite || fileShare == FileShare.CustomFilter || fileShare == FileShare.Review || fileShare == FileShare.FillForms || fileShare == FileShare.Comment)) || (checkRead && fileShare != FileShare.Restrict)); }