Merge branch 'develop' into bugfix/login-fix

This commit is contained in:
Ilya Oleshko 2020-12-01 12:33:21 +03:00
commit 8dd7badfd3
48 changed files with 300 additions and 238 deletions

View File

@ -87,7 +87,7 @@ namespace ASC.Files.Core
/// </summary>
/// <param name="fileIds">id file</param>
/// <returns></returns>
List<File<T>> GetFiles(T[] fileIds);
List<File<T>> GetFiles(IEnumerable<T> fileIds);
/// <summary>
/// Gets the file (s) by ID (s) for share
@ -99,7 +99,7 @@ namespace ASC.Files.Core
/// <param name="searchText"></param>
/// <param name="searchInContent"></param>
/// <returns></returns>
List<File<T>> GetFilesFiltered(T[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent);
List<File<T>> GetFilesFiltered(IEnumerable<T> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent);
/// <summary>
///
@ -280,7 +280,7 @@ namespace ASC.Files.Core
/// <param name="searchText"></param>
/// <param name="searchInContent"></param>
/// <returns></returns>
List<File<T>> GetFiles(T[] parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent);
List<File<T>> GetFiles(IEnumerable<T> parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent);
/// <summary>
/// Search the list of files containing text

View File

@ -95,7 +95,7 @@ namespace ASC.Files.Core
/// <param name="searchSubfolders"></param>
/// <param name="checkShare"></param>
/// <returns></returns>
List<Folder<T>> GetFolders(T[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true);
List<Folder<T>> GetFolders(IEnumerable<T> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true);
/// <summary>
/// Get folder, contains folder with id

View File

@ -170,9 +170,9 @@ namespace ASC.Files.Core.Data
return FromQueryWithShared(query).Select(ToFile).ToList();
}
public List<File<int>> GetFiles(int[] fileIds)
public List<File<int>> GetFiles(IEnumerable<int> fileIds)
{
if (fileIds == null || fileIds.Length == 0) return new List<File<int>>();
if (fileIds == null || !fileIds.Any()) return new List<File<int>>();
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion)
.AsNoTracking();
@ -180,9 +180,9 @@ namespace ASC.Files.Core.Data
return FromQueryWithShared(query).Select(ToFile).ToList();
}
public List<File<int>> GetFilesFiltered(int[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<int>> GetFilesFiltered(IEnumerable<int> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<int>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<int>>();
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion).AsNoTracking();
@ -190,7 +190,7 @@ namespace ASC.Files.Core.Data
{
var func = GetFuncForSearch(null, null, filterType, subjectGroup, subjectID, searchText, searchInContent, false);
if (FactoryIndexer.TrySelectIds(s => func(s).In(r => r.Id, fileIds), out var searchIds))
if (FactoryIndexer.TrySelectIds(s => func(s).In(r => r.Id, fileIds.ToArray()), out var searchIds))
{
query = query.Where(r => searchIds.Any(b => b == r.Id));
}
@ -1037,9 +1037,9 @@ namespace ASC.Files.Core.Data
FilesDbContext.SaveChanges();
}
public List<File<int>> GetFiles(int[] parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<int>> GetFiles(IEnumerable<int> parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (parentIds == null || parentIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<int>>();
if (parentIds == null || !parentIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<int>>();
var q = GetFileQuery(r => r.CurrentVersion)
.AsNoTracking()

View File

@ -219,7 +219,7 @@ namespace ASC.Files.Core.Data
return FromQueryWithShared(q).Select(ToFolder).ToList();
}
public List<Folder<int>> GetFolders(int[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<int>> GetFolders(IEnumerable<int> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -243,7 +243,7 @@ namespace ASC.Files.Core.Data
if (FactoryIndexer.TrySelectIds(s =>
searchSubfolders
? s.MatchAll(searchText)
: s.MatchAll(searchText).In(r => r.Id, folderIds),
: s.MatchAll(searchText).In(r => r.Id, folderIds.ToArray()),
out var searchIds))
{
q = q.Where(r => searchIds.Any(a => a == r.Id));
@ -325,7 +325,7 @@ namespace ASC.Files.Core.Data
var newFolder = new DbFolder
{
Id = 0,
ParentId = folder.ParentFolderID,
ParentId = folder.FolderID,
Title = folder.Title,
CreateOn = TenantUtil.DateTimeToUtc(folder.CreateOn),
CreateBy = folder.CreateBy,
@ -353,7 +353,7 @@ namespace ASC.Files.Core.Data
//full path to root
var oldTree = FilesDbContext.Tree
.Where(r => r.FolderId == folder.ParentFolderID);
.Where(r => r.FolderId == folder.FolderID);
foreach (var o in oldTree)
{
@ -569,7 +569,7 @@ namespace ASC.Files.Core.Data
folder.FolderType = FolderType.DEFAULT;
var copy = ServiceProvider.GetService<Folder<int>>();
copy.ParentFolderID = toFolderId;
copy.FolderID = toFolderId;
copy.RootFolderId = toFolder.RootFolderId;
copy.RootFolderCreator = toFolder.RootFolderCreator;
copy.RootFolderType = toFolder.RootFolderType;
@ -912,7 +912,7 @@ namespace ASC.Files.Core.Data
if (createIfNotExists)
{
var folder = ServiceProvider.GetService<Folder<int>>();
folder.ParentFolderID = 0;
folder.FolderID = 0;
switch (bunch)
{
case my:
@ -1080,7 +1080,7 @@ namespace ASC.Files.Core.Data
if (r == null) return null;
var result = ServiceProvider.GetService<Folder<int>>();
result.ID = r.Folder.Id;
result.ParentFolderID = r.Folder.ParentId;
result.FolderID = r.Folder.ParentId;
result.Title = r.Folder.Title;
result.CreateOn = TenantUtil.DateTimeFromUtc(r.Folder.CreateOn);
result.CreateBy = r.Folder.CreateBy;
@ -1132,7 +1132,7 @@ namespace ASC.Files.Core.Data
break;
}
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.ParentFolderID)) result.RootFolderType = result.FolderType;
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.FolderID)) result.RootFolderType = result.FolderType;
if (result.FolderType != FolderType.DEFAULT && result.RootFolderCreator == default) result.RootFolderCreator = result.CreateBy;
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.RootFolderId)) result.RootFolderId = result.ID;

View File

@ -77,8 +77,6 @@ namespace ASC.Files.Core
FileConverter = fileConverter;
}
public T FolderID { get; set; }
public int Version { get; set; }
[JsonPropertyName("version_group")]
@ -242,19 +240,5 @@ namespace ASC.Files.Core
[NonSerialized]
private readonly FileConverter FileConverter;
private T _folderIdDisplay;
[JsonPropertyName("folder_id")]
public override T FolderIdDisplay
{
get
{
if (_folderIdDisplay != null) return _folderIdDisplay;
return FolderID;
}
set { _folderIdDisplay = value; }
}
}
}

View File

@ -129,13 +129,22 @@ namespace ASC.Files.Core
{
}
public T ID { get; set; }
public T ID { get; set; }
public T FolderID { get; set; }
private T _folderIdDisplay;
[JsonPropertyName("folder_id")]
public abstract T FolderIdDisplay
public T FolderIdDisplay
{
get;
set;
get
{
if (_folderIdDisplay != null) return _folderIdDisplay;
return FolderID;
}
set { _folderIdDisplay = value; }
}
public T RootFolderId { get; set; }

View File

@ -68,8 +68,6 @@ namespace ASC.Files.Core
{
public FolderType FolderType { get; set; }
public T ParentFolderID { get; set; }
public int TotalFiles { get; set; }
public int TotalSubFolders { get; set; }
@ -86,19 +84,6 @@ namespace ASC.Files.Core
set { NewForMe = Convert.ToInt32(value); }
}
private T _folderIdDisplay;
public override T FolderIdDisplay
{
get
{
if (_folderIdDisplay != null) return _folderIdDisplay;
return ParentFolderID;
}
set { _folderIdDisplay = value; }
}
public Folder(Global global)
: base(global)
{

View File

@ -300,8 +300,8 @@ namespace ASC.Web.Files.Services.WCFService
var prevVisible = breadCrumbs.ElementAtOrDefault(breadCrumbs.Count() - 2);
if (prevVisible != null)
{
if (prevVisible is Folder<string> f1) parent.ParentFolderID = (T)Convert.ChangeType(f1.ID, typeof(T));
if (prevVisible is Folder<int> f2) parent.ParentFolderID = (T)Convert.ChangeType(f2.ID, typeof(T));
if (prevVisible is Folder<string> f1) parent.FolderID = (T)Convert.ChangeType(f1.ID, typeof(T));
if (prevVisible is Folder<int> f2) parent.FolderID = (T)Convert.ChangeType(f2.ID, typeof(T));
}
parent.Shareable = FileSharing.CanSetAccess(parent)
@ -348,11 +348,11 @@ namespace ASC.Web.Files.Services.WCFService
var folderDao = DaoFactory.GetFolderDao<TId>();
var fileDao = DaoFactory.GetFileDao<TId>();
var folders = folderDao.GetFolders(foldersId.ToArray());
var folders = folderDao.GetFolders(foldersId);
folders = FileSecurity.FilterRead(folders).ToList();
entries = entries.Concat(folders);
var files = fileDao.GetFiles(filesId.ToArray());
var files = fileDao.GetFiles(filesId);
files = FileSecurity.FilterRead(files).ToList();
entries = entries.Concat(files);
@ -398,7 +398,7 @@ namespace ASC.Web.Files.Services.WCFService
{
var newFolder = ServiceProvider.GetService<Folder<T>>();
newFolder.Title = title;
newFolder.ParentFolderID = parent.ID;
newFolder.FolderID = parent.ID;
var folderId = folderDao.SaveFolder(newFolder);
var folder = folderDao.GetFolder(folderId);
@ -446,7 +446,7 @@ namespace ASC.Web.Files.Services.WCFService
if (folder.RootFolderType == FolderType.USER
&& !Equals(folder.RootFolderCreator, AuthContext.CurrentAccount.ID)
&& !FileSecurity.CanRead(folderDao.GetFolder(folder.ParentFolderID)))
&& !FileSecurity.CanRead(folderDao.GetFolder(folder.FolderID)))
{
folder.FolderIdDisplay = GlobalFolderHelper.GetFolderShare<T>();
}
@ -676,7 +676,7 @@ namespace ASC.Web.Files.Services.WCFService
var result = new ItemDictionary<string, string>();
var fileDao = GetFileDao();
var ids = filesId.Where(FileTracker.IsEditing).Select(id => id).ToArray();
var ids = filesId.Where(FileTracker.IsEditing).Select(id => id).ToList();
foreach (var file in fileDao.GetFiles(ids))
{
@ -1394,7 +1394,7 @@ namespace ASC.Web.Files.Services.WCFService
}
}
var folders = folderDao.GetFolders(foldersId.ToArray());
var folders = folderDao.GetFolders(foldersId);
var foldersProject = folders.Where(folder => folder.FolderType == FolderType.BUNCH).ToList();
if (foldersProject.Any())
{
@ -1556,7 +1556,7 @@ namespace ASC.Web.Files.Services.WCFService
var folderIdToMy = folderDao.GetFolderIDUser(true, userTo.ID);
var newFolder = ServiceProvider.GetService<Folder<T>>();
newFolder.Title = string.Format(CustomNamingPeople.Substitute<FilesCommonResource>("TitleDeletedUserFolder"), userFrom.DisplayUserName(false, DisplayUserSettingsHelper));
newFolder.ParentFolderID = folderIdToMy;
newFolder.FolderID = folderIdToMy;
var newFolderTo = folderDao.SaveFolder(newFolder);
@ -1608,7 +1608,7 @@ namespace ASC.Web.Files.Services.WCFService
rootFoldersId.Add(folderIdFromMy);
}
var rootFolders = folderDao.GetFolders(rootFoldersId.ToArray());
var rootFolders = folderDao.GetFolders(rootFoldersId);
foreach (var rootFolder in rootFolders)
{
FileMarker.RemoveMarkAsNew(rootFolder, userId);
@ -1646,11 +1646,11 @@ namespace ASC.Web.Files.Services.WCFService
var folderDao = GetFolderDao();
var entries = Enumerable.Empty<FileEntry<T>>();
var files = fileDao.GetFiles(filesId.ToArray());
var files = fileDao.GetFiles(filesId);
files = FileSecurity.FilterRead(files).ToList();
entries = entries.Concat(files);
var folders = folderDao.GetFolders(foldersId.ToArray());
var folders = folderDao.GetFolders(foldersId);
folders = FileSecurity.FilterRead(folders).ToList();
entries = entries.Concat(folders);
@ -1668,11 +1668,11 @@ namespace ASC.Web.Files.Services.WCFService
var folderDao = GetFolderDao();
var entries = Enumerable.Empty<FileEntry<T>>();
var files = fileDao.GetFiles(filesId.ToArray());
var files = fileDao.GetFiles(filesId);
files = FileSecurity.FilterRead(files).ToList();
entries = entries.Concat(files);
var folders = folderDao.GetFolders(foldersId.ToArray());
var folders = folderDao.GetFolders(foldersId);
folders = FileSecurity.FilterRead(folders).ToList();
entries = entries.Concat(folders);
@ -1693,7 +1693,7 @@ namespace ASC.Web.Files.Services.WCFService
var tagDao = GetTagDao();
var fileDao = GetFileDao();
var files = fileDao.GetFiles(filesId.ToArray());
var files = fileDao.GetFiles(filesId);
files = FileSecurity.FilterRead(files)
.Where(file => FileUtility.ExtsWebTemplate.Contains(FileUtility.GetFileExtension(file.Title), StringComparer.CurrentCultureIgnoreCase))
@ -1710,7 +1710,7 @@ namespace ASC.Web.Files.Services.WCFService
{
var tagDao = GetTagDao();
var fileDao = GetFileDao();
var files = fileDao.GetFiles(filesId.ToArray());
var files = fileDao.GetFiles(filesId);
files = FileSecurity.FilterRead(files).ToList();
@ -2037,7 +2037,7 @@ namespace ASC.Web.Files.Services.WCFService
var entries = new List<FileEntry<T>>();
var folderDao = GetFolderDao();
var folders = folderDao.GetFolders(foldersId.ToArray());
var folders = folderDao.GetFolders(foldersId);
foreach (var folder in folders)
{
@ -2062,7 +2062,7 @@ namespace ASC.Web.Files.Services.WCFService
}
var fileDao = GetFileDao();
var files = fileDao.GetFiles(filesId.ToArray());
var files = fileDao.GetFiles(filesId);
foreach (var file in files)
{

View File

@ -110,6 +110,11 @@ namespace ASC.Files.Core.Security
public List<Tuple<FileEntry<T>, bool>> CanRead<T>(IEnumerable<FileEntry<T>> entry, Guid userId)
{
return Can(entry, userId, FilesSecurityActions.Read);
}
public List<Tuple<FileEntry<T>, bool>> CanRead<T>(IEnumerable<FileEntry<T>> entry)
{
return Can(entry, AuthContext.CurrentAccount.ID, FilesSecurityActions.Read);
}
public bool CanRead<T>(FileEntry<T> entry, Guid userId)
@ -574,8 +579,8 @@ namespace ASC.Files.Core.Security
var folderDao = daoFactory.GetFolderDao<T>();
var filteredEntries = entries.Where(filter).ToList();
var roots = filteredEntries
.Select(r => r.RootFolderId)
.ToArray();
.Select(r => r.RootFolderId)
.ToList();
var rootsFolders = folderDao.GetFolders(roots);
var bunches = folderDao.GetBunchObjectIDs(rootsFolders.Select(r => r.ID).ToList());
@ -756,7 +761,7 @@ namespace ASC.Files.Core.Security
if (filterType == FilterType.None || filterType == FilterType.FoldersOnly)
{
var folders = folderDao.GetFolders(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, withSubfolders, false);
var folders = folderDao.GetFolders(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, withSubfolders, false);
if (withSubfolders)
{
@ -776,7 +781,7 @@ namespace ASC.Files.Core.Security
if (filterType != FilterType.FoldersOnly && withSubfolders)
{
var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent);
var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, searchInContent);
filesInSharedFolders = FilterRead(filesInSharedFolders).ToList();
entries.AddRange(filesInSharedFolders);
entries = entries.Distinct().ToList();
@ -875,7 +880,7 @@ namespace ASC.Files.Core.Security
if (filterType == FilterType.None || filterType == FilterType.FoldersOnly)
{
var folders = folderDao.GetFolders(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, withSubfolders, false);
var folders = folderDao.GetFolders(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, withSubfolders, false);
if (withSubfolders)
{
@ -895,7 +900,7 @@ namespace ASC.Files.Core.Security
if (filterType != FilterType.FoldersOnly && withSubfolders)
{
var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent);
var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, searchInContent);
filesInSharedFolders = FilterRead(filesInSharedFolders).ToList();
entries.AddRange(filesInSharedFolders);
entries = entries.Distinct().ToList();

View File

@ -128,7 +128,7 @@ namespace ASC.Files.Thirdparty.Box
var folder = GetFolder();
folder.ID = MakeId(boxFolder.Id);
folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(boxFolder));
folder.FolderID = isRoot ? null : MakeId(GetParentFolderId(boxFolder));
folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (boxFolder.CreatedAt ?? default);
folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (boxFolder.ModifiedAt ?? default);

View File

@ -108,15 +108,15 @@ namespace ASC.Files.Thirdparty.Box
return new List<File<string>> { GetFile(fileId) };
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
if (fileIds == null || fileIds.Length == 0) return new List<File<string>>();
if (fileIds == null || !fileIds.Any()) return new List<File<string>>();
return fileIds.Select(GetBoxFile).Select(ToFile).ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<string>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<string>>();
var files = GetFiles(fileIds).AsEnumerable();

View File

@ -130,7 +130,7 @@ namespace ASC.Files.Thirdparty.Box
return folders.ToList();
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -184,9 +184,9 @@ namespace ASC.Files.Thirdparty.Box
return RenameFolder(folder, folder.Title);
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var boxFolderId = MakeBoxId(folder.ParentFolderID);
var boxFolderId = MakeBoxId(folder.FolderID);
folder.Title = GetAvailableTitle(folder.Title, boxFolderId, IsExist);

View File

@ -111,7 +111,7 @@ namespace ASC.Files.Core.Thirdparty
var toFolder1 = ServiceProvider.GetService<Folder<TTo>>();
toFolder1.Title = fromFolder.Title;
toFolder1.ParentFolderID = toConverter(toRootFolderId);
toFolder1.FolderID = toConverter(toRootFolderId);
var toFolder = toFolderDao.GetFolder(fromFolder.Title, toConverter(toRootFolderId));
var toFolderId = toFolder != null

View File

@ -123,7 +123,7 @@ namespace ASC.Files.Thirdparty.Dropbox
var folder = GetFolder();
folder.ID = MakeId(dropboxFolder);
folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderPath(dropboxFolder));
folder.FolderID = isRoot ? null : MakeId(GetParentFolderPath(dropboxFolder));
folder.CreateOn = isRoot ? ProviderInfo.CreateOn : default;
folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : default;
folder.Title = MakeFolderTitle(dropboxFolder);

View File

@ -112,15 +112,15 @@ namespace ASC.Files.Thirdparty.Dropbox
return new List<File<string>> { GetFile(fileId) };
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
if (fileIds == null || fileIds.Length == 0) return new List<File<string>>();
if (fileIds == null || !fileIds.Any()) return new List<File<string>>();
return fileIds.Select(GetDropboxFile).Select(ToFile).ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<string>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<string>>();
var files = GetFiles(fileIds).AsEnumerable();

View File

@ -131,7 +131,7 @@ namespace ASC.Files.Thirdparty.Dropbox
return folders.ToList();
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -185,9 +185,9 @@ namespace ASC.Files.Thirdparty.Dropbox
return RenameFolder(folder, folder.Title);
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var dropboxFolderPath = MakeDropboxPath(folder.ParentFolderID);
var dropboxFolderPath = MakeDropboxPath(folder.FolderID);
folder.Title = GetAvailableTitle(folder.Title, dropboxFolderPath, IsExist);

View File

@ -137,7 +137,7 @@ namespace ASC.Files.Thirdparty.GoogleDrive
var folder = GetFolder();
folder.ID = MakeId(driveEntry);
folder.ParentFolderID = isRoot ? null : MakeId(GetParentDriveId(driveEntry));
folder.FolderID = isRoot ? null : MakeId(GetParentDriveId(driveEntry));
folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (driveEntry.CreatedTime ?? default);
folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (driveEntry.ModifiedTime ?? default);

View File

@ -109,15 +109,15 @@ namespace ASC.Files.Thirdparty.GoogleDrive
return new List<File<string>> { GetFile(fileId) };
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
if (fileIds == null || fileIds.Length == 0) return new List<File<string>>();
if (fileIds == null || !fileIds.Any()) return new List<File<string>>();
return fileIds.Select(GetDriveEntry).Select(ToFile).ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<string>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<string>>();
var files = GetFiles(fileIds).AsEnumerable();

View File

@ -127,7 +127,7 @@ namespace ASC.Files.Thirdparty.GoogleDrive
return folders.ToList();
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -181,9 +181,9 @@ namespace ASC.Files.Thirdparty.GoogleDrive
return RenameFolder(folder, folder.Title);
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var driveFolderId = MakeDriveId(folder.ParentFolderID);
var driveFolderId = MakeDriveId(folder.FolderID);
var driveFolder = ProviderInfo.Storage.InsertEntry(null, folder.Title, driveFolderId, true);

View File

@ -34,7 +34,7 @@ namespace ASC.Files.Thirdparty
{
}
public List<File<string>> GetFiles(string[] parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFiles(IEnumerable<string> parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
return new List<File<string>>();
}
@ -280,7 +280,7 @@ namespace ASC.Files.Thirdparty
InitFileEntryError(folder, entry);
folder.ParentFolderID = null;
folder.FolderID = null;
return folder;
}

View File

@ -123,7 +123,7 @@ namespace ASC.Files.Thirdparty.OneDrive
var folder = GetFolder();
folder.ID = MakeId(isRoot ? string.Empty : onedriveFolder.Id);
folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(onedriveFolder));
folder.FolderID = isRoot ? null : MakeId(GetParentFolderId(onedriveFolder));
folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (onedriveFolder.CreatedDateTime.HasValue ? TenantUtil.DateTimeFromUtc(onedriveFolder.CreatedDateTime.Value.DateTime) : default);
folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (onedriveFolder.LastModifiedDateTime.HasValue ? TenantUtil.DateTimeFromUtc(onedriveFolder.LastModifiedDateTime.Value.DateTime) : default);

View File

@ -108,15 +108,15 @@ namespace ASC.Files.Thirdparty.OneDrive
return new List<File<string>> { GetFile(fileId) };
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
if (fileIds == null || fileIds.Length == 0) return new List<File<string>>();
if (fileIds == null || !fileIds.Any()) return new List<File<string>>();
return fileIds.Select(GetOneDriveItem).Select(ToFile).ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<string>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<string>>();
var files = GetFiles(fileIds).AsEnumerable();

View File

@ -127,7 +127,7 @@ namespace ASC.Files.Thirdparty.OneDrive
return folders.ToList();
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -181,9 +181,9 @@ namespace ASC.Files.Thirdparty.OneDrive
return RenameFolder(folder, folder.Title);
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var onedriveFolderId = MakeOneDriveId(folder.ParentFolderID);
var onedriveFolderId = MakeOneDriveId(folder.FolderID);
folder.Title = GetAvailableTitle(folder.Title, onedriveFolderId, IsExist);

View File

@ -124,7 +124,7 @@ namespace ASC.Files.Thirdparty.ProviderDao
return fileDao.GetFileHistory(selector.ConvertId(fileId));
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
var result = Enumerable.Empty<File<string>>();
@ -139,7 +139,7 @@ namespace ASC.Files.Thirdparty.ProviderDao
.SelectMany(matchedId =>
{
var fileDao = selectorLocal.GetFileDao(matchedId.FirstOrDefault());
return fileDao.GetFiles(matchedId.Select(selectorLocal.ConvertId).ToArray());
return fileDao.GetFiles(matchedId.Select(selectorLocal.ConvertId).ToList());
}
)
.Where(r => r != null));
@ -148,7 +148,7 @@ namespace ASC.Files.Thirdparty.ProviderDao
return result.ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
var result = Enumerable.Empty<File<string>>();

View File

@ -110,7 +110,7 @@ namespace ASC.Files.Thirdparty.ProviderDao
return result;
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
var result = Enumerable.Empty<Folder<string>>();
@ -126,7 +126,7 @@ namespace ASC.Files.Thirdparty.ProviderDao
{
var folderDao = selectorLocal.GetFolderDao(matchedId.FirstOrDefault());
return folderDao
.GetFolders(matchedId.Select(selectorLocal.ConvertId).ToArray(),
.GetFolders(matchedId.Select(selectorLocal.ConvertId).ToList(),
filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare);
})
.Where(r => r != null));
@ -156,14 +156,14 @@ filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare);
folder.ID = folderId;
return newFolderId;
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var folderId = folder.ParentFolderID;
var folderId = folder.FolderID;
var selector = GetSelector(folderId);
folder.ParentFolderID = selector.ConvertId(folderId);
folder.FolderID = selector.ConvertId(folderId);
var folderDao = selector.GetFolderDao(folderId);
var newFolderId = folderDao.SaveFolder(folder);
folder.ParentFolderID = folderId;
folder.FolderID = folderId;
return newFolderId;
}
@ -277,7 +277,7 @@ filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare);
var folderId = folder.ID;
var selector = GetSelector(folderId);
folder.ID = selector.ConvertId(folderId);
folder.ParentFolderID = selector.ConvertId(folder.ParentFolderID);
folder.FolderID = selector.ConvertId(folder.FolderID);
var folderDao = selector.GetFolderDao(folderId);
return folderDao.RenameFolder(folder, newTitle);
}

View File

@ -101,14 +101,14 @@ namespace ASC.Files.Thirdparty.SharePoint
return new List<File<string>> { GetFile(fileId) };
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
return fileIds.Select(fileId => ProviderInfo.ToFile(ProviderInfo.GetFileById(fileId))).ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<string>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<string>>();
var files = GetFiles(fileIds).AsEnumerable();

View File

@ -135,7 +135,7 @@ namespace ASC.Files.Thirdparty.SharePoint
return folders.ToList();
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -183,9 +183,9 @@ namespace ASC.Files.Thirdparty.SharePoint
return ProviderInfo.ToFolder(savedfolder).ID;
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var parentFolder = ProviderInfo.GetFolderById(folder.ParentFolderID);
var parentFolder = ProviderInfo.GetFolderById(folder.FolderID);
folder.Title = GetAvailableTitle(folder.Title, parentFolder, IsExist);

View File

@ -500,7 +500,7 @@ namespace ASC.Files.Thirdparty.SharePoint
if (folder is SharePointFolderErrorEntry errorFolder)
{
result.ID = MakeId(errorFolder.ID);
result.ParentFolderID = null;
result.FolderID = null;
result.CreateBy = Owner;
result.CreateOn = DateTime.UtcNow;
result.FolderType = FolderType.DEFAULT;
@ -523,7 +523,7 @@ namespace ASC.Files.Thirdparty.SharePoint
var isRoot = folder.ServerRelativeUrl == SpRootFolderId;
result.ID = MakeId(isRoot ? "" : folder.ServerRelativeUrl);
result.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(folder.ServerRelativeUrl));
result.FolderID = isRoot ? null : MakeId(GetParentFolderId(folder.ServerRelativeUrl));
result.CreateBy = Owner;
result.CreateOn = CreateOn;
result.FolderType = FolderType.DEFAULT;

View File

@ -281,7 +281,7 @@ namespace ASC.Files.Thirdparty.Sharpbox
var folder = GetFolder();
folder.ID = MakeId(fsEntry);
folder.ParentFolderID = isRoot ? null : MakeId(fsEntry.Parent);
folder.FolderID = isRoot ? null : MakeId(fsEntry.Parent);
folder.CreateOn = isRoot ? ProviderInfo.CreateOn : fsEntry.Modified;
folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : fsEntry.Modified;
folder.RootFolderId = MakeId(RootFolder());

View File

@ -106,14 +106,14 @@ namespace ASC.Files.Thirdparty.Sharpbox
return new List<File<string>> { GetFile(fileId) };
}
public List<File<string>> GetFiles(string[] fileIds)
public List<File<string>> GetFiles(IEnumerable<string> fileIds)
{
return fileIds.Select(fileId => ToFile(GetFileById(fileId))).ToList();
}
public List<File<string>> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
public List<File<string>> GetFilesFiltered(IEnumerable<string> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
{
if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File<string>>();
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<string>>();
var files = GetFiles(fileIds).AsEnumerable();

View File

@ -138,7 +138,7 @@ namespace ASC.Files.Thirdparty.Sharpbox
return folders.ToList();
}
public List<Folder<string>> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
public List<Folder<string>> GetFolders(IEnumerable<string> folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true)
{
if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension
|| filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly
@ -186,9 +186,9 @@ namespace ASC.Files.Thirdparty.Sharpbox
var savedfolder = ProviderInfo.Storage.CreateFolder(MakePath(folder.ID));
return MakeId(savedfolder);
}
if (folder.ParentFolderID != null)
if (folder.FolderID != null)
{
var parentFolder = GetFolderById(folder.ParentFolderID);
var parentFolder = GetFolderById(folder.FolderID);
folder.Title = GetAvailableTitle(folder.Title, parentFolder, IsExist);
@ -390,7 +390,7 @@ namespace ASC.Files.Thirdparty.Sharpbox
}
else
{
var parentFolder = GetFolderById(folder.ParentFolderID);
var parentFolder = GetFolderById(folder.FolderID);
newTitle = GetAvailableTitle(newTitle, parentFolder, IsExist);
//rename folder

View File

@ -566,7 +566,7 @@ namespace ASC.Web.Files.Classes
{
var folder = ServiceProvider.GetService<Folder<T>>();
folder.Title = folderName;
folder.ParentFolderID = folderId;
folder.FolderID = folderId;
var subFolderId = folderDao.SaveFolder(folder);

View File

@ -198,16 +198,16 @@ namespace ASC.Api.Documents
IEnumerable<FileEntryWrapper> GetFolders<T>(IEnumerable<T> folders)
{
var folderDao = DaoFactory.GetFolderDao<T>();
return folderDao.GetFolders(folders.ToArray())
.Select(FolderWrapperHelper.Get)
return folderDao.GetFolders(folders)
.Select(r => FolderWrapperHelper.Get(r))
.Cast<FileEntryWrapper>();
}
IEnumerable<FileEntryWrapper> GetFiles<T>(IEnumerable<T> files)
{
var fileDao = DaoFactory.GetFileDao<T>();
return fileDao.GetFiles(files.ToArray())
.Select(FilesWrapperHelper.Get)
return fileDao.GetFiles(files)
.Select(r => FilesWrapperHelper.Get(r))
.Cast<FileEntryWrapper>();
}
}

View File

@ -25,8 +25,10 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using ASC.Api.Core;
using ASC.Api.Utils;
using ASC.Common;
@ -171,47 +173,68 @@ namespace ASC.Api.Documents
FileUtility = fileUtility;
}
public FileWrapper<T> Get<T>(File<T> file)
public FileWrapper<T> Get<T>(File<T> file, List<Tuple<FileEntry<T>, bool>> folders = null)
{
var result = Get<FileWrapper<T>, T>(file);
var result = GetFileWrapper(file);
result.FolderId = file.FolderID;
if (file.RootFolderType == FolderType.USER
&& !Equals(file.RootFolderCreator, AuthContext.CurrentAccount.ID))
{
result.RootFolderType = FolderType.SHARE;
var folderDao = DaoFactory.GetFolderDao<T>();
var parentFolder = folderDao.GetFolder(file.FolderID);
if (!FileSecurity.CanRead(parentFolder))
{
result.FolderId = GlobalFolderHelper.GetFolderShare<T>();
var folderDao = DaoFactory.GetFolderDao<T>();
FileEntry<T> parentFolder;
if(folders != null)
{
var folderWithRight = folders.FirstOrDefault(f => f.Item1.ID.Equals(file.FolderID));
if (folderWithRight == null || !folderWithRight.Item2)
{
result.FolderId = GlobalFolderHelper.GetFolderShare<T>();
}
}
else
{
parentFolder = folderDao.GetFolder(file.FolderID);
if (!FileSecurity.CanRead(parentFolder))
{
result.FolderId = GlobalFolderHelper.GetFolderShare<T>();
}
}
}
}
result.FileExst = FileUtility.GetFileExtension(file.Title);
result.FileType = FileUtility.GetFileTypeByExtention(result.FileExst);
result.Version = file.Version;
result.VersionGroup = file.VersionGroup;
result.ContentLength = file.ContentLengthString;
result.FileStatus = file.FileStatus;
result.PureContentLength = file.ContentLength.NullIfDefault();
result.Comment = file.Comment;
return result;
}
private FileWrapper<T> GetFileWrapper<T>(File<T> file)
{
var result = Get<FileWrapper<T>, T>(file);
result.FileExst = FileUtility.GetFileExtension(file.Title);
result.FileType = FileUtility.GetFileTypeByExtention(result.FileExst);
result.Version = file.Version;
result.VersionGroup = file.VersionGroup;
result.ContentLength = file.ContentLengthString;
result.FileStatus = file.FileStatus;
result.PureContentLength = file.ContentLength.NullIfDefault();
result.Comment = file.Comment;
result.Encrypted = file.Encrypted.NullIfDefault();
result.Locked = file.Locked.NullIfDefault();
result.LockedBy = file.LockedBy;
try
{
result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl);
result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID));
}
catch (Exception)
{
//Don't catch anything here because of httpcontext
}
return result;
try
{
result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl);
result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID));
}
catch (Exception)
{
//Don't catch anything here because of httpcontext
}
return result;
}
}
}

View File

@ -32,6 +32,7 @@ using System.Text.Json.Serialization;
using ASC.Common;
using ASC.Files.Core;
using ASC.Files.Core.Security;
using ASC.Web.Files.Services.WCFService;
namespace ASC.Api.Documents
@ -104,20 +105,29 @@ namespace ASC.Api.Documents
[Scope]
public class FolderContentWrapperHelper
{
{
private FileSecurity FileSecurity { get; }
private IDaoFactory DaoFactory { get; }
private FileWrapperHelper FileWrapperHelper { get; }
private FolderWrapperHelper FolderWrapperHelper { get; }
public FolderContentWrapperHelper(
public FolderContentWrapperHelper(
FileSecurity fileSecurity,
IDaoFactory daoFactory,
FileWrapperHelper fileWrapperHelper,
FolderWrapperHelper folderWrapperHelper)
{
{
FileSecurity = fileSecurity;
DaoFactory = daoFactory;
FileWrapperHelper = fileWrapperHelper;
FolderWrapperHelper = folderWrapperHelper;
}
public FolderContentWrapper<T> Get<T>(DataWrapper<T> folderItems, int startIndex)
{
{
var foldersIntWithRights = GetFoldersIntWithRights<int>();
var foldersStringWithRights = GetFoldersIntWithRights<string>();
var result = new FolderContentWrapper<T>
{
Files = folderItems.Entries
@ -127,11 +137,11 @@ namespace ASC.Api.Documents
FileEntryWrapper wrapper = null;
if (r is File<int> fol1)
{
wrapper = FileWrapperHelper.Get(fol1);
wrapper = FileWrapperHelper.Get(fol1, foldersIntWithRights);
}
if (r is File<string> fol2)
{
wrapper = FileWrapperHelper.Get(fol2);
wrapper = FileWrapperHelper.Get(fol2, foldersStringWithRights);
}
return wrapper;
@ -145,11 +155,11 @@ namespace ASC.Api.Documents
FileEntryWrapper wrapper = null;
if (r is Folder<int> fol1)
{
wrapper = FolderWrapperHelper.Get(fol1);
wrapper = FolderWrapperHelper.Get(fol1, foldersIntWithRights);
}
if (r is Folder<string> fol2)
{
wrapper = FolderWrapperHelper.Get(fol2);
wrapper = FolderWrapperHelper.Get(fol2, foldersStringWithRights);
}
return wrapper;
@ -164,7 +174,15 @@ namespace ASC.Api.Documents
result.Total = folderItems.Total;
result.New = folderItems.New;
return result;
return result;
List<Tuple<FileEntry<T1>, bool>> GetFoldersIntWithRights<T1>()
{
var folderDao = DaoFactory.GetFolderDao<T1>();
var folders = folderDao.GetFolders(folderItems.Entries.OfType<FileEntry<T1>>().Select(r => r.FolderID).ToList());
return FileSecurity.CanRead(folders);
}
}
}

View File

@ -25,7 +25,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ASC.Api.Core;
using ASC.Api.Utils;
using ASC.Common;
@ -113,27 +115,49 @@ namespace ASC.Api.Documents
GlobalFolderHelper = globalFolderHelper;
}
public FolderWrapper<T> Get<T>(Folder<T> folder)
public FolderWrapper<T> Get<T>(Folder<T> folder, List<Tuple<FileEntry<T>, bool>> folders = null)
{
var result = Get<FolderWrapper<T>, T>(folder);
result.ParentId = folder.ParentFolderID;
var result = GetFolderWrapper(folder);
result.ParentId = folder.FolderID;
if (folder.RootFolderType == FolderType.USER
&& !Equals(folder.RootFolderCreator, AuthContext.CurrentAccount.ID))
{
result.RootFolderType = FolderType.SHARE;
var folderDao = DaoFactory.GetFolderDao<T>();
var parentFolder = folderDao.GetFolder(folder.ParentFolderID);
if (!FileSecurity.CanRead(parentFolder))
result.ParentId = GlobalFolderHelper.GetFolderShare<T>();
var folderDao = DaoFactory.GetFolderDao<T>();
FileEntry<T> parentFolder;
if (folders != null)
{
var folderWithRight = folders.FirstOrDefault(f => f.Item1.ID.Equals(folder.FolderID));
if (folderWithRight == null || !folderWithRight.Item2)
{
result.ParentId = GlobalFolderHelper.GetFolderShare<T>();
}
}
else
{
parentFolder = folderDao.GetFolder(folder.FolderID);
if (!FileSecurity.CanRead(parentFolder))
{
result.ParentId = GlobalFolderHelper.GetFolderShare<T>();
}
}
}
return result;
}
private FolderWrapper<T> GetFolderWrapper<T>(Folder<T> folder)
{
var result = Get<FolderWrapper<T>, T>(folder);
result.FilesCount = folder.TotalFiles;
result.FoldersCount = folder.TotalSubFolders;
result.IsShareable = folder.Shareable.NullIfDefault();
result.New = folder.NewForMe;
return result;
result.New = folder.NewForMe;
return result;
}
}
}

View File

@ -181,13 +181,13 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
var entriesPathId = new ItemNameValueCollection<T>();
if (0 < Files.Count)
{
var files = FileDao.GetFiles(Files.ToArray());
var files = FileDao.GetFiles(Files);
files = FilesSecurity.FilterRead(files).ToList();
files.ForEach(file => entriesPathId.Add(ExecPathFromFile(scope, file, string.Empty)));
}
if (0 < Folders.Count)
{
FilesSecurity.FilterRead(FolderDao.GetFolders(Files.ToArray())).ToList().Cast<FileEntry<T>>().ToList()
FilesSecurity.FilterRead(FolderDao.GetFolders(Files)).Cast<FileEntry<T>>().ToList()
.ForEach(folder => fileMarker.RemoveMarkAsNew(folder));
var filesInFolder = GetFilesInFolders(scope, Folders, string.Empty);

View File

@ -92,11 +92,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
var entries = new List<FileEntry<T>>();
if (Folders.Any())
{
entries.AddRange(FolderDao.GetFolders(Folders.ToArray()));
entries.AddRange(FolderDao.GetFolders(Folders));
}
if (Files.Any())
{
entries.AddRange(FileDao.GetFiles(Files.ToArray()));
entries.AddRange(FileDao.GetFiles(Files));
}
entries.ForEach(x =>
{

View File

@ -199,7 +199,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
{
Error = FilesCommonResource.ErrorMassage_SecurityException_MoveFolder;
}
else if (!Equals((folder.ParentFolderID ?? default).ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate)
else if (!Equals((folder.FolderID ?? default).ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate)
{
try
{

View File

@ -270,6 +270,9 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
CurrentTenant = fileOperationData.Tenant;
using var scope = ServiceProvider.CreateScope();
var tenantManager = scope.ServiceProvider.GetService<TenantManager>();
tenantManager.SetCurrentTenant(CurrentTenant);
var daoFactory = scope.ServiceProvider.GetService<IDaoFactory>();
FolderDao = daoFactory.GetFolderDao<TId>();

View File

@ -340,7 +340,7 @@ namespace ASC.Web.Files.Utils
folders.RemoveAll(folder => rootKeys.Contains(folder.ID));
var projectFolders = DaoFactory.GetFolderDao<int>().GetFolders(projectFolderIds.ToArray(), filter, subjectGroup, subjectId, null, false, false);
var projectFolders = DaoFactory.GetFolderDao<int>().GetFolders(projectFolderIds.ToList(), filter, subjectGroup, subjectId, null, false, false);
folders.AddRange(projectFolders);
}
@ -554,7 +554,7 @@ namespace ASC.Web.Files.Utils
if (filter == FilterType.None || filter == FilterType.FoldersOnly)
{
var folderIds = tags.Where(tag => tag.EntryType == FileEntryType.Folder).Select(tag => (T)Convert.ChangeType(tag.EntryId, typeof(T))).ToArray();
var folderIds = tags.Where(tag => tag.EntryType == FileEntryType.Folder).Select(tag => (T)Convert.ChangeType(tag.EntryId, typeof(T))).ToList();
folders = folderDao.GetFolders(folderIds, filter, subjectGroup, subjectId, searchText, false, false);
folders = folders.Where(folder => folder.RootFolderType != FolderType.TRASH).ToList();
@ -697,7 +697,7 @@ namespace ASC.Web.Files.Utils
//Fake folder. Don't send request to third party
var folder = ServiceProvider.GetService<Folder<string>>();
folder.ParentFolderID = parentFolderId;
folder.FolderID = parentFolderId;
folder.ID = providerInfo.RootFolderId;
folder.CreateBy = providerInfo.Owner;

View File

@ -569,7 +569,7 @@ namespace ASC.Web.Files.Utils
var parentId =
entry.FileEntryType == FileEntryType.File
? ((File<T>)entry).FolderID
: ((Folder<T>)entry).ParentFolderID;
: ((Folder<T>)entry).FolderID;
var parentEntry = entryTags.Keys.FirstOrDefault(entryCountTag => Equals(entryCountTag.ID, parentId));
if (parentEntry != null)

View File

@ -213,7 +213,7 @@ namespace ASC.Web.Files.Utils
{
var newFolder = ServiceProvider.GetService<Folder<T>>();
newFolder.Title = subFolderTitle;
newFolder.ParentFolderID = folderId;
newFolder.FolderID = folderId;
folderId = folderDao.SaveFolder(newFolder);

View File

@ -58,6 +58,7 @@ using ASC.Web.Files.Utils;
using ASC.Web.Studio.Core;
using ASC.Web.Studio.Utility;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ActionConstraints;
@ -723,12 +724,14 @@ namespace ASC.Api.Documents
/// <param name="doc"></param>
/// <category>Files</category>
/// <returns></returns>
[AllowAnonymous]
[Read("file/{fileId}/openedit", DisableFormat = true)]
public Configuration<string> OpenEdit(string fileId, int version, string doc)
{
return FilesControllerHelperString.OpenEdit(fileId, version, doc);
}
[AllowAnonymous]
[Read("file/{fileId:int}/openedit")]
public Configuration<int> OpenEdit(int fileId, int version, string doc)
{
@ -1799,7 +1802,7 @@ namespace ASC.Api.Documents
public IEnumerable<FolderWrapper<string>> GetCommonThirdPartyFolders()
{
var parent = FileStorageServiceInt.GetFolder(GlobalFolderHelper.FolderCommon);
return EntryManager.GetThirpartyFolders(parent).Select(FolderWrapperHelper.Get).ToList();
return EntryManager.GetThirpartyFolders(parent).Select(r => FolderWrapperHelper.Get(r)).ToList();
}
/// <summary>

View File

@ -489,13 +489,13 @@ namespace ASC.Files.Helpers
public IEnumerable<FileWrapper<T>> GetFileVersionInfo(T fileId)
{
var files = FileStorageService.GetFileHistory(fileId);
return files.Select(FileWrapperHelper.Get);
return files.Select(r=> FileWrapperHelper.Get(r));
}
public IEnumerable<FileWrapper<T>> ChangeHistory(T fileId, int version, bool continueVersion)
{
var history = FileStorageService.CompleteVersion(fileId, version, continueVersion).Value;
return history.Select(FileWrapperHelper.Get);
return history.Select(r=> FileWrapperHelper.Get(r));
}
public FileWrapper<T> LockFile(T fileId, bool lockFile)

View File

@ -118,7 +118,7 @@ namespace ASC.Files.Service.Core
.Where(f => f.Item1.RootFolderType != FolderType.TRASH && f.Item1.RootFolderType != FolderType.BUNCH)
.ToList();
var folderIDs = files.Select(r => r.Item1.FolderID).ToArray();
var folderIDs = files.Select(r => r.Item1.FolderID).ToList();
var folders = FolderDao.GetFolders(folderIDs, checkShare: false);
return files.Select(f => new Tuple<Feed.Aggregator.Feed, object>(ToFeed(f, folders.FirstOrDefault(r => r.ID.Equals(f.Item1.FolderID))), f));

View File

@ -87,10 +87,10 @@ namespace ASC.Files.Service.Core
.Where(f => f.Item1.RootFolderType != FolderType.TRASH && f.Item1.RootFolderType != FolderType.BUNCH)
.ToList();
var parentFolderIDs = folders.Select(r => r.Item1.ParentFolderID).ToArray();
var parentFolderIDs = folders.Select(r => r.Item1.FolderID).ToList();
var parentFolders = FolderDao.GetFolders(parentFolderIDs, checkShare: false);
return folders.Select(f => new Tuple<Feed.Aggregator.Feed, object>(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.ParentFolderID))), f));
return folders.Select(f => new Tuple<Feed.Aggregator.Feed, object>(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.FolderID))), f));
}
private Feed.Aggregator.Feed ToFeed((Folder<int>, SmallShareRecord) tuple, Folder<int> rootFolder)
@ -109,12 +109,12 @@ namespace ASC.Files.Service.Core
Module = Name,
Title = folder.Title,
ExtraLocation = rootFolder.FolderType == FolderType.DEFAULT ? rootFolder.Title : string.Empty,
ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.ParentFolderID, false) : string.Empty,
ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.FolderID, false) : string.Empty,
Keywords = string.Format("{0}", folder.Title),
HasPreview = false,
CanComment = false,
Target = shareRecord.ShareTo,
GroupId = GetGroupId(sharedFolderItem, shareRecord.ShareBy, folder.ParentFolderID.ToString())
GroupId = GetGroupId(sharedFolderItem, shareRecord.ShareBy, folder.FolderID.ToString())
};
return feed;
@ -129,12 +129,12 @@ namespace ASC.Files.Service.Core
Module = Name,
Title = folder.Title,
ExtraLocation = rootFolder.FolderType == FolderType.DEFAULT ? rootFolder.Title : string.Empty,
ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.ParentFolderID, false) : string.Empty,
ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.FolderID, false) : string.Empty,
Keywords = string.Format("{0}", folder.Title),
HasPreview = false,
CanComment = false,
Target = null,
GroupId = GetGroupId(folderItem, folder.CreateBy, folder.ParentFolderID.ToString())
GroupId = GetGroupId(folderItem, folder.CreateBy, folder.FolderID.ToString())
};
}
}

View File

@ -19,7 +19,6 @@ namespace ASC.Web.Api.Controllers
[Scope]
[DefaultRoute]
[ApiController]
[AllowAnonymous]
public class AuthenticationController : ControllerBase
{
private UserManager UserManager { get; }
@ -48,12 +47,21 @@ namespace ASC.Web.Api.Controllers
EmailValidationKeyModelHelper = emailValidationKeyModelHelper;
}
[Read]
public bool GetIsAuthentificated()
{
return SecurityContext.IsAuthenticated;
}
[AllowAnonymous]
[Create(false)]
public AuthenticationTokenData AuthenticateMeFromBody([FromBody] AuthModel auth)
{
return AuthenticateMe(auth);
}
[AllowAnonymous]
[Create(false)]
[Consumes("application/x-www-form-urlencoded")]
public AuthenticationTokenData AuthenticateMeFromForm([FromForm] AuthModel auth)
@ -61,6 +69,28 @@ namespace ASC.Web.Api.Controllers
return AuthenticateMe(auth);
}
[Create("logout")]
public void Logout()
{
CookiesManager.ClearCookies(CookiesType.AuthKey);
CookiesManager.ClearCookies(CookiesType.SocketIO);
}
[AllowAnonymous]
[Create("confirm", false)]
public ValidationResult CheckConfirmFromBody([FromBody] EmailValidationKeyModel model)
{
return EmailValidationKeyModelHelper.Validate(model);
}
[AllowAnonymous]
[Create("confirm", false)]
[Consumes("application/x-www-form-urlencoded")]
public ValidationResult CheckConfirmFromForm([FromForm] EmailValidationKeyModel model)
{
return EmailValidationKeyModelHelper.Validate(model);
}
private AuthenticationTokenData AuthenticateMe(AuthModel auth)
{
var tenant = TenantManager.GetCurrentTenant();
@ -84,28 +114,6 @@ namespace ASC.Web.Api.Controllers
}
}
[Create("logout")]
public void Logout()
{
CookiesManager.ClearCookies(CookiesType.AuthKey);
CookiesManager.ClearCookies(CookiesType.SocketIO);
}
[AllowAnonymous]
[Create("confirm", false)]
public ValidationResult CheckConfirmFromBody([FromBody] EmailValidationKeyModel model)
{
return EmailValidationKeyModelHelper.Validate(model);
}
[AllowAnonymous]
[Create("confirm", false)]
[Consumes("application/x-www-form-urlencoded")]
public ValidationResult CheckConfirmFromForm([FromForm] EmailValidationKeyModel model)
{
return EmailValidationKeyModelHelper.Validate(model);
}
private UserInfo GetUser(int tenantId, AuthModel memberModel)
{
memberModel.PasswordHash = (memberModel.PasswordHash ?? "").Trim();