2022-03-15 18:00:53 +00:00
|
|
|
// (c) Copyright Ascensio System SIA 2010-2022
|
|
|
|
//
|
|
|
|
// This program is a free software product.
|
|
|
|
// You can redistribute it and/or modify it under the terms
|
|
|
|
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
|
|
|
|
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
|
|
|
|
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
|
|
|
|
// any third-party rights.
|
|
|
|
//
|
|
|
|
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
|
|
|
|
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
|
|
|
|
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
|
|
//
|
|
|
|
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
|
|
|
|
//
|
|
|
|
// The interactive user interfaces in modified source and object code versions of the Program must
|
|
|
|
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
|
|
|
|
//
|
|
|
|
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
|
|
|
|
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
|
|
|
|
// trademark law for use of our trademarks.
|
|
|
|
//
|
|
|
|
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
|
|
|
|
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
|
|
|
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-01-31 08:30:08 +00:00
|
|
|
using Constants = ASC.Core.Users.Constants;
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
namespace ASC.Web.Studio.Core.Notify;
|
|
|
|
|
|
|
|
[Singletone(Additional = typeof(WorkContextExtension))]
|
|
|
|
public class NotifyConfiguration
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 16:57:02 +00:00
|
|
|
private static bool _configured;
|
|
|
|
private static readonly object _locker = new object();
|
|
|
|
private static readonly Regex _urlReplacer = new Regex(@"(<a [^>]*href=(('(?<url>[^>']*)')|(""(?<url>[^>""]*)""))[^>]*>)|(<img [^>]*src=(('(?<url>(?![data:|cid:])[^>']*)')|(""(?<url>(?![data:|cid:])[^>""]*)""))[^/>]*/?>)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
|
|
|
private static readonly Regex _textileLinkReplacer = new Regex(@"""(?<text>[\w\W]+?)"":""(?<link>[^""]+)""", RegexOptions.Singleline | RegexOptions.Compiled);
|
2022-04-14 12:21:06 +00:00
|
|
|
private readonly NotifyEngine _notifyEngine;
|
|
|
|
private readonly WorkContext _workContext;
|
2020-10-28 12:26:27 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
public NotifyConfiguration(NotifyEngine notifyEngine, WorkContext workContext)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
_notifyEngine = notifyEngine;
|
|
|
|
_workContext = workContext;
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
2020-10-28 12:26:27 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
public void Configure()
|
|
|
|
{
|
2022-03-17 16:57:02 +00:00
|
|
|
lock (_locker)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 16:57:02 +00:00
|
|
|
if (!_configured)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 16:57:02 +00:00
|
|
|
_configured = true;
|
2022-04-14 12:21:06 +00:00
|
|
|
_workContext.NotifyStartUp();
|
|
|
|
_workContext.NotifyContext.NotifyClientRegistration += NotifyClientRegisterCallback;
|
|
|
|
_notifyEngine.AddAction<NotifyTransferRequest>();
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
private void NotifyClientRegisterCallback(Context context, INotifyClient client)
|
|
|
|
{
|
|
|
|
#region url correction
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
var absoluteUrl = new SendInterceptorSkeleton(
|
|
|
|
"Web.UrlAbsoluter",
|
|
|
|
InterceptorPlace.MessageSend,
|
|
|
|
InterceptorLifetime.Global,
|
|
|
|
(r, p, scope) =>
|
|
|
|
{
|
|
|
|
if (r != null && r.CurrentMessage != null && r.CurrentMessage.ContentType == Pattern.HtmlContentType)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
var commonLinkUtility = scope.ServiceProvider.GetService<CommonLinkUtility>();
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
var body = r.CurrentMessage.Body;
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 16:57:02 +00:00
|
|
|
body = _urlReplacer.Replace(body, m =>
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
var url = m.Groups["url"].Value;
|
|
|
|
var ind = m.Groups["url"].Index - m.Index;
|
|
|
|
return string.IsNullOrEmpty(url) && ind > 0 ?
|
|
|
|
m.Value.Insert(ind, commonLinkUtility.GetFullAbsolutePath(string.Empty)) :
|
|
|
|
m.Value.Replace(url, commonLinkUtility.GetFullAbsolutePath(url));
|
|
|
|
});
|
|
|
|
|
2022-03-17 16:57:02 +00:00
|
|
|
body = _textileLinkReplacer.Replace(body, m =>
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
var url = m.Groups["link"].Value;
|
|
|
|
var ind = m.Groups["link"].Index - m.Index;
|
|
|
|
return string.IsNullOrEmpty(url) && ind > 0 ?
|
|
|
|
m.Value.Insert(ind, commonLinkUtility.GetFullAbsolutePath(string.Empty)) :
|
|
|
|
m.Value.Replace(url, commonLinkUtility.GetFullAbsolutePath(url));
|
|
|
|
});
|
|
|
|
|
|
|
|
r.CurrentMessage.Body = body;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
client.AddInterceptor(absoluteUrl);
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region security and culture
|
|
|
|
|
|
|
|
var securityAndCulture = new SendInterceptorSkeleton(
|
|
|
|
"ProductSecurityInterceptor",
|
|
|
|
InterceptorPlace.DirectSend,
|
|
|
|
InterceptorLifetime.Global,
|
|
|
|
(r, p, scope) =>
|
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
var scopeClass = scope.ServiceProvider.GetRequiredService<ProductSecurityInterceptor>();
|
|
|
|
return scopeClass.Intercept(r, p);
|
2022-03-17 15:13:38 +00:00
|
|
|
});
|
|
|
|
client.AddInterceptor(securityAndCulture);
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region white label correction
|
|
|
|
|
|
|
|
var whiteLabel = new SendInterceptorSkeleton(
|
|
|
|
"WhiteLabelInterceptor",
|
|
|
|
InterceptorPlace.MessageSend,
|
|
|
|
InterceptorLifetime.Global,
|
|
|
|
(r, p, scope) =>
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
var tags = r.Arguments;
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
var logoTextTag = tags.FirstOrDefault(a => a.Tag == CommonTags.LetterLogoText);
|
|
|
|
var logoText = logoTextTag != null ? (string)logoTextTag.Value : string.Empty;
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
if (!string.IsNullOrEmpty(logoText))
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
r.CurrentMessage.Body = r.CurrentMessage.Body
|
|
|
|
.Replace("${{" + CommonTags.LetterLogoText + "}}", logoText);
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
|
|
|
catch (Exception error)
|
|
|
|
{
|
2022-05-26 09:01:54 +00:00
|
|
|
scope.ServiceProvider.GetService<ILogger<ProductSecurityInterceptor>>().ErrorNotifyClientRegisterCallback(error);
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
client.AddInterceptor(whiteLabel);
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
#endregion
|
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
}
|
2020-07-30 13:33:54 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
[Scope]
|
|
|
|
public class ProductSecurityInterceptor
|
|
|
|
{
|
|
|
|
private readonly TenantManager _tenantManager;
|
|
|
|
private readonly WebItemSecurity _webItemSecurity;
|
|
|
|
private readonly UserManager _userManager;
|
|
|
|
private readonly CoreBaseSettings _coreBaseSettings;
|
2022-05-26 09:01:54 +00:00
|
|
|
private readonly ILogger<ProductSecurityInterceptor> _log;
|
2022-04-14 12:21:06 +00:00
|
|
|
|
|
|
|
public ProductSecurityInterceptor(
|
|
|
|
TenantManager tenantManager,
|
|
|
|
WebItemSecurity webItemSecurity,
|
|
|
|
UserManager userManager,
|
|
|
|
CoreBaseSettings coreBaseSettings,
|
2022-04-26 17:53:48 +00:00
|
|
|
ILogger<ProductSecurityInterceptor> logger
|
2022-04-14 12:21:06 +00:00
|
|
|
)
|
2020-08-24 18:41:06 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
_tenantManager = tenantManager;
|
|
|
|
_webItemSecurity = webItemSecurity;
|
|
|
|
_userManager = userManager;
|
|
|
|
_coreBaseSettings = coreBaseSettings;
|
2022-04-26 17:53:48 +00:00
|
|
|
_log = logger;
|
2022-04-14 12:21:06 +00:00
|
|
|
}
|
2020-08-31 08:18:07 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
public bool Intercept(NotifyRequest r, InterceptorPlace p)
|
|
|
|
{
|
|
|
|
try
|
2020-08-31 08:18:07 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
// culture
|
|
|
|
var u = Constants.LostUser;
|
|
|
|
if (!(_coreBaseSettings.Personal && r.NotifyAction.ID == Actions.PersonalConfirmation.ID))
|
2022-04-01 16:17:21 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
var tenant = _tenantManager.GetCurrentTenant();
|
2022-04-01 16:17:21 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
if (32 <= r.Recipient.ID.Length)
|
|
|
|
{
|
|
|
|
var guid = default(Guid);
|
|
|
|
try
|
2022-04-01 16:17:21 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
guid = new Guid(r.Recipient.ID);
|
2022-04-01 16:17:21 +00:00
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
catch (FormatException) { }
|
|
|
|
catch (OverflowException) { }
|
2022-04-01 16:17:21 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
if (guid != default)
|
2022-04-01 16:17:21 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
u = _userManager.GetUsers(guid);
|
2022-04-01 16:17:21 +00:00
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
}
|
2022-04-01 16:17:21 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
if (Constants.LostUser.Equals(u))
|
|
|
|
{
|
|
|
|
u = _userManager.GetUserByEmail(r.Recipient.ID);
|
|
|
|
}
|
2022-04-01 16:17:21 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
if (Constants.LostUser.Equals(u))
|
|
|
|
{
|
|
|
|
u = _userManager.GetUserByUserName(r.Recipient.ID);
|
2022-04-01 16:17:21 +00:00
|
|
|
}
|
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
if (!Constants.LostUser.Equals(u))
|
2022-04-01 16:17:21 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
var culture = !string.IsNullOrEmpty(u.CultureName) ? u.GetCulture() : tenant.GetCulture();
|
2022-04-01 16:17:21 +00:00
|
|
|
Thread.CurrentThread.CurrentCulture = culture;
|
|
|
|
Thread.CurrentThread.CurrentUICulture = culture;
|
2022-04-14 12:21:06 +00:00
|
|
|
|
|
|
|
// security
|
|
|
|
var tag = r.Arguments.Find(a => a.Tag == CommonTags.ModuleID);
|
|
|
|
var productId = tag != null ? (Guid)tag.Value : Guid.Empty;
|
|
|
|
if (productId == Guid.Empty)
|
|
|
|
{
|
|
|
|
tag = r.Arguments.Find(a => a.Tag == CommonTags.ProductID);
|
|
|
|
productId = tag != null ? (Guid)tag.Value : Guid.Empty;
|
|
|
|
}
|
|
|
|
if (productId == Guid.Empty)
|
|
|
|
{
|
|
|
|
productId = (Guid)(CallContext.GetData("asc.web.product_id") ?? Guid.Empty);
|
|
|
|
}
|
|
|
|
if (productId != Guid.Empty && productId != new Guid("f4d98afdd336433287783c6945c81ea0") /* ignore people product */)
|
|
|
|
{
|
|
|
|
return !_webItemSecurity.IsAvailableForUser(productId, u.Id);
|
|
|
|
}
|
2022-04-01 16:17:21 +00:00
|
|
|
}
|
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
|
|
|
|
var tagCulture = r.Arguments.FirstOrDefault(a => a.Tag == CommonTags.Culture);
|
|
|
|
if (tagCulture != null)
|
2022-04-01 16:17:21 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
var culture = CultureInfo.GetCultureInfo((string)tagCulture.Value);
|
|
|
|
Thread.CurrentThread.CurrentCulture = culture;
|
|
|
|
Thread.CurrentThread.CurrentUICulture = culture;
|
2022-04-01 16:17:21 +00:00
|
|
|
}
|
2020-08-31 08:18:07 +00:00
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
catch (Exception error)
|
2019-11-01 13:56:47 +00:00
|
|
|
{
|
2022-05-13 14:48:49 +00:00
|
|
|
_log.ErrorProductSecurityInterceptor(error);
|
2019-11-01 13:56:47 +00:00
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
|
|
|
|
return false;
|
2019-11-01 13:56:47 +00:00
|
|
|
}
|
2022-04-14 12:21:06 +00:00
|
|
|
}
|
2022-03-31 17:32:46 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
public static class NotifyConfigurationExtension
|
|
|
|
{
|
|
|
|
public static void Register(DIHelper services)
|
2022-03-31 17:32:46 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
services.TryAdd<NotifyTransferRequest>();
|
|
|
|
services.TryAdd<ProductSecurityInterceptor>();
|
|
|
|
services.TryAdd<TextileStyler>();
|
|
|
|
services.TryAdd<JabberStyler>();
|
|
|
|
services.TryAdd<PushStyler>();
|
|
|
|
}
|
|
|
|
}
|
2022-03-31 17:32:46 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
[Scope]
|
|
|
|
public class NotifyTransferRequest : INotifyEngineAction
|
|
|
|
{
|
|
|
|
private readonly TenantManager _tenantManager;
|
|
|
|
private readonly AuthContext _authContext;
|
|
|
|
private readonly UserManager _userManager;
|
|
|
|
private readonly DisplayUserSettingsHelper _displayUserSettingsHelper;
|
|
|
|
private readonly TenantExtra _tenantExtra;
|
|
|
|
private readonly WebItemManager _webItemManager;
|
|
|
|
private readonly TenantLogoManager _tenantLogoManager;
|
|
|
|
private readonly AdditionalWhiteLabelSettingsHelper _additionalWhiteLabelSettingsHelper;
|
|
|
|
private readonly TenantUtil _tenantUtil;
|
|
|
|
private readonly CoreBaseSettings _coreBaseSettings;
|
|
|
|
private readonly CommonLinkUtility _commonLinkUtility;
|
|
|
|
private readonly SettingsManager _settingsManager;
|
|
|
|
private readonly StudioNotifyHelper _studioNotifyHelper;
|
2022-05-26 09:01:54 +00:00
|
|
|
private readonly ILogger<ProductSecurityInterceptor> _log;
|
2022-04-14 12:21:06 +00:00
|
|
|
|
|
|
|
public NotifyTransferRequest(
|
|
|
|
TenantManager tenantManager,
|
|
|
|
AuthContext authContext,
|
|
|
|
UserManager userManager,
|
|
|
|
DisplayUserSettingsHelper displayUserSettingsHelper,
|
2022-05-26 09:01:54 +00:00
|
|
|
ILogger<ProductSecurityInterceptor> logger,
|
2022-04-14 12:21:06 +00:00
|
|
|
TenantExtra tenantExtra,
|
|
|
|
WebItemManager webItemManager,
|
|
|
|
TenantLogoManager tenantLogoManager,
|
|
|
|
AdditionalWhiteLabelSettingsHelper additionalWhiteLabelSettingsHelper,
|
|
|
|
TenantUtil tenantUtil,
|
|
|
|
CoreBaseSettings coreBaseSettings,
|
|
|
|
CommonLinkUtility commonLinkUtility,
|
|
|
|
SettingsManager settingsManager,
|
|
|
|
StudioNotifyHelper studioNotifyHelper)
|
|
|
|
{
|
|
|
|
_tenantManager = tenantManager;
|
|
|
|
_authContext = authContext;
|
|
|
|
_userManager = userManager;
|
|
|
|
_displayUserSettingsHelper = displayUserSettingsHelper;
|
|
|
|
_tenantExtra = tenantExtra;
|
|
|
|
_webItemManager = webItemManager;
|
|
|
|
_tenantLogoManager = tenantLogoManager;
|
|
|
|
_additionalWhiteLabelSettingsHelper = additionalWhiteLabelSettingsHelper;
|
|
|
|
_tenantUtil = tenantUtil;
|
|
|
|
_coreBaseSettings = coreBaseSettings;
|
|
|
|
_commonLinkUtility = commonLinkUtility;
|
|
|
|
_settingsManager = settingsManager;
|
|
|
|
_studioNotifyHelper = studioNotifyHelper;
|
2022-04-26 17:53:48 +00:00
|
|
|
_log = logger;
|
2022-04-14 12:21:06 +00:00
|
|
|
}
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
public void BeforeTransferRequest(NotifyRequest request)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
|
|
|
var aid = Guid.Empty;
|
|
|
|
var aname = string.Empty;
|
2022-04-14 12:21:06 +00:00
|
|
|
var tenant = _tenantManager.GetCurrentTenant();
|
2022-03-17 15:13:38 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
if (_authContext.IsAuthenticated)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
aid = _authContext.CurrentAccount.ID;
|
|
|
|
var user = _userManager.GetUsers(aid);
|
|
|
|
if (_userManager.UserExists(user))
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
aname = user.DisplayUserName(false, _displayUserSettingsHelper)
|
|
|
|
.Replace(">", ">")
|
|
|
|
.Replace("<", "<");
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
_commonLinkUtility.GetLocationByRequest(out var product, out var module);
|
2022-03-17 15:13:38 +00:00
|
|
|
if (product == null && CallContext.GetData("asc.web.product_id") != null)
|
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
product = _webItemManager[(Guid)CallContext.GetData("asc.web.product_id")] as IProduct;
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
var logoText = TenantWhiteLabelSettings.DefaultLogoText;
|
2022-04-14 12:21:06 +00:00
|
|
|
if ((_tenantExtra.Enterprise || _coreBaseSettings.CustomMode) && !MailWhiteLabelSettings.IsDefault(_settingsManager))
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
logoText = _tenantLogoManager.GetLogoText();
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.AuthorID, aid));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.AuthorName, aname));
|
2022-04-14 12:21:06 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.AuthorUrl, _commonLinkUtility.GetFullAbsolutePath(_commonLinkUtility.GetUserProfile(aid))));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.VirtualRootPath, _commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')));
|
2022-03-17 15:13:38 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.ProductID, product != null ? product.ID : Guid.Empty));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.ModuleID, module != null ? module.ID : Guid.Empty));
|
2022-04-14 12:21:06 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.ProductUrl, _commonLinkUtility.GetFullAbsolutePath(product != null ? product.StartURL : "~")));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.DateTime, _tenantUtil.DateTimeNow()));
|
2022-03-17 15:13:38 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.RecipientID, Context.SysRecipient));
|
2022-04-14 12:21:06 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.ProfileUrl, _commonLinkUtility.GetFullAbsolutePath(_commonLinkUtility.GetMyStaff())));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.RecipientSubscriptionConfigURL, _commonLinkUtility.GetUnsubscribe()));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.HelpLink, _commonLinkUtility.GetHelpLink(_settingsManager, _additionalWhiteLabelSettingsHelper, false)));
|
2022-03-17 15:13:38 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.LetterLogoText, logoText));
|
2022-04-14 12:21:06 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.MailWhiteLabelSettings, MailWhiteLabelSettings.Instance(_settingsManager)));
|
2022-03-17 15:13:38 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.SendFrom, tenant.Name));
|
2022-04-14 12:21:06 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.ImagePath, _studioNotifyHelper.GetNotificationImageUrl("").TrimEnd('/')));
|
2022-03-17 15:13:38 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
AddLetterLogo(request);
|
|
|
|
}
|
|
|
|
public void AfterTransferRequest(NotifyRequest request)
|
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
}
|
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
private void AddLetterLogo(NotifyRequest request)
|
2022-03-17 15:13:38 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
if (_tenantExtra.Enterprise || _coreBaseSettings.CustomMode)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
try
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
var logoData = _tenantLogoManager.GetMailLogoDataFromCache();
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
if (logoData == null)
|
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
var logoStream = _tenantLogoManager.GetWhitelabelMailLogo();
|
2022-03-17 15:13:38 +00:00
|
|
|
logoData = ReadStreamToByteArray(logoStream) ?? GetDefaultMailLogo();
|
2019-06-14 16:14:24 +00:00
|
|
|
|
|
|
|
if (logoData != null)
|
|
|
|
{
|
2022-04-14 12:21:06 +00:00
|
|
|
_tenantLogoManager.InsertMailLogoDataToCache(logoData);
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
|
|
|
|
if (logoData != null)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
var attachment = new NotifyMessageAttachment
|
|
|
|
{
|
|
|
|
FileName = "logo.png",
|
2022-05-13 19:14:00 +00:00
|
|
|
Content = logoData,
|
2022-03-17 15:13:38 +00:00
|
|
|
ContentId = MimeUtils.GenerateMessageId()
|
|
|
|
};
|
|
|
|
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.LetterLogo, "cid:" + attachment.ContentId));
|
|
|
|
request.Arguments.Add(new TagValue(CommonTags.EmbeddedAttachments, new[] { attachment }));
|
|
|
|
return;
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
|
|
|
}
|
2022-03-17 15:13:38 +00:00
|
|
|
catch (Exception error)
|
2019-06-14 16:14:24 +00:00
|
|
|
{
|
2022-05-13 14:48:49 +00:00
|
|
|
_log.ErrorAddLetterLogo(error);
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
var logoUrl = _commonLinkUtility.GetFullAbsolutePath(_tenantLogoManager.GetLogoDark(true));
|
2019-06-14 16:14:24 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
request.Arguments.Add(new TagValue(CommonTags.LetterLogo, logoUrl));
|
2020-08-24 18:41:06 +00:00
|
|
|
}
|
2020-07-30 13:33:54 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
private static byte[] ReadStreamToByteArray(Stream inputStream)
|
2020-08-24 18:41:06 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
if (inputStream == null)
|
2020-07-30 13:33:54 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
return null;
|
2020-07-30 13:33:54 +00:00
|
|
|
}
|
2020-08-31 08:18:07 +00:00
|
|
|
|
2022-03-17 15:13:38 +00:00
|
|
|
using (inputStream)
|
2020-08-31 08:18:07 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
using var memoryStream = new MemoryStream();
|
|
|
|
inputStream.CopyTo(memoryStream);
|
|
|
|
return memoryStream.ToArray();
|
2020-08-31 08:18:07 +00:00
|
|
|
}
|
2019-06-14 16:14:24 +00:00
|
|
|
}
|
2019-11-01 13:56:47 +00:00
|
|
|
|
2022-04-14 12:21:06 +00:00
|
|
|
private static byte[] GetDefaultMailLogo()
|
2019-11-01 13:56:47 +00:00
|
|
|
{
|
2022-03-17 15:13:38 +00:00
|
|
|
var filePath = CrossPlatform.PathCombine(AppDomain.CurrentDomain.BaseDirectory, "skins", "default", "images", "logo", "dark_general.png");
|
|
|
|
|
|
|
|
return File.Exists(filePath) ? File.ReadAllBytes(filePath) : null;
|
|
|
|
}
|
|
|
|
}
|