Browse Source

Merge branch 'dev' into studio-dev

pull/10363/head
Yunus Emre Kalkan 5 years ago
parent
commit
7f2e89c047
  1. 46
      docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/SweetAlert2/Sweetalert2ScriptContributor.cs
  3. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs
  4. 24
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js
  5. 4
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs
  6. 8
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  7. 10
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs
  8. 4
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
  9. 4
      framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs
  10. 8
      framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs
  11. 20
      framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithSoftDelete.cs
  12. 8
      framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs
  13. 22
      framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs
  14. 2
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile
  15. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/_ViewStart.cshtml
  16. 25
      modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker.cs
  17. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs
  18. 62
      modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs
  19. 22
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailingPageContributor.cs
  20. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json
  21. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json
  22. 13
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs
  23. 2
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs
  24. 10
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs
  25. 22
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs
  26. 5
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html
  27. 2
      npm/packs/aspnetcore.mvc.ui.theme.shared/package.json
  28. 5
      npm/packs/sweetalert/abp.resourcemapping.js
  29. 5
      npm/packs/sweetalert2/abp.resourcemapping.js
  30. 4
      npm/packs/sweetalert2/package.json
  31. 3123
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.all.js
  32. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  33. 1319
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.css
  34. 3121
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.js
  35. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.min.css
  36. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.min.js
  37. 3123
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.all.js
  38. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  39. 1319
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.css
  40. 3121
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.js
  41. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.min.css
  42. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.min.js
  43. 3123
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.all.js
  44. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  45. 1319
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.css
  46. 3121
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.js
  47. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.min.css
  48. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.min.js
  49. 3123
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js
  50. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  51. 1319
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css
  52. 3121
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js
  53. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css
  54. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js
  55. 3123
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js
  56. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  57. 1319
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css
  58. 3121
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js
  59. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css
  60. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js
  61. 3123
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.all.js
  62. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  63. 1319
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.css
  64. 3121
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.js
  65. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.min.css
  66. 1
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.min.js
  67. 3123
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js
  68. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  69. 1319
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.css
  70. 3121
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.js
  71. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css
  72. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js
  73. 3123
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js
  74. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  75. 1319
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css
  76. 3121
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js
  77. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css
  78. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js
  79. 3123
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js
  80. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  81. 1319
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css
  82. 3121
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js
  83. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css
  84. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js
  85. 3123
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.js
  86. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.min.js
  87. 1319
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.css
  88. 3121
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.js
  89. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.css
  90. 1
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.js
  91. 7
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameRemoteServiceConsts.cs
  92. 4
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs
  93. 2
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Samples/SampleController.cs

46
docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md

@ -194,16 +194,11 @@ We implemented token generation infrastructure, now it's time validate the token
```csharp
using System;
using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Identity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Users;
using Volo.Abp.Identity.AspNetCore;
namespace PasswordlessAuthentication.Web.Controllers
{
@ -211,9 +206,12 @@ namespace PasswordlessAuthentication.Web.Controllers
{
protected IdentityUserManager UserManager { get; }
public PasswordlessController(IdentityUserManager userManager)
protected AbpSignInManager SignInManager { get; }
public PasswordlessController(IdentityUserManager userManager, AbpSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
public virtual async Task<IActionResult> Login(string token, string userId)
@ -228,45 +226,15 @@ namespace PasswordlessAuthentication.Web.Controllers
await UserManager.UpdateSecurityStampAsync(user);
var roles = await UserManager.GetRolesAsync(user);
var principal = new ClaimsPrincipal(
new ClaimsIdentity(CreateClaims(user, roles), IdentityConstants.ApplicationScheme)
);
await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme, principal);
await SignInManager.SignInAsync(user, isPersistent: false);
return Redirect("/");
}
private static IEnumerable<Claim> CreateClaims(IUser user, IEnumerable<string> roles)
{
var claims = new List<Claim>
{
new Claim("sub", user.Id.ToString()),
new Claim(AbpClaimTypes.UserId, user.Id.ToString()),
new Claim(AbpClaimTypes.Email, user.Email),
new Claim(AbpClaimTypes.UserName, user.UserName),
new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString().ToLower()),
};
if (!string.IsNullOrWhiteSpace(user.PhoneNumber))
{
claims.Add(new Claim(AbpClaimTypes.PhoneNumber, user.PhoneNumber));
}
foreach (var role in roles)
{
claims.Add(new Claim(AbpClaimTypes.Role, role));
}
return claims;
}
}
}
```
We created an endpoint for `/Passwordless/Login` that gets the token and the user Id. In this action, we find the user via repository and validate the token via `UserManager.VerifyUserTokenAsync()` method. If it's valid, we create claims of the user then call `HttpContext.SignInAsync` to be able to create an encrypted cookie and add it to the current response. Finally we redirect the page to the root URL.
We created an endpoint for `/Passwordless/Login` that gets the token and the user Id. In this action, we find the user via repository and validate the token via `UserManager.VerifyUserTokenAsync()` method. If it's valid, we call `SignInManager.SignInAsync` to be able to create an encrypted cookie and add it to the current response. Finally we redirect the page to the root URL.
That's all! We created a passwordless login with 7 steps.

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/SweetAlert/SweetalertScriptContributor.cs → framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/SweetAlert2/Sweetalert2ScriptContributor.cs

@ -3,14 +3,14 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Core;
using Volo.Abp.Modularity;
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.SweetAlert
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.SweetAlert2
{
[DependsOn(typeof(CoreScriptContributor))]
public class SweetalertScriptContributor : BundleContributor
public class Sweetalert2ScriptContributor : BundleContributor
{
public override void ConfigureBundle(BundleConfigurationContext context)
{
context.Files.AddIfNotContains("/libs/sweetalert/sweetalert.min.js");
context.Files.AddIfNotContains("/libs/sweetalert2/sweetalert2.all.min.js");
}
}
}

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs

@ -9,7 +9,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Packages.Lodash;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Luxon;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.MalihuCustomScrollbar;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Select2;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.SweetAlert;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.SweetAlert2;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Toastr;
using Volo.Abp.Modularity;
@ -24,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling
typeof(JQueryFormScriptContributor),
typeof(Select2ScriptContributor),
typeof(DatatablesNetBs4ScriptContributor),
typeof(SweetalertScriptContributor),
typeof(Sweetalert2ScriptContributor),
typeof(ToastrScriptBundleContributor),
typeof(MalihuCustomScrollbarPluginScriptBundleContributor),
typeof(LuxonScriptContributor),
@ -44,9 +44,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling
"/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert/abp-sweetalert.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js",
"/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js"
});
}
}
}
}

24
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert/abp-sweetalert.js → framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js

@ -1,6 +1,6 @@
var abp = abp || {};
(function ($) {
if (!sweetAlert || !$) {
if (!Swal || !$) {
return;
}
@ -27,7 +27,8 @@
confirm: {
icon: 'warning',
title: 'Are you sure?',
buttons: ['Cancel', 'Yes']
showCancelButton: true,
reverseButtons: true
}
}
};
@ -51,7 +52,7 @@
);
return $.Deferred(function ($dfd) {
sweetAlert(opts).then(function () {
Swal.fire(opts).then(function () {
$dfd.resolve();
});
});
@ -73,7 +74,7 @@
return showMessage('error', message, title);
};
abp.message.confirm = function (message, titleOrCallback, callback, closeOnEsc) {
abp.message.confirm = function (message, titleOrCallback, callback) {
var userOpts = {
text: message
@ -86,8 +87,6 @@
userOpts.title = titleOrCallback;
};
userOpts.closeOnEsc = closeOnEsc;
var opts = $.extend(
{},
abp.libs.sweetAlert.config['default'],
@ -96,10 +95,10 @@
);
return $.Deferred(function ($dfd) {
sweetAlert(opts).then(function (isConfirmed) {
callback && callback(isConfirmed);
$dfd.resolve(isConfirmed);
});
Swal.fire(opts).then(result => {
callback && callback(result.value);
$dfd.resolve(result.value);
})
});
};
@ -107,7 +106,8 @@
var l = abp.localization.getResource('AbpUi');
abp.libs.sweetAlert.config.confirm.title = l('AreYouSure');
abp.libs.sweetAlert.config.confirm.buttons = [l('Cancel'), l('Yes')];
abp.libs.sweetAlert.config.confirm.showCancelButton = true;
abp.libs.sweetAlert.config.confirm.reverseButtons = true;
});
})(jQuery);
})(jQuery);

4
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs

@ -30,10 +30,6 @@ namespace Volo.Abp.AspNetCore.Mvc.Json
options.JsonSerializerOptions.Converters.Add(new ObjectToInferredTypesConverter());
options.JsonSerializerOptions.Converters.Add(new AbpHasExtraPropertiesJsonConverterFactory());
// Remove after this PR.
// https://github.com/dotnet/runtime/pull/57525
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString;
}
}
}

8
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -155,6 +155,10 @@ namespace Volo.Abp.EntityFrameworkCore
{
try
{
ApplyAbpConcepts();
var eventReport = CreateEventReport();
var auditLog = AuditingManager?.Current?.Log;
List<EntityChangeInfo> entityChangeList = null;
if (auditLog != null)
@ -162,10 +166,6 @@ namespace Volo.Abp.EntityFrameworkCore
entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList());
}
ApplyAbpConcepts();
var eventReport = CreateEventReport();
var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
PublishEntityEvents(eventReport);

10
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs

@ -166,7 +166,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory
foreach (var property in properties)
{
var propertyEntry = entityEntry.Property(property.Name);
if (ShouldSavePropertyHistory(propertyEntry, isCreated || isDeleted))
if (ShouldSavePropertyHistory(propertyEntry, isCreated || isDeleted) && !IsSoftDeleted(entityEntry))
{
propertyChanges.Add(new EntityPropertyChangeInfo
{
@ -188,11 +188,11 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory
protected virtual bool IsDeleted(EntityEntry entityEntry)
{
if (entityEntry.State == EntityState.Deleted)
{
return true;
}
return entityEntry.State == EntityState.Deleted || IsSoftDeleted(entityEntry);
}
protected virtual bool IsSoftDeleted(EntityEntry entityEntry)
{
var entity = entityEntry.Entity;
return entity is ISoftDelete && entity.As<ISoftDelete>().IsDeleted;
}

4
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs

@ -51,10 +51,6 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
var deserializeOptions = new JsonSerializerOptions();
deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter());
// Remove after this PR.
// https://github.com/dotnet/runtime/pull/57525
deserializeOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString;
var dictionary = JsonSerializer.Deserialize<ExtraPropertyDictionary>(extraPropertiesAsJson, deserializeOptions) ??
new ExtraPropertyDictionary();

4
framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs

@ -29,10 +29,6 @@ namespace Volo.Abp.Json.SystemTextJson
// If the user hasn't explicitly configured the encoder, use the less strict encoder that does not encode all non-ASCII characters.
options.JsonSerializerOptions.Encoder ??= JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
// Remove after this PR.
// https://github.com/dotnet/runtime/pull/57525
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString;
}
}
}

8
framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs

@ -43,6 +43,12 @@ namespace Volo.Abp.Auditing
"AppEntityWithSelector",
type => type == typeof(AppEntityWithSelector))
);
options.EntityHistorySelectors.Add(
new NamedTypeSelector(
"AppEntityWithSoftDelete",
type => type == typeof(AppEntityWithSoftDelete))
);
});
context.Services.AddType<Auditing_Tests.MyAuditedObject1>();
@ -62,4 +68,4 @@ namespace Volo.Abp.Auditing
return connection;
}
}
}
}

20
framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithSoftDelete.cs

@ -0,0 +1,20 @@
using System;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Auditing.App.Entities
{
public class AppEntityWithSoftDelete : AggregateRoot<Guid>, IHasDeletionTime
{
public AppEntityWithSoftDelete(Guid id, string name)
: base(id)
{
Name = name;
}
public string Name { get; set; }
public bool IsDeleted { get; set; }
public DateTime? DeletionTime { get; set; }
}
}

8
framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs

@ -17,15 +17,17 @@ namespace Volo.Abp.Auditing.App.EntityFrameworkCore
public DbSet<AppEntityWithPropertyHasAudited> AppEntityWithPropertyHasAudited { get; set; }
public DbSet<AppEntityWithSelector> AppEntityWithSelector { get; set; }
public DbSet<AppFullAuditedEntityWithAudited> AppFullAuditedEntityWithAudited { get; set; }
public DbSet<AppEntityWithAuditedAndHasCustomAuditingProperties> AppEntityWithAuditedAndHasCustomAuditingProperties { get; set; }
public DbSet<AppEntityWithSoftDelete> AppEntityWithSoftDelete { get; set; }
public AbpAuditingTestDbContext(DbContextOptions<AbpAuditingTestDbContext> options)
: base(options)
{
}
}
}
}

22
framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs

@ -314,5 +314,27 @@ namespace Volo.Abp.Auditing
&& x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithAudited.Name)));
#pragma warning restore 4014
}
[Fact]
public virtual async Task Should_Write_AuditLog_For_Soft_Deleted_Entity()
{
var entity = new AppEntityWithSoftDelete(Guid.NewGuid(), "test name");
var repository = ServiceProvider.GetRequiredService<IBasicRepository<AppEntityWithSoftDelete, Guid>>();
await repository.InsertAsync(entity);
using (var scope = _auditingManager.BeginScope())
{
await repository.DeleteAsync(entity.Id);
await scope.SaveAsync();
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1 &&
x.EntityChanges[0].ChangeType == EntityChangeType.Deleted &&
x.EntityChanges[0].PropertyChanges.Count == 0));
#pragma warning restore 4014
}
}
}

2
modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile

@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
FROM mcr.microsoft.com/dotnet/aspnet:6.0.0-rc.1-bullseye-slim AS base
WORKDIR /app
EXPOSE 80
COPY bin/Release/publish .

5
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/_ViewStart.cshtml

@ -0,0 +1,5 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Theming
@inject IThemeManager ThemeManager
@{
Layout = ThemeManager.CurrentTheme.GetPublicLayout();
}

25
modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker.cs

@ -0,0 +1,25 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.SettingManagement
{
public class AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker : ISimpleStateChecker<PermissionDefinition>
{
public async Task<bool> IsEnabledAsync(SimpleStateCheckerContext<PermissionDefinition> context)
{
var currentTenant = context.ServiceProvider.GetRequiredService<ICurrentTenant>();
if (!currentTenant.IsAvailable)
{
return true;
}
var featureChecker = context.ServiceProvider.GetRequiredService<IFeatureChecker>();
return await featureChecker.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings);
}
}
}

6
modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs

@ -1,6 +1,5 @@
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SettingManagement.Localization;
namespace Volo.Abp.SettingManagement
@ -10,7 +9,10 @@ namespace Volo.Abp.SettingManagement
public override void Define(IPermissionDefinitionContext context)
{
var moduleGroup = context.AddGroup(SettingManagementPermissions.GroupName, L("Permission:SettingManagement"));
moduleGroup.AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing"), multiTenancySide: MultiTenancySides.Host);
moduleGroup
.AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing"))
.StateCheckers.Add(new AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker());
}
private static LocalizableString L(string name)

62
modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs

@ -2,6 +2,8 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Emailing;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Features;
namespace Volo.Abp.SettingManagement
{
@ -17,30 +19,52 @@ namespace Volo.Abp.SettingManagement
public virtual async Task<EmailSettingsDto> GetAsync()
{
return new EmailSettingsDto {
SmtpHost = await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.Host),
SmtpPort = Convert.ToInt32(await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.Port)),
SmtpUserName = await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.UserName),
SmtpPassword = await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.Password),
SmtpDomain = await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.Domain),
SmtpEnableSsl = Convert.ToBoolean(await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.EnableSsl)),
SmtpUseDefaultCredentials = Convert.ToBoolean(await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.Smtp.UseDefaultCredentials)),
DefaultFromAddress = await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.DefaultFromAddress),
DefaultFromDisplayName = await SettingManager.GetOrNullGlobalAsync(EmailSettingNames.DefaultFromDisplayName),
await CheckFeatureAsync();
var settingsDto = new EmailSettingsDto {
SmtpHost = await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.Host),
SmtpPort = Convert.ToInt32(await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.Port)),
SmtpUserName = await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.UserName),
SmtpPassword = await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.Password),
SmtpDomain = await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.Domain),
SmtpEnableSsl = Convert.ToBoolean(await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.EnableSsl)),
SmtpUseDefaultCredentials = Convert.ToBoolean(await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials)),
DefaultFromAddress = await SettingProvider.GetOrNullAsync(EmailSettingNames.DefaultFromAddress),
DefaultFromDisplayName = await SettingProvider.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName),
};
if (CurrentTenant.IsAvailable)
{
settingsDto.SmtpHost = await SettingManager.GetOrNullForTenantAsync(EmailSettingNames.Smtp.Host, CurrentTenant.GetId(), false);
settingsDto.SmtpUserName = await SettingManager.GetOrNullForTenantAsync(EmailSettingNames.Smtp.UserName, CurrentTenant.GetId(), false);
settingsDto.SmtpPassword = await SettingManager.GetOrNullForTenantAsync(EmailSettingNames.Smtp.Password, CurrentTenant.GetId(), false);
settingsDto.SmtpDomain = await SettingManager.GetOrNullForTenantAsync(EmailSettingNames.Smtp.Domain, CurrentTenant.GetId(), false);
}
return settingsDto;
}
public virtual async Task UpdateAsync(UpdateEmailSettingsDto input)
{
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.Host, input.SmtpHost);
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.Port, input.SmtpPort.ToString());
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.UserName, input.SmtpUserName);
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.Password, input.SmtpPassword);
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.Domain, input.SmtpDomain);
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.EnableSsl, input.SmtpEnableSsl.ToString());
await SettingManager.SetGlobalAsync(EmailSettingNames.Smtp.UseDefaultCredentials, input.SmtpUseDefaultCredentials.ToString().ToLowerInvariant());
await SettingManager.SetGlobalAsync(EmailSettingNames.DefaultFromAddress, input.DefaultFromAddress);
await SettingManager.SetGlobalAsync(EmailSettingNames.DefaultFromDisplayName, input.DefaultFromDisplayName);
await CheckFeatureAsync();
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.Host, input.SmtpHost);
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.Port, input.SmtpPort.ToString());
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.UserName, input.SmtpUserName);
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.Password, input.SmtpPassword);
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.Domain, input.SmtpDomain);
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.EnableSsl, input.SmtpEnableSsl.ToString());
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.UseDefaultCredentials, input.SmtpUseDefaultCredentials.ToString().ToLowerInvariant());
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.DefaultFromAddress, input.DefaultFromAddress);
await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.DefaultFromDisplayName, input.DefaultFromDisplayName);
}
private async Task CheckFeatureAsync()
{
if (CurrentTenant.IsAvailable)
{
await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings);
}
}
}
}

22
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailingPageContributor.cs

@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup;
using Volo.Abp.SettingManagement.Localization;
@ -33,9 +35,29 @@ namespace Volo.Abp.SettingManagement.Blazor.Settings
private async Task<bool> CheckPermissionsInternalAsync(SettingComponentCreationContext context)
{
if (!await CheckFeatureAsync(context))
{
return false;
}
var authorizationService = context.ServiceProvider.GetRequiredService<IAuthorizationService>();
return await authorizationService.IsGrantedAsync(SettingManagementPermissions.Emailing);
}
private async Task<bool> CheckFeatureAsync(SettingComponentCreationContext context)
{
var currentTenant = context.ServiceProvider.GetRequiredService<ICurrentTenant>();
if (!currentTenant.IsAvailable)
{
return true;
}
var featureCheck = context.ServiceProvider.GetRequiredService<IFeatureChecker>();
return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings);
}
}
}

4
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json

@ -17,6 +17,8 @@
"DefaultFromDisplayName": "Default from display name",
"Feature:SettingManagementGroup": "Setting Management",
"Feature:SettingManagementEnable": "Enable setting management",
"Feature:SettingManagementEnableDescription": "Enable setting management system in the application."
"Feature:SettingManagementEnableDescription": "Enable setting management system in the application.",
"Feature:AllowTenantsToChangeEmailSettings": "Allow tenants to change email settings.",
"Feature:AllowTenantsToChangeEmailSettingsDescription": "Allow tenants to change email settings."
}
}

4
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json

@ -17,6 +17,8 @@
"DefaultFromDisplayName": "默认显示名称",
"Feature:SettingManagementGroup": "设置管理",
"Feature:SettingManagementEnable": "启用设置管理",
"Feature:SettingManagementEnableDescription": "在应用程序中启用设置管理系统."
"Feature:SettingManagementEnableDescription": "在应用程序中启用设置管理系统.",
"Feature:AllowTenantsToChangeEmailSettings": "允许租户更改邮件设置.",
"Feature:AllowTenantsToChangeEmailSettingsDescription": "允许租户更改邮件设置."
}
}

13
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs

@ -5,18 +5,27 @@ using Volo.Abp.Validation.StringValues;
namespace Volo.Abp.SettingManagement
{
public class SettingManagementFeatureDefinitionProvider: FeatureDefinitionProvider
public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvider
{
public override void Define(IFeatureDefinitionContext context)
{
var group = context.AddGroup(SettingManagementFeatures.GroupName,
L("Feature:SettingManagementGroup"));
group.AddFeature(SettingManagementFeatures.Enable,
var settingEnableFeature = group.AddFeature(
SettingManagementFeatures.Enable,
"true",
L("Feature:SettingManagementEnable"),
L("Feature:SettingManagementEnableDescription"),
new ToggleStringValueType());
settingEnableFeature.CreateChild(
SettingManagementFeatures.AllowTenantsToChangeEmailSettings,
"false",
L("Feature:AllowTenantsToChangeEmailSettings"),
L("AllowTenantsToChangeEmailSettingsDescription"),
new ToggleStringValueType(),
isAvailableToHost: false);
}
private static LocalizableString L(string name)

2
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs

@ -5,5 +5,7 @@
public const string GroupName = "SettingManagement";
public const string Enable = GroupName + ".Enable";
public const string AllowTenantsToChangeEmailSettings = GroupName + ".AllowTenantsToChangeEmailSettings";
}
}

10
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs

@ -37,5 +37,15 @@ namespace Volo.Abp.SettingManagement
{
return settingManager.SetAsync(name, value, TenantSettingValueProvider.ProviderName, null, forceToSet);
}
public static Task SetForTenantOrGlobalAsync(this ISettingManager settingManager, Guid? tenantId, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false)
{
if (tenantId.HasValue)
{
return settingManager.SetForTenantAsync(tenantId.Value, name, value, forceToSet);
}
return settingManager.SetGlobalAsync(name, value);
}
}
}

22
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs

@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SettingManagement.Localization;
using Volo.Abp.SettingManagement.Web.Pages.SettingManagement;
using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup;
@ -34,9 +36,29 @@ namespace Volo.Abp.SettingManagement.Web.Settings
private async Task<bool> CheckPermissionsInternalAsync(SettingPageCreationContext context)
{
if (!await CheckFeatureAsync(context))
{
return false;
}
var authorizationService = context.ServiceProvider.GetRequiredService<IAuthorizationService>();
return await authorizationService.IsGrantedAsync(SettingManagementPermissions.Emailing);
}
private async Task<bool> CheckFeatureAsync(SettingPageCreationContext context)
{
var currentTenant = context.ServiceProvider.GetRequiredService<ICurrentTenant>();
if (!currentTenant.IsAvailable)
{
return true;
}
var featureCheck = context.ServiceProvider.GetRequiredService<IFeatureChecker>();
return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings);
}
}
}

5
npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html

@ -34,9 +34,8 @@
<ng-template #abpHeader>
<h3>
{{
selected?.id
? 'AbpTenantManagement::Edit'
: ('AbpTenantManagement::NewTenant' | abpLocalization)
(selected?.id ? 'AbpTenantManagement::Edit' : 'AbpTenantManagement::NewTenant')
| abpLocalization
}}
</h3>
</ng-template>

2
npm/packs/aspnetcore.mvc.ui.theme.shared/package.json

@ -16,7 +16,7 @@
"@abp/luxon": "~4.4.2",
"@abp/malihu-custom-scrollbar-plugin": "~4.4.2",
"@abp/select2": "~4.4.2",
"@abp/sweetalert": "~4.4.2",
"@abp/sweetalert2": "~4.4.2",
"@abp/timeago": "~4.4.2",
"@abp/toastr": "~4.4.2"
},

5
npm/packs/sweetalert/abp.resourcemapping.js

@ -1,5 +0,0 @@
module.exports = {
mappings: {
"@node_modules/sweetalert/dist/*.*": "@libs/sweetalert/"
}
}

5
npm/packs/sweetalert2/abp.resourcemapping.js

@ -0,0 +1,5 @@
module.exports = {
mappings: {
"@node_modules/sweetalert2/dist/*.*": "@libs/sweetalert2/"
}
}

4
npm/packs/sweetalert/package.json → npm/packs/sweetalert2/package.json

@ -1,12 +1,12 @@
{
"version": "4.4.2",
"name": "@abp/sweetalert",
"name": "@abp/sweetalert2",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@abp/core": "~4.4.2",
"sweetalert": "^2.1.2"
"sweetalert2": "^11.0.18"
},
"gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431"
}

3123
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

3123
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.js

File diff suppressed because one or more lines are too long

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.all.min.js

File diff suppressed because one or more lines are too long

1319
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.css

File diff suppressed because it is too large

3121
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.js

File diff suppressed because it is too large

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.css

File diff suppressed because one or more lines are too long

1
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/sweetalert2/sweetalert2.min.js

File diff suppressed because one or more lines are too long

7
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameRemoteServiceConsts.cs

@ -0,0 +1,7 @@
namespace MyCompanyName.MyProjectName
{
public class MyProjectNameRemoteServiceConsts
{
public const string RemoteServiceName = "MyProjectName";
}
}

4
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs

@ -10,13 +10,11 @@ namespace MyCompanyName.MyProjectName
typeof(AbpHttpClientModule))]
public class MyProjectNameHttpApiClientModule : AbpModule
{
public const string RemoteServiceName = "MyProjectName";
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddHttpClientProxies(
typeof(MyProjectNameApplicationContractsModule).Assembly,
RemoteServiceName
MyProjectNameRemoteServiceConsts.RemoteServiceName
);
Configure<AbpVirtualFileSystemOptions>(options =>

2
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Samples/SampleController.cs

@ -5,7 +5,7 @@ using Volo.Abp;
namespace MyCompanyName.MyProjectName.Samples
{
[RemoteService]
[RemoteService(Name = MyProjectNameRemoteServiceConsts.RemoteServiceName)]
[Route("api/MyProjectName/sample")]
public class SampleController : MyProjectNameController, ISampleAppService
{

Loading…
Cancel
Save