Merge branch 'master' into feature/files

This commit is contained in:
Ilya Oleshko 2020-06-03 18:53:04 +03:00
commit 99e641bb2f
21 changed files with 118 additions and 86 deletions

View File

@ -31,8 +31,8 @@
<PackageReference Include="Autofac" Version="5.2.0" />
<PackageReference Include="Autofac.Configuration" Version="5.1.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Confluent.Kafka" Version="1.3.0" />
<PackageReference Include="Google.Protobuf" Version="3.11.4" />
<PackageReference Include="Confluent.Kafka" Version="1.4.3" />
<PackageReference Include="Google.Protobuf" Version="3.12.2" />
<PackageReference Include="Grpc" Version="2.27.0" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PrivateAssets>all</PrivateAssets>
@ -58,7 +58,7 @@
</PackageReference> -->
<PackageReference Include="MySql.Data" Version="8.0.20" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="NLog" Version="4.7.1" />
<PackageReference Include="NLog" Version="4.7.2" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.2" />
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NVelocity" Version="1.2.0" />

View File

@ -43,10 +43,10 @@
<None Remove="protos\UserPhotoCacheItem.proto" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AWSSDK.CloudFront" Version="3.3.101.146" />
<PackageReference Include="AWSSDK.Core" Version="3.3.106.24" />
<PackageReference Include="AWSSDK.S3" Version="3.3.110.70" />
<PackageReference Include="AWSSDK.SimpleEmail" Version="3.3.101.150" />
<PackageReference Include="AWSSDK.CloudFront" Version="3.3.101.153" />
<PackageReference Include="AWSSDK.Core" Version="3.3.107.3" />
<PackageReference Include="AWSSDK.S3" Version="3.3.111.4" />
<PackageReference Include="AWSSDK.SimpleEmail" Version="3.3.101.157" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

View File

@ -90,7 +90,35 @@ namespace ASC.Core
}
public class TenantManager
{
{
private class TenantHolder
{
public Tenant Tenant;
}
private static readonly AsyncLocal<TenantHolder> currentTenant = new AsyncLocal<TenantHolder>();
public Tenant CurrentTenant
{
get
{
return currentTenant.Value?.Tenant;
}
set
{
var holder = currentTenant.Value;
if (holder != null)
{
holder.Tenant = null;
}
if (value != null)
{
currentTenant.Value = new TenantHolder { Tenant = value };
}
}
}
public const string CURRENT_TENANT = "CURRENT_TENANT";
internal ITenantService TenantService { get; set; }
internal IQuotaService QuotaService { get; set; }
@ -101,8 +129,6 @@ namespace ASC.Core
internal IHttpContextAccessor HttpContextAccessor { get; set; }
internal CoreBaseSettings CoreBaseSettings { get; set; }
internal CoreSettings CoreSettings { get; set; }
public Tenant CurrentTenant { get; set; }
static TenantManager()
{
@ -248,6 +274,9 @@ namespace ASC.Core
{
throw new Exception("Could not resolve current tenant :-(.");
}
CurrentTenant = tenant;
return tenant;
}

View File

@ -26,7 +26,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ASC.Common;
using ASC.Common.Threading.Progress;
@ -34,14 +33,15 @@ using ASC.Core.Users;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace ASC.Data.Reassigns
{
public class QueueWorker
{
public static Dictionary<string, string> GetHttpHeaders(HttpRequest httpRequest)
public static IDictionary<string, StringValues> GetHttpHeaders(HttpRequest httpRequest)
{
return httpRequest?.Headers.Keys.ToDictionary(key => key, key => httpRequest.Headers[key].ToString());
return httpRequest?.Headers;
}
}
public class QueueWorker<T> where T : class, IProgressItem

View File

@ -44,13 +44,14 @@ using ASC.Web.Studio.Core.Notify;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace ASC.Data.Reassigns
{
public class ReassignProgressItem : IProgressItem
{
private readonly HttpContext _context;
private readonly Dictionary<string, string> _httpHeaders;
private readonly IDictionary<string, StringValues> _httpHeaders;
private readonly int _tenantId;
private readonly Guid _currentUserId;

View File

@ -46,12 +46,13 @@ using ASC.Web.Studio.Core.Notify;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace ASC.Data.Reassigns
{
public class RemoveProgressItem : IProgressItem
{
private readonly Dictionary<string, string> _httpHeaders;
private readonly IDictionary<string, StringValues> _httpHeaders;
private readonly int _tenantId;
private readonly Guid _currentUserId;

View File

@ -22,10 +22,10 @@
<ItemGroup>
<PackageReference Include="Google.Api.Gax" Version="2.10.0" />
<PackageReference Include="Google.Api.Gax.Rest" Version="2.10.0" />
<PackageReference Include="Google.Apis" Version="1.43.0" />
<PackageReference Include="Google.Apis.Auth" Version="1.43.0" />
<PackageReference Include="Google.Apis.Core" Version="1.43.0" />
<PackageReference Include="Google.Apis.Storage.v1" Version="1.43.0.1791" />
<PackageReference Include="Google.Apis" Version="1.45.0" />
<PackageReference Include="Google.Apis.Auth" Version="1.45.0" />
<PackageReference Include="Google.Apis.Core" Version="1.45.0" />
<PackageReference Include="Google.Apis.Storage.v1" Version="1.45.0.1964" />
<PackageReference Include="Google.Cloud.Storage.V1" Version="2.5.0" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PrivateAssets>all</PrivateAssets>

View File

@ -35,6 +35,7 @@ using ASC.Core;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace ASC.MessagingSystem
{
@ -81,7 +82,7 @@ namespace ASC.MessagingSystem
}
}
public EventMessage Create(MessageUserData userData, Dictionary<string, string> headers, MessageAction action, MessageTarget target, params string[] description)
public EventMessage Create(MessageUserData userData, IDictionary<string, StringValues> headers, MessageAction action, MessageTarget target, params string[] description)
{
try
{
@ -97,10 +98,10 @@ namespace ASC.MessagingSystem
if (headers != null)
{
var userAgent = headers.ContainsKey(userAgentHeader) ? headers[userAgentHeader] : null;
var forwarded = headers.ContainsKey(forwardedHeader) ? headers[forwardedHeader] : null;
var host = headers.ContainsKey(hostHeader) ? headers[hostHeader] : null;
var referer = headers.ContainsKey(refererHeader) ? headers[refererHeader] : null;
var userAgent = headers.ContainsKey(userAgentHeader) ? headers[userAgentHeader].ToString() : null;
var forwarded = headers.ContainsKey(forwardedHeader) ? headers[forwardedHeader].ToString() : null;
var host = headers.ContainsKey(hostHeader) ? headers[hostHeader].ToString() : null;
var referer = headers.ContainsKey(refererHeader) ? headers[refererHeader].ToString() : null;
message.IP = forwarded ?? host;
message.UAHeader = userAgent;

View File

@ -34,6 +34,7 @@ using ASC.MessagingSystem.DbSender;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace ASC.MessagingSystem
{
@ -212,27 +213,27 @@ namespace ASC.MessagingSystem
#region HttpHeaders
public void Send(MessageUserData userData, Dictionary<string, string> httpHeaders, MessageAction action)
public void Send(MessageUserData userData, IDictionary<string, StringValues> httpHeaders, MessageAction action)
{
SendHeadersMessage(userData, httpHeaders, action, null);
}
public void Send(Dictionary<string, string> httpHeaders, MessageAction action)
public void Send(IDictionary<string, StringValues> httpHeaders, MessageAction action)
{
SendHeadersMessage(null, httpHeaders, action, null);
}
public void Send(Dictionary<string, string> httpHeaders, MessageAction action, string d1)
public void Send(IDictionary<string, StringValues> httpHeaders, MessageAction action, string d1)
{
SendHeadersMessage(null, httpHeaders, action, null, d1);
}
public void Send(Dictionary<string, string> httpHeaders, MessageAction action, IEnumerable<string> d1)
public void Send(IDictionary<string, StringValues> httpHeaders, MessageAction action, IEnumerable<string> d1)
{
SendHeadersMessage(null, httpHeaders, action, null, d1?.ToArray());
}
public void Send(MessageUserData userData, Dictionary<string, string> httpHeaders, MessageAction action, MessageTarget target)
public void Send(MessageUserData userData, IDictionary<string, StringValues> httpHeaders, MessageAction action, MessageTarget target)
{
SendHeadersMessage(userData, httpHeaders, action, target);
}
@ -241,24 +242,24 @@ namespace ASC.MessagingSystem
#region HttpHeaders & Target
public void Send(Dictionary<string, string> httpHeaders, MessageAction action, MessageTarget target)
public void Send(IDictionary<string, StringValues> httpHeaders, MessageAction action, MessageTarget target)
{
SendHeadersMessage(null, httpHeaders, action, target);
}
public void Send(Dictionary<string, string> httpHeaders, MessageAction action, MessageTarget target, string d1)
public void Send(IDictionary<string, StringValues> httpHeaders, MessageAction action, MessageTarget target, string d1)
{
SendHeadersMessage(null, httpHeaders, action, target, d1);
}
public void Send(Dictionary<string, string> httpHeaders, MessageAction action, MessageTarget target, IEnumerable<string> d1)
public void Send(IDictionary<string, StringValues> httpHeaders, MessageAction action, MessageTarget target, IEnumerable<string> d1)
{
SendHeadersMessage(null, httpHeaders, action, target, d1?.ToArray());
}
#endregion
private void SendHeadersMessage(MessageUserData userData, Dictionary<string, string> httpHeaders, MessageAction action, MessageTarget target, params string[] description)
private void SendHeadersMessage(MessageUserData userData, IDictionary<string, StringValues> httpHeaders, MessageAction action, MessageTarget target, params string[] description)
{
if (sender == null) return;

View File

@ -12,7 +12,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.7.82" />
<PackageReference Include="CommandLineParser" Version="2.8.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />

View File

@ -22,12 +22,12 @@
<None Remove="protos\SearchItem.proto" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Elasticsearch.Net" Version="7.6.1" />
<PackageReference Include="Elasticsearch.Net" Version="7.7.1" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NEST" Version="7.6.1" />
<PackageReference Include="NEST" Version="7.7.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\ASC.Common\ASC.Common.csproj" />

View File

@ -27,11 +27,11 @@
<None Remove="proto\SharePointProviderCacheItem.proto" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Box.V2.Core" Version="3.22.0" />
<PackageReference Include="DocuSign.eSign.dll" Version="4.3.0" />
<PackageReference Include="DotNetZip" Version="1.13.7" />
<PackageReference Include="Dropbox.Api" Version="4.9.4" />
<PackageReference Include="Google.Apis.Drive.v3" Version="1.44.1.1876" />
<PackageReference Include="Box.V2.Core" Version="3.23.0" />
<PackageReference Include="DocuSign.eSign.dll" Version="4.4.1" />
<PackageReference Include="DotNetZip" Version="1.13.8" />
<PackageReference Include="Dropbox.Api" Version="4.10.0" />
<PackageReference Include="Google.Apis.Drive.v3" Version="1.45.0.1964" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@ -39,7 +39,7 @@
<PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.7" />
<PackageReference Include="Microsoft.OneDriveSDK" Version="2.0.7" />
<PackageReference Include="Microsoft.SharePoint.Client" Version="14.0.4762.1000" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.3" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.1" />
</ItemGroup>
<ItemGroup>

View File

@ -68,6 +68,7 @@ using ASC.Web.Files.Utils;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using FileShare = ASC.Files.Core.Security.FileShare;
using UrlShortener = ASC.Web.Core.Utility.UrlShortener;
@ -1009,7 +1010,7 @@ namespace ASC.Web.Files.Services.WCFService
file = EntryManager.SaveEditing(fileId, null, url, null, doc, string.Format(FilesCommonResource.CommentRevertChanges, modifiedOnString));
}
FilesMessageService.Send(file, GetHttpHeaders(), MessageAction.FileRestoreVersion, file.Title, version.ToString(CultureInfo.InvariantCulture));
FilesMessageService.Send(file, HttpContextAccessor?.HttpContext?.Request?.Headers, MessageAction.FileRestoreVersion, file.Title, version.ToString(CultureInfo.InvariantCulture));
fileDao = GetFileDao();
return new ItemList<EditHistory>(fileDao.GetEditHistory(DocumentServiceHelper, file.ID));
@ -2039,18 +2040,9 @@ namespace ASC.Web.Files.Services.WCFService
return new InvalidOperationException(error.Message, error);
}
private Dictionary<string, string> GetHttpHeaders()
private IDictionary<string, StringValues> GetHttpHeaders()
{
if (HttpContextAccessor?.HttpContext != null && HttpContextAccessor?.HttpContext.Request != null && HttpContextAccessor?.HttpContext.Request.Headers != null)
{
var headers = new Dictionary<string, string>();
foreach (var k in HttpContextAccessor?.HttpContext.Request.Headers)
{
headers[k.Key] = string.Join(", ", k.Value);
}
return headers;
}
return null;
return HttpContextAccessor?.HttpContext?.Request?.Headers;
}
}

View File

@ -60,7 +60,8 @@ using DocuSign.eSign.Model;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
namespace ASC.Web.Files.Helpers
@ -204,7 +205,7 @@ namespace ASC.Web.Files.Helpers
return true;
}
public string SendDocuSign<T>(T fileId, DocuSignData docuSignData, Dictionary<string, string> requestHeaders)
public string SendDocuSign<T>(T fileId, DocuSignData docuSignData, IDictionary<string, StringValues> requestHeaders)
{
if (docuSignData == null) throw new ArgumentNullException("docuSignData");
var token = DocuSignToken.GetToken();

View File

@ -33,6 +33,7 @@ using ASC.MessagingSystem;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace ASC.Web.Files.Helpers
{
@ -64,12 +65,12 @@ namespace ASC.Web.Files.Helpers
HttpContextAccessor = httpContextAccessor;
}
public void Send(Dictionary<string, string> headers, MessageAction action)
public void Send(IDictionary<string, StringValues> headers, MessageAction action)
{
SendHeadersMessage(headers, action, null);
}
public void Send<T>(FileEntry<T> entry, Dictionary<string, string> headers, MessageAction action, params string[] description)
public void Send<T>(FileEntry<T> entry, IDictionary<string, StringValues> headers, MessageAction action, params string[] description)
{
// do not log actions in users folder
if (entry == null || entry.RootFolderType == FolderType.USER) return;
@ -77,7 +78,7 @@ namespace ASC.Web.Files.Helpers
SendHeadersMessage(headers, action, MessageTarget.Create(entry.ID), description);
}
public void Send<T1, T2>(FileEntry<T1> entry1, FileEntry<T2> entry2, Dictionary<string, string> headers, MessageAction action, params string[] description)
public void Send<T1, T2>(FileEntry<T1> entry1, FileEntry<T2> entry2, IDictionary<string, StringValues> headers, MessageAction action, params string[] description)
{
// do not log actions in users folder
if (entry1 == null || entry2 == null || entry1.RootFolderType == FolderType.USER || entry2.RootFolderType == FolderType.USER) return;
@ -85,7 +86,7 @@ namespace ASC.Web.Files.Helpers
SendHeadersMessage(headers, action, MessageTarget.Create(new[] { entry1.ID.ToString(), entry2.ID.ToString() }), description);
}
private void SendHeadersMessage(Dictionary<string, string> headers, MessageAction action, MessageTarget target, params string[] description)
private void SendHeadersMessage(IDictionary<string, StringValues> headers, MessageAction action, MessageTarget target, params string[] description)
{
if (headers == null)
{

View File

@ -37,6 +37,7 @@ using ASC.Web.Files.Helpers;
using ASC.Web.Files.Utils;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Primitives;
namespace ASC.Web.Files.Services.WCFService.FileOperations
{
@ -44,16 +45,16 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
{
public bool IgnoreException { get; }
public bool Immediately { get; }
public Dictionary<string, string> Headers { get; }
public IDictionary<string, StringValues> Headers { get; }
public FileDeleteOperationData(IEnumerable<object> folders, IEnumerable<object> files, Tenant tenant,
bool holdResult = true, bool ignoreException = false, bool immediately = false, Dictionary<string, string> headers = null)
bool holdResult = true, bool ignoreException = false, bool immediately = false, IDictionary<string, StringValues> headers = null)
: this(folders.OfType<T>(), files.OfType<T>(), tenant, holdResult, ignoreException, immediately, headers)
{
}
public FileDeleteOperationData(IEnumerable<T> folders, IEnumerable<T> files, Tenant tenant,
bool holdResult = true, bool ignoreException = false, bool immediately = false, Dictionary<string, string> headers = null)
bool holdResult = true, bool ignoreException = false, bool immediately = false, IDictionary<string, StringValues> headers = null)
: base(folders, files, tenant, holdResult)
{
IgnoreException = ignoreException;
@ -80,7 +81,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
private int _trashId;
private readonly bool _ignoreException;
private readonly bool _immediately;
private readonly Dictionary<string, string> _headers;
private readonly IDictionary<string, StringValues> _headers;
public override FileOperationType OperationType
{

View File

@ -47,15 +47,16 @@ using ASC.Web.Studio.Core;
using Ionic.Zip;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Primitives;
namespace ASC.Web.Files.Services.WCFService.FileOperations
{
internal class FileDownloadOperationData<T> : FileOperationData<T>
{
public Dictionary<T, string> FilesDownload { get; }
public Dictionary<string, string> Headers { get; }
public IDictionary<string, StringValues> Headers { get; }
public FileDownloadOperationData(Dictionary<T, string> folders, Dictionary<T, string> files, Tenant tenant, Dictionary<string, string> headers, bool holdResult = true)
public FileDownloadOperationData(Dictionary<T, string> folders, Dictionary<T, string> files, Tenant tenant, IDictionary<string, StringValues> headers, bool holdResult = true)
: base(folders.Select(f => f.Key).ToList(), files.Select(f => f.Key).ToList(), tenant, holdResult)
{
FilesDownload = files;
@ -117,7 +118,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
class FileDownloadOperation<T> : FileOperation<FileDownloadOperationData<T>, T>
{
private readonly Dictionary<T, string> files;
private readonly Dictionary<string, string> headers;
private readonly IDictionary<string, StringValues> headers;
ItemNameValueCollection<T> entriesPathId;
public override FileOperationType OperationType
{

View File

@ -39,6 +39,7 @@ using ASC.Web.Files.Helpers;
using ASC.Web.Files.Utils;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Primitives;
namespace ASC.Web.Files.Services.WCFService.FileOperations
{
@ -67,14 +68,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
public int DaoFolderId { get; }
public bool Copy { get; }
public FileConflictResolveType ResolveType { get; }
public Dictionary<string, string> Headers { get; }
public IDictionary<string, StringValues> Headers { get; }
public FileMoveCopyOperationData(IEnumerable<object> folders, IEnumerable<object> files, Tenant tenant, JsonElement toFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult = true, Dictionary<string, string> headers = null)
public FileMoveCopyOperationData(IEnumerable<object> folders, IEnumerable<object> files, Tenant tenant, JsonElement toFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult = true, IDictionary<string, StringValues> headers = null)
: this(folders.OfType<T>(), files.OfType<T>(), tenant, toFolderId, copy, resolveType, holdResult, headers)
{
}
public FileMoveCopyOperationData(IEnumerable<T> folders, IEnumerable<T> files, Tenant tenant, JsonElement toFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult = true, Dictionary<string, string> headers = null)
public FileMoveCopyOperationData(IEnumerable<T> folders, IEnumerable<T> files, Tenant tenant, JsonElement toFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult = true, IDictionary<string, StringValues> headers = null)
: base(folders, files, tenant, holdResult)
{
if (toFolderId.ValueKind == JsonValueKind.String)
@ -99,7 +100,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
private readonly bool _copy;
private readonly FileConflictResolveType _resolveType;
private readonly Dictionary<string, string> _headers;
private readonly IDictionary<string, StringValues> _headers;
public override FileOperationType OperationType
{

View File

@ -34,7 +34,9 @@ using ASC.Common;
using ASC.Common.Threading;
using ASC.Core;
using ASC.Files.Resources;
using Microsoft.Extensions.Primitives;
namespace ASC.Web.Files.Services.WCFService.FileOperations
{
public class FileOperationsManager
@ -109,7 +111,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
return QueueTask(authContext, op);
}
public ItemList<FileOperationResult> Download(AuthContext authContext, TenantManager tenantManager, Dictionary<JsonElement, string> folders, Dictionary<JsonElement, string> files, Dictionary<string, string> headers)
public ItemList<FileOperationResult> Download(AuthContext authContext, TenantManager tenantManager, Dictionary<JsonElement, string> folders, Dictionary<JsonElement, string> files, IDictionary<string, StringValues> headers)
{
var operations = tasks.GetTasks()
.Where(t => t.GetProperty<Guid>(FileOperation.OWNER) == authContext.CurrentAccount.ID)
@ -128,7 +130,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
return QueueTask(authContext, op);
}
public ItemList<FileOperationResult> MoveOrCopy(AuthContext authContext, TenantManager tenantManager, IEnumerable<JsonElement> folders, IEnumerable<JsonElement> files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, Dictionary<string, string> headers)
public ItemList<FileOperationResult> MoveOrCopy(AuthContext authContext, TenantManager tenantManager, IEnumerable<JsonElement> folders, IEnumerable<JsonElement> files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, IDictionary<string, StringValues> headers)
{
var tenant = tenantManager.GetCurrentTenant();
var op1 = new FileMoveCopyOperation<int>(ServiceProvider, new FileMoveCopyOperationData<int>(folders.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), files.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), tenant, destFolderId, copy, resolveType, holdResult, headers));
@ -138,13 +140,13 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
return QueueTask(authContext, op);
}
public ItemList<FileOperationResult> Delete<T>(AuthContext authContext, TenantManager tenantManager, IEnumerable<T> folders, IEnumerable<T> files, bool ignoreException, bool holdResult, bool immediately, Dictionary<string, string> headers)
public ItemList<FileOperationResult> Delete<T>(AuthContext authContext, TenantManager tenantManager, IEnumerable<T> folders, IEnumerable<T> files, bool ignoreException, bool holdResult, bool immediately, IDictionary<string, StringValues> headers)
{
var op = new FileDeleteOperation<T>(ServiceProvider, new FileDeleteOperationData<T>(folders, files, tenantManager.GetCurrentTenant(), holdResult, ignoreException, immediately, headers));
return QueueTask(authContext, op);
}
public ItemList<FileOperationResult> Delete(AuthContext authContext, TenantManager tenantManager, IEnumerable<JsonElement> folders, IEnumerable<JsonElement> files, bool ignoreException, bool holdResult, bool immediately, Dictionary<string, string> headers)
public ItemList<FileOperationResult> Delete(AuthContext authContext, TenantManager tenantManager, IEnumerable<JsonElement> folders, IEnumerable<JsonElement> files, bool ignoreException, bool holdResult, bool immediately, IDictionary<string, StringValues> headers)
{
var op1 = new FileDeleteOperation<int>(ServiceProvider, new FileDeleteOperationData<int>(folders.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), files.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), tenantManager.GetCurrentTenant(), holdResult, ignoreException, immediately, headers));
var op2 = new FileDeleteOperation<string>(ServiceProvider, new FileDeleteOperationData<string>(folders.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), files.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), tenantManager.GetCurrentTenant(), holdResult, ignoreException, immediately, headers));
@ -198,32 +200,32 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
return FileOperationsManager.MarkAsRead(AuthContext, TenantManager, folderIds, fileIds);
}
public ItemList<FileOperationResult> Download(Dictionary<JsonElement, string> folders, Dictionary<JsonElement, string> files, Dictionary<string, string> headers)
public ItemList<FileOperationResult> Download(Dictionary<JsonElement, string> folders, Dictionary<JsonElement, string> files, IDictionary<string, StringValues> headers)
{
return FileOperationsManager.Download(AuthContext, TenantManager, folders, files, headers);
}
public ItemList<FileOperationResult> MoveOrCopy(IEnumerable<JsonElement> folders, IEnumerable<JsonElement> files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, Dictionary<string, string> headers)
public ItemList<FileOperationResult> MoveOrCopy(IEnumerable<JsonElement> folders, IEnumerable<JsonElement> files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, IDictionary<string, StringValues> headers)
{
return FileOperationsManager.MoveOrCopy(AuthContext, TenantManager, folders, files, destFolderId, copy, resolveType, holdResult, headers);
}
public ItemList<FileOperationResult> Delete(List<JsonElement> folders, List<JsonElement> files, bool ignoreException, bool holdResult, bool immediately, Dictionary<string, string> headers)
public ItemList<FileOperationResult> Delete(List<JsonElement> folders, List<JsonElement> files, bool ignoreException, bool holdResult, bool immediately, IDictionary<string, StringValues> headers)
{
return FileOperationsManager.Delete(AuthContext, TenantManager, folders, files, ignoreException, holdResult, immediately, headers);
}
public ItemList<FileOperationResult> Delete<T>(List<T> folders, List<T> files, bool ignoreException, bool holdResult, bool immediately, Dictionary<string, string> headers)
public ItemList<FileOperationResult> Delete<T>(List<T> folders, List<T> files, bool ignoreException, bool holdResult, bool immediately, IDictionary<string, StringValues> headers)
{
return FileOperationsManager.Delete(AuthContext, TenantManager, folders, files, ignoreException, holdResult, immediately, headers);
}
public ItemList<FileOperationResult> DeleteFile<T>(T file, bool ignoreException, bool holdResult, bool immediately, Dictionary<string, string> headers)
public ItemList<FileOperationResult> DeleteFile<T>(T file, bool ignoreException, bool holdResult, bool immediately, IDictionary<string, StringValues> headers)
{
return Delete(new List<T>(), new List<T>() { file }, ignoreException, holdResult, immediately, headers);
}
public ItemList<FileOperationResult> DeleteFolder<T>(T folder, bool ignoreException, bool holdResult, bool immediately, Dictionary<string, string> headers)
public ItemList<FileOperationResult> DeleteFolder<T>(T folder, bool ignoreException, bool holdResult, bool immediately, IDictionary<string, StringValues> headers)
{
return Delete(new List<T>() { folder }, new List<T>(), ignoreException, holdResult, immediately, headers);
}

View File

@ -25,7 +25,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.4" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.3" />
</ItemGroup>
<ItemGroup>

View File

@ -313,7 +313,7 @@ namespace ASC.Api.Settings
[Read("cultures")]
public IEnumerable<object> GetSupportedCultures()
{
return SetupInfo.EnabledCultures.Select(r => new { r.Name });
return SetupInfo.EnabledCultures.Select(r => r.Name).ToArray();
}
[Read("timezones")]