Files: pass CallbackUrl. Fix trackedit.
This commit is contained in:
parent
bb06f4aa53
commit
2fdcbee8ef
@ -160,7 +160,7 @@ namespace ASC.Files.Core.Data
|
||||
|
||||
query = query.OrderByDescending(r => r.Version);
|
||||
|
||||
return ToFile(FromQueryWithShared(query).SingleOrDefault());
|
||||
return ToFile(FromQueryWithShared(query).Take(1).SingleOrDefault());
|
||||
}
|
||||
|
||||
public List<File<int>> GetFileHistory(int fileId)
|
||||
|
@ -30,6 +30,7 @@ using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
@ -1147,13 +1148,26 @@ namespace ASC.Web.Files
|
||||
}
|
||||
|
||||
private async Task TrackFile(HttpContext context)
|
||||
{
|
||||
var q = context.Request.Query[FilesLinkUtility.FileId];
|
||||
|
||||
if (int.TryParse(q, out var id))
|
||||
{
|
||||
await TrackFile(context, id);
|
||||
}
|
||||
else
|
||||
{
|
||||
await TrackFile(context, q.FirstOrDefault() ?? "");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task TrackFile<T>(HttpContext context, T fileId)
|
||||
{
|
||||
var auth = context.Request.Query[FilesLinkUtility.AuthKey].FirstOrDefault();
|
||||
var fileId = context.Request.Query[FilesLinkUtility.FileId].FirstOrDefault();
|
||||
Logger.Debug("DocService track fileid: " + fileId);
|
||||
|
||||
var callbackSpan = TimeSpan.FromDays(128);
|
||||
var validateResult = EmailValidationKeyProvider.ValidateEmailKey(fileId, auth ?? "", callbackSpan);
|
||||
var validateResult = EmailValidationKeyProvider.ValidateEmailKey(fileId.ToString(), auth ?? "", callbackSpan);
|
||||
if (validateResult != EmailValidationKeyProvider.ValidationResult.Ok)
|
||||
{
|
||||
Logger.ErrorFormat("DocService track auth error: {0}, {1}: {2}", validateResult.ToString(), FilesLinkUtility.AuthKey, auth);
|
||||
@ -1165,8 +1179,8 @@ namespace ASC.Web.Files
|
||||
{
|
||||
string body;
|
||||
var receiveStream = context.Request.Body;
|
||||
var readStream = new StreamReader(receiveStream);
|
||||
body = readStream.ReadToEnd();
|
||||
using var readStream = new StreamReader(receiveStream);
|
||||
body = await readStream.ReadToEndAsync();
|
||||
|
||||
Logger.Debug("DocService track body: " + body);
|
||||
if (string.IsNullOrEmpty(body))
|
||||
@ -1174,12 +1188,17 @@ namespace ASC.Web.Files
|
||||
throw new ArgumentException("DocService request body is incorrect");
|
||||
}
|
||||
|
||||
var data = JToken.Parse(body);
|
||||
if (data == null)
|
||||
var options = new JsonSerializerOptions
|
||||
{
|
||||
throw new ArgumentException("DocService request is incorrect");
|
||||
AllowTrailingCommas = true,
|
||||
PropertyNameCaseInsensitive = true
|
||||
};
|
||||
fileData = JsonSerializer.Deserialize<DocumentServiceTracker.TrackerData>(body, options);
|
||||
}
|
||||
fileData = data.ToObject<DocumentServiceTracker.TrackerData>();
|
||||
catch(JsonException e)
|
||||
{
|
||||
Logger.Error("DocService track error read body", e);
|
||||
throw new HttpException((int)HttpStatusCode.BadRequest, "DocService request is incorrect");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -81,18 +81,18 @@ namespace ASC.Web.Files.Services.DocumentService
|
||||
[DebuggerDisplay("{Status} - {Key}")]
|
||||
public class TrackerData
|
||||
{
|
||||
public List<Action> Actions;
|
||||
public string ChangesUrl;
|
||||
public ForceSaveInitiator ForceSaveType;
|
||||
public object History;
|
||||
public string Key;
|
||||
public MailMergeData MailMerge;
|
||||
public TrackerStatus Status;
|
||||
public string Token;
|
||||
public string Url;
|
||||
public List<string> Users;
|
||||
public string UserData;
|
||||
public bool Encrypted;
|
||||
public List<Action> Actions { get; set; }
|
||||
public string ChangesUrl { get; set; }
|
||||
public ForceSaveInitiator ForceSaveType { get; set; }
|
||||
public object History { get; set; }
|
||||
public string Key { get; set; }
|
||||
public MailMergeData MailMerge { get; set; }
|
||||
public TrackerStatus Status { get; set; }
|
||||
public string Token { get; set; }
|
||||
public string Url { get; set; }
|
||||
public List<string> Users { get; set; }
|
||||
public string UserData { get; set; }
|
||||
public bool Encrypted { get; set; }
|
||||
|
||||
[DebuggerDisplay("{Type} - {UserId}")]
|
||||
public class Action
|
||||
@ -119,17 +119,17 @@ namespace ASC.Web.Files.Services.DocumentService
|
||||
[DebuggerDisplay("{From}")]
|
||||
public class MailMergeData
|
||||
{
|
||||
public int RecordCount;
|
||||
public int RecordErrorCount;
|
||||
public int RecordIndex;
|
||||
public int RecordCount { get; set; }
|
||||
public int RecordErrorCount { get; set; }
|
||||
public int RecordIndex { get; set; }
|
||||
|
||||
public string From;
|
||||
public string Subject;
|
||||
public string To;
|
||||
public MailMergeType Type;
|
||||
public string From { get; set; }
|
||||
public string Subject { get; set; }
|
||||
public string To { get; set; }
|
||||
public MailMergeType Type { get; set; }
|
||||
|
||||
public string Title; //attach
|
||||
public string Message; //attach
|
||||
public string Title { get; set; } //attach
|
||||
public string Message { get; set; } //attach
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
@ -150,7 +150,12 @@ namespace ASC.Web.Files.Services.DocumentService
|
||||
|
||||
public static string Serialize(TrackResponse response)
|
||||
{
|
||||
return JsonSerializer.Serialize(response);
|
||||
var options = new JsonSerializerOptions
|
||||
{
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
||||
};
|
||||
|
||||
return JsonSerializer.Serialize(response, options);
|
||||
}
|
||||
}
|
||||
|
||||
@ -219,23 +224,23 @@ namespace ASC.Web.Files.Services.DocumentService
|
||||
Logger = options.CurrentValue;
|
||||
}
|
||||
|
||||
public string GetCallbackUrl(string fileId)
|
||||
public string GetCallbackUrl<T>(T fileId)
|
||||
{
|
||||
var callbackUrl = BaseCommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.FileHandlerPath
|
||||
+ "?" + FilesLinkUtility.Action + "=track"
|
||||
+ "&" + FilesLinkUtility.FileId + "=" + HttpUtility.UrlEncode(fileId)
|
||||
+ "&" + FilesLinkUtility.AuthKey + "=" + EmailValidationKeyProvider.GetEmailKey(fileId));
|
||||
+ "&" + FilesLinkUtility.FileId + "=" + HttpUtility.UrlEncode(fileId.ToString())
|
||||
+ "&" + FilesLinkUtility.AuthKey + "=" + EmailValidationKeyProvider.GetEmailKey(fileId.ToString()));
|
||||
callbackUrl = DocumentServiceConnector.ReplaceCommunityAdress(callbackUrl);
|
||||
return callbackUrl;
|
||||
}
|
||||
|
||||
public bool StartTrack(string fileId, string docKeyForTrack)
|
||||
public bool StartTrack<T>(T fileId, string docKeyForTrack)
|
||||
{
|
||||
var callbackUrl = GetCallbackUrl(fileId);
|
||||
return DocumentServiceConnector.Command(CommandMethod.Info, docKeyForTrack, fileId, callbackUrl);
|
||||
}
|
||||
|
||||
public TrackResponse ProcessData(string fileId, TrackerData fileData)
|
||||
public TrackResponse ProcessData<T>(T fileId, TrackerData fileData)
|
||||
{
|
||||
switch (fileData.Status)
|
||||
{
|
||||
@ -458,7 +463,7 @@ namespace ASC.Web.Files.Services.DocumentService
|
||||
return result;
|
||||
}
|
||||
|
||||
private TrackResponse ProcessMailMerge(string fileId, TrackerData fileData)
|
||||
private TrackResponse ProcessMailMerge<T>(T fileId, TrackerData fileData)
|
||||
{
|
||||
if (fileData.Users == null || fileData.Users.Count == 0 || !Guid.TryParse(fileData.Users[0], out var userId))
|
||||
{
|
||||
|
@ -57,7 +57,8 @@ namespace ASC.Files.Helpers
|
||||
private EntryManager EntryManager { get; }
|
||||
private FolderContentWrapperHelper FolderContentWrapperHelper { get; }
|
||||
private ChunkedUploadSessionHelper ChunkedUploadSessionHelper { get; }
|
||||
public ILog Logger { get; set; }
|
||||
private DocumentServiceTrackerHelper DocumentServiceTracker { get; }
|
||||
private ILog Logger { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
@ -80,6 +81,7 @@ namespace ASC.Files.Helpers
|
||||
EntryManager entryManager,
|
||||
FolderContentWrapperHelper folderContentWrapperHelper,
|
||||
ChunkedUploadSessionHelper chunkedUploadSessionHelper,
|
||||
DocumentServiceTrackerHelper documentServiceTracker,
|
||||
IOptionsMonitor<ILog> optionMonitor)
|
||||
{
|
||||
ApiContext = context;
|
||||
@ -98,6 +100,7 @@ namespace ASC.Files.Helpers
|
||||
EntryManager = entryManager;
|
||||
FolderContentWrapperHelper = folderContentWrapperHelper;
|
||||
ChunkedUploadSessionHelper = chunkedUploadSessionHelper;
|
||||
DocumentServiceTracker = documentServiceTracker;
|
||||
Logger = optionMonitor.Get("ASC.Files");
|
||||
}
|
||||
|
||||
@ -192,6 +195,7 @@ namespace ASC.Files.Helpers
|
||||
{
|
||||
DocumentServiceHelper.GetParams(fileId, version, doc, true, true, true, out var configuration);
|
||||
configuration.EditorType = EditorType.External;
|
||||
configuration.EditorConfig.CallbackUrl = DocumentServiceTracker.GetCallbackUrl(configuration.Document.Info.File.ID.ToString());
|
||||
configuration.Token = DocumentServiceHelper.GetSignature(configuration);
|
||||
return configuration;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user