Files: simplified getHeaders method

This commit is contained in:
pavelbannov 2020-06-01 15:16:24 +03:00
parent a1778b5cdf
commit dbfb84786e
9 changed files with 55 additions and 54 deletions

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

@ -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));
@ -2041,18 +2042,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);
}