diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index ea5237bc29..2544e50726 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -83,6 +83,7 @@ "LatestBlogPost": "Latest Blog Post", "Edit": "Edit", "ProfileImageChange": "Change the profile image", - "BlogItemErrorMessage": "Could not get the latest blog post details from ABP." + "BlogItemErrorMessage": "Could not get the latest blog post details from ABP.", + "PlannedReleaseDate": "Planned release date" } } diff --git a/docs/en/Best-Practices/Application-Services.md b/docs/en/Best-Practices/Application-Services.md index 3332ce08ea..ff8afe81d2 100644 --- a/docs/en/Best-Practices/Application-Services.md +++ b/docs/en/Best-Practices/Application-Services.md @@ -213,6 +213,11 @@ This method votes a question and returns the current score of the question. * **Do** always get all the related entities from repositories to perform the operations on them. * **Do** call repository's Update/UpdateAsync method after updating an entity. Because, not all database APIs support change tracking & auto update. +#### Handle files + +* **Do not** use any web components like `IFormFile` or `Stream` in the application services. If you want to serve a file you can use `byte[]`. +* **Do** use a `Controller` to handle file uploading then pass the `byte[]` of the file to the application service method. + #### Using Other Application Services * **Do not** use other application services of the same module/application. Instead; diff --git a/docs/en/CSRF-Anti-Forgery.md b/docs/en/CSRF-Anti-Forgery.md new file mode 100644 index 0000000000..ad838e3548 --- /dev/null +++ b/docs/en/CSRF-Anti-Forgery.md @@ -0,0 +1,119 @@ +# CSRF/XSRF & Anti Forgery System + +"*Cross-Site Request Forgery (CSRF) is a type of attack that occurs when a malicious web site, email, blog, instant message, or program causes a user’s web browser to perform an unwanted action on a trusted site for which the user is currently authenticated*" ([OWASP](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)). + +**ABP Framework completely automates CSRF preventing** and works out of the box without any configuration. Read this documentation only if you want to understand it better or need to customize. + +## The Problem + +ASP.NET Core [provides infrastructure](https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery) to prevent CSRF attacks by providing a system to **generate** and **validate antiforgery tokens**. However, the standard implementation has a few drawbacks; + +Antiforgery token validation is only **enabled for razor pages by default** and not enabled for **HTTP APIs**. You need to enable it yourself for the Controllers. You can use the `[ValidateAntiForgeryToken]` attribute for a specific API Controller/Action or the `[AutoValidateAntiforgeryToken]` attribute to prevent attacks globally. + +Once you enable it; + +* You need to manually add an HTTP header, named `RequestVerificationToken` to every **AJAX request** made in your application. You should care about obtaining the token, saving in the client side and adding to the HTTP header on every HTTP request. +* All your clients, including **non-browser clients**, should care about obtaining and sending the antiforgery token in every request. In fact, non-browser clients has no CSRF risk and should not care about this. + +Especially, the second point is a pain for your clients and unnecessarily consumes your server resources. + +> You can read more about the ASP.NET Core antiforgery system in its own [documentation](https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery). + +## The Solution + +ABP Framework provides `[AbpValidateAntiForgeryToken]` and `[AbpAutoValidateAntiforgeryToken]` attributes, just like the attributes explained above. `[AbpAutoValidateAntiforgeryToken]` is already added to the global filters, so you should do nothing to enable it for your application. + +ABP Framework also automates the following infrastructure; + +* Server side sets a **special cookie**, named `XSRF-TOKEN` by default, that is used make the antiforgery token value available to the browser. This is **done automatically** (by the [application configuration](Application-Configuration.md) endpoint). Nothing to do in the client side. +* In the client side, it reads the token from the cookie and sends it in the **HTTP header** (named `RequestVerificationToken` by default). This is implemented for all the supported UI types. +* Server side validates the antiforgery token **only for same and cross site requests** made by the browser. It bypasses the validation for non-browser clients. + +That's all. The systems works smoothly. + +## Configuration / Customization + +### AbpAntiForgeryOptions + +`AbpAntiForgeryOptions` is the main [options class](Options.md) to configure the ABP Antiforgery system. It has the following properties; + +* `TokenCookie`: Can be used to configure the cookie details. This cookie is used to store the antiforgery token value in the client side, so clients can read it and sends the value as the HTTP header. Default cookie name is `XSRF-TOKEN`, expiration time is 10 years (yes, ten years! It should be a value longer than the authentication cookie max life time, for the security). +* `AuthCookieSchemaName`: The name of the authentication cookie used by your application. Default value is `Identity.Application` (which becomes `AspNetCore.Identity.Application` on runtime). The default value properly works with the ABP startup templates. **If you change the authentication cookie name, you also must change this.** +* `AutoValidate`: The single point to enable/disable the ABP automatic antiforgery validation system. Default value is `true`. +* `AutoValidateFilter`: A predicate that gets a type and returns a boolean. ABP uses this predicate to check a controller type. If it returns false for a controller type, the controller is excluded from the automatic antiforgery token validation. +* `AutoValidateIgnoredHttpMethods`: A list of HTTP Methods to ignore on automatic antiforgery validation. Default value: "GET", "HEAD", "TRACE", "OPTIONS". These HTTP Methods are safe to skip antiforgery validation since they don't change the application state. + +If you need to change these options, do it in the `ConfigureServices` method of your [module](Module-Development-Basics.md). + +**Example: Configuring the AbpAntiForgeryOptions** + +```csharp +Configure(options => +{ + options.TokenCookie.Expiration = TimeSpan.FromDays(365); + options.AutoValidateIgnoredHttpMethods.Remove("GET"); + options.AutoValidateFilter = + type => !type.Namespace.StartsWith("MyProject.MyIgnoredNamespace"); +}); +``` + +This configuration; + +* Sets the antiforgery token expiration time to ~1 year. +* Enables antiforgery token validation for GET requests too. +* Ignores the controller types in the specified namespace. + +### AntiforgeryOptions + +`AntiforgeryOptions` is the standard [options class](Options.md) of the ASP.NET Core. **You can find all the information about this class in its [own documentation](https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery)**. + +`HeaderName` option is especially important for the ABP Framework point of view. Default value of this value is `RequestVerificationToken` and the clients uses this name while sending the token value in the header. So, if you change this option, you should also arrange your clients to align the change. If you don't have a good reason, leave it as default. + +### AbpValidateAntiForgeryToken Attribute + +If you disable the automatic validation or want to perform the validation for an endpoint that is not validated by default (for example, an endpoint with HTTP GET Method), you can use the `[AbpValidateAntiForgeryToken]` attribute for a **controller type or method** (action). + +**Example: Add `[AbpValidateAntiForgeryToken]` to a HTTP GET method** + +```csharp +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.AntiForgery; + +namespace MyCompanyName.MyProjectName.Controllers +{ + [Route("api/products")] + public class ProductController : AbpController + { + [HttpGet] + [AbpValidateAntiForgeryToken] + public async Task GetAsync() + { + //TODO: ... + } + } +} +``` + +### Angular UI + +Angular supports CSRF Token out of box, but the token header name is `X-XSRF-TOKEN`. Since ABP Framework follows the ASP.NET Core conventions, it changes this value to `RequestVerificationToken` in the core package. + +You don't need to make anything unless you need to change the `AntiforgeryOptions.HeaderName` as explained before. If you change it, remember to change the header name for the Angular application too. To do that, add an import declaration for the `HttpClientXsrfModule` into your root module. + +**Example: Change the header name to *MyCustomHeaderName*** + +```typescript +@NgModule({ + // ... + imports: [ + //... + HttpClientXsrfModule.withOptions({ + cookieName: 'XSRF-TOKEN', + headerName: 'MyCustomHeaderName' + }) + ], +}) +export class AppModule {} +``` diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md new file mode 100644 index 0000000000..3e8a3e9da2 --- /dev/null +++ b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md @@ -0,0 +1,160 @@ +# How to Add Custom Properties to the User Entity + +## Introduction + +In this step-by-step article, I will explain how you can customize the user entity class, which is available in every web application you create using the ABP framework, according to your needs. When you read this article, you will learn how to override the services of built-in modules, extend the entities, extend data transfer objects and customize the user interface in the applications you develop using the ABP framework. + +You can see the screenshots below which we will reach at the end of the article. + +![custom-identity-user-list](./custom-identity-user-list.png) + +![new-user](./new-user.png) + +## Preparing the Project + +### Startup template and the initial run + +Abp Framework offers startup templates to get into the work faster. We can create a new startup template using Abp CLI: + +`abp new CustomizeUserDemo` + +> In this article, I will go through the MVC application, but it will work also in the [Angular](https://docs.abp.io/en/abp/latest/Getting-Started?UI=NG&DB=EF&Tiered=No) application. + +After the download is finished, we can run **CustomizeUserDemo.DbMigrator** project to create the database migrations and seed the initial data (admin user, role, etc). Then we can run `CustomizeUserDemo.Web` to see that our application is working. + +> Default admin username is **admin** and password is **1q2w3E\*** + +![initial-project](./initial-project.png) + +In this article, we will go through a scenario together and find the solutions to our questions through this scenario. However, since the scenario is not a real-life scenario, it may be strange, please don't get too about this issue :) + +## Step-1 + +Add two new properties to the `AppUser` in the Users folder of the **CustomizeUserDemo.Domain** project as follows: + +```csharp +public string Title { get; protected set; } + +public int Reputation { get; protected set; } +``` + +## Step-2 + +Create the Users folder in the **CustomizeUserDemo.Domain.Shared** project, create the class `UserConsts` inside the folder and update the class you created as below: + +```csharp +public static class UserConsts +{ + public const string TitlePropertyName = "Title"; + + public const string ReputationPropertyName = "Reputation"; + + public const int MaxTitleLength = 64; + + public const double MaxReputationValue = 1_000; + + public const double MinReputationValue = 1; +} +``` + +## Step-3 + +Update the `CustomizeUserDemoEfCoreEntityExtensionMappings` class in the **CustomizeUserDemo.EntityFramework** project in the EntityFrameworkCore folder as below: + +```csharp +public static class CustomizeUserDemoEfCoreEntityExtensionMappings +{ + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + CustomizeUserDemoGlobalFeatureConfigurator.Configure(); + CustomizeUserDemoModuleExtensionConfigurator.Configure(); + + OneTimeRunner.Run(() => + { + ObjectExtensionManager.Instance + .MapEfCoreProperty( + nameof(AppUser.Title), + (entityBuilder, propertyBuilder) => + { + propertyBuilder.IsRequired(); + propertyBuilder.HasMaxLength(UserConsts.MaxTitleLength); + } + ).MapEfCoreProperty( + nameof(AppUser.Reputation), + (entityBuilder, propertyBuilder) => + { + propertyBuilder.HasDefaultValue(UserConsts.MinReputationValue); + } + ); + }); + } +} +``` + +This class can be used to map these extra properties to table fields in the database. Please read [this](https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities) article to improve your understanding of what we are doing. + +So far, we have added our extra features to the `User` entity and matched these features with the `ef core`. + +Now we need to add migration to see what has changed in our database. This for, open the Package Manager Console (PMC) under the menu Tools > NuGet Package Manager. + +![nuget-package-manager](./nuget-package-manager.png) + +Select the **CustomizeUserDemo.EntityFramework.DbMigrations** as the **default project** and execute the following command: + +```bash +Add-Migration "Updated-User-Entity" +``` + +![added-new-migration](./added-new-migration.png) + +This will create a new migration class inside the `Migrations` folder of the **CustomizeUserDemo.EntityFrameworkCore.DbMigrations** project. + +> If you are using another IDE than the Visual Studio, you can use `dotnet-ef` tool as [documented here](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli#create-a-migration). + +Finally, run the **CustomizeUserDemo.DbMigrator** project to update the database. + +When we updated the database, you can see that the `Title` and `Reputation` columns are added to the `Users` table. + +![user-table](./user-table.png) + +## Step-4 +Open the `CustomizeUserDemoModuleExtensionConfigurator` in the **CustomizeUserDemo.Domain.Shared** project, and change the contents of the `ConfigureExtraProperties` method as shown below: +```csharp +private static void ConfigureExtraProperties() +{ + ObjectExtensionManager.Instance.Modules().ConfigureIdentity(identity => + { + identity.ConfigureUser(user => + { + user.AddOrUpdateProperty( + UserConsts.TitlePropertyName, + options => + { + options.Attributes.Add(new RequiredAttribute()); + options.Attributes.Add( + new StringLengthAttribute(UserConsts.MaxTitleLength) + ); + } + ); + user.AddOrUpdateProperty( + UserConsts.ReputationPropertyName, + options => + { + options.DefaultValue = UserConsts.MinReputationValue; + options.Attributes.Add( + new RangeAttribute(UserConsts.MinReputationValue, UserConsts.MaxReputationValue) + ); + } + ); + }); + }); +} +``` + +That's it. Now let's run the application and look at the Identity user page. You can also try to edit and recreate a record if you want, it will work even though we haven't done anything extra. Here is the magic code behind ABP framework. + +If there is a situation you want to add, you can click the contribute button or make a comment. Also, if you like the article, don't forget to share it :) + +Happy coding :) diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/added-new-migration.png b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/added-new-migration.png new file mode 100755 index 0000000000..d459fdeed2 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/added-new-migration.png differ diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/custom-identity-user-list.png b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/custom-identity-user-list.png new file mode 100644 index 0000000000..896ed947aa Binary files /dev/null and b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/custom-identity-user-list.png differ diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/initial-project.png b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/initial-project.png new file mode 100755 index 0000000000..6e08833853 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/initial-project.png differ diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/new-user.png b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/new-user.png new file mode 100644 index 0000000000..d3a5c66198 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/new-user.png differ diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/nuget-package-manager.png b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/nuget-package-manager.png new file mode 100755 index 0000000000..680bc9d2e7 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/nuget-package-manager.png differ diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/user-table.png b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/user-table.png new file mode 100755 index 0000000000..5bb71b8325 Binary files /dev/null and b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/user-table.png differ diff --git a/docs/en/Customizing-Application-Modules-Overriding-Services.md b/docs/en/Customizing-Application-Modules-Overriding-Services.md index d0d8c8a8a1..b8706eea61 100644 --- a/docs/en/Customizing-Application-Modules-Overriding-Services.md +++ b/docs/en/Customizing-Application-Modules-Overriding-Services.md @@ -162,6 +162,41 @@ This example class inherits from the `IdentityUserManager` [domain service](Doma Check the [localization system](Localization.md) to learn how to localize the error messages. +### Example: Overriding a Controller + +````csharp +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Volo.Abp.Account; +using Volo.Abp.DependencyInjection; + +namespace MyProject.Controllers +{ + [Dependency(ReplaceServices = true)] + [ExposeServices(typeof(AccountController))] + public class MyAccountController : AccountController + { + public MyAccountController(IAccountAppService accountAppService) + : base(accountAppService) + { + + } + + public override async Task SendPasswordResetCodeAsync( + SendPasswordResetCodeDto input) + { + Logger.LogInformation("Your custom logic..."); + + await base.SendPasswordResetCodeAsync(input); + } + } +} +```` + +This example replaces the `AccountController` (An API Controller defined in the [Account Module](Modules/Account.md)) and overrides the `SendPasswordResetCodeAsync` method. + +**`[ExposeServices(typeof(AccountController))]` is essential** here since it registers this controller for the `AccountController` in the dependency injection system. `[Dependency(ReplaceServices = true)]` is also recommended to clear the old registration (even the ASP.NET Core DI system selects the last registered one). + ### Overriding Other Classes Overriding controllers, framework services, view component classes and any other type of classes registered to dependency injection can be overridden just like the examples above. diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md index 62a8ef815d..2a13bf530c 100644 --- a/docs/en/Entity-Framework-Core-SQLite.md +++ b/docs/en/Entity-Framework-Core-SQLite.md @@ -23,6 +23,16 @@ Find `UseSqlServer()` calls in your solution, replace with `UseSqlite()`. Check SQLite connection strings are different than SQL Server connection strings. So, check all `appsettings.json` files in your solution and replace the connection strings inside them. See the [connectionstrings.com]( https://www.connectionstrings.com/sqlite/ ) for details of SQLite connection string options. +An example connection string is + +``` +{ + "ConnectionStrings": { + "Default": "Filename=./MySQLiteDBFile.sqlite" + } +} +``` + You typically will change the `appsettings.json` inside the `.DbMigrator` and `.Web` projects, but it depends on your solution structure. ## Re-Generate the Migrations @@ -38,4 +48,4 @@ Run the `.DbMigrator` project to create the database and seed the initial data. ## Run the Application -It is ready. Just run the application and enjoy coding. \ No newline at end of file +It is ready. Just run the application and enjoy coding. diff --git a/docs/en/JavaScript/Dynamic-JavaScript-API-Clients.md b/docs/en/JavaScript/Dynamic-JavaScript-API-Clients.md deleted file mode 100644 index 539d3ac15a..0000000000 --- a/docs/en/JavaScript/Dynamic-JavaScript-API-Clients.md +++ /dev/null @@ -1,3 +0,0 @@ -## Dynamic JavaScript API Clients - -TODO \ No newline at end of file diff --git a/docs/en/Localization.md b/docs/en/Localization.md index 37104a4878..a33dff1779 100644 --- a/docs/en/Localization.md +++ b/docs/en/Localization.md @@ -100,8 +100,6 @@ Configure(options => > The [application startup template](Startup-Templates/Application.md) sets `DefaultResourceType` to the localization resource of the application. -See the *Client Side* section below for a use case. - ### Short Localization Resource Name Localization resources are also available in the client (JavaScript) side. So, setting a short name for the localization resource makes it easy to use localization texts. Example: @@ -156,13 +154,13 @@ services.Configure(options => * If an extension file defines the same localized string, it overrides the string. -## Getting Localized Texts +## Getting the Localized Texts -### Server Side +Getting the localized text is pretty standard. -Getting the localized text on the server side is pretty standard. +### Simplest Usage In A Class -#### Simplest Usage In A Class +Just inject the `IStringLocalizer` service and use it like shown below: ````C# public class MyService @@ -183,9 +181,13 @@ public class MyService ##### Format Arguments -Format arguments can be passed after the localization key. If your message is `Hello {0}, welcome!`, then you can pass the `{0}` argument to the localizer like `_localizer["HelloMessage", "John"]` +Format arguments can be passed after the localization key. If your message is `Hello {0}, welcome!`, then you can pass the `{0}` argument to the localizer like `_localizer["HelloMessage", "John"]`. + +> Refer to the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) for details about using the localization. -#### Simplest Usage In A Razor View/Page +### Using In A Razor View/Page + +Use `IHtmlLocalizer` in razor views/pages; ````c# @inject IHtmlLocalizer Localizer @@ -193,54 +195,59 @@ Format arguments can be passed after the localization key. If your message is `H

@Localizer["HelloWorld"]

```` -Refer to the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) for details about using localization on the server side. - -### Client Side - -ABP provides JavaScript services to use the same localized texts in the client side. - -#### getResource - -`abp.localization.getResource` function is used to get a localization resource: - -````js -var testResource = abp.localization.getResource('Test'); -```` - -Then you can localize a string based on this resource: +### Special Base Classes -````js -var str = testResource('HelloWorld'); -```` +Some ABP Framework base classes provide a `L` property to use the localizer even easier. -#### localize +**Example: Localize a text in an application service method** -`abp.localization.localize` function is a shortcut where you can both specify the text name and the resource name: +```csharp +using System.Threading.Tasks; +using MyProject.Localization; +using Volo.Abp.Application.Services; -````js -var str = abp.localization.localize('HelloWorld', 'Test'); -```` +namespace MyProject +{ + public class TestAppService : ApplicationService + { + public TestAppService() + { + LocalizationResource = typeof(MyProjectResource); + } -`HelloWorld` is the text to localize, where `Test` is the localization resource name here. + public async Task DoIt() + { + var str = L["HelloWorld"]; + } + } +} +``` -If you don't specify the localization resource name, it uses the default localization resource defined on the `AbpLocalizationOptions` (see the *Default Resource* section above). Example: +When you set the `LocalizationResource` in the constructor, the `ApplicationService` class uses that resource type when you use the `L` property, just like in the `DoIt()` method. -````js -var str = abp.localization.localize('HelloWorld'); //uses the default resource -```` +Setting `LocalizationResource` in every application service can be tedious. You can create an abstract base application service class, set it there and derive your application services from that base class. This is already implemented when you create a new project with the [startup templates](Startup-Templates/Application.md). So, you can simply inherit from the base class directly use the `L` property: -##### Format Arguments +```csharp +using System.Threading.Tasks; -If your localized string contains arguments, like `Hello {0}, welcome!`, you can pass arguments to the localization methods. Examples: +namespace MyProject +{ + public class TestAppService : MyProjectAppService + { + public async Task DoIt() + { + var str = L["HelloWorld"]; + } + } +} +``` -````js -var str1 = abp.localization.getResource('Test')('HelloWelcomeMessage', 'John'); -var str2 = abp.localization.localize('HelloWorld', 'Test', 'John'); -```` +The `L` property is also available for some other base classes like `AbpController` and `AbpPageModel`. -Both of the samples above produce the output `Hello John, welcome!`. +## The Client Side -## See Also +See the following documents to learn how to reuse the same localization texts in the JavaScript side; -* [Localization in Angular UI](UI/Angular/Localization.md) -* [Forms & Validation](UI/AspNetCore/Forms-Validation.md) for the ASP.NET Core MVC / Razor Pages UI \ No newline at end of file +* [Localization for the MVC / Razor Pages UI](UI/AspNetCore/JavaScript-API/Localization.md) +* [Localization for the Blazor UI](UI/Blazor/Localization.md) +* [Localization for the Angular UI](UI/Angular/Localization.md) \ No newline at end of file diff --git a/docs/en/Redis-Cache.md b/docs/en/Redis-Cache.md index 42679679c6..3e11584bce 100644 --- a/docs/en/Redis-Cache.md +++ b/docs/en/Redis-Cache.md @@ -25,9 +25,11 @@ Volo.Abp.Caching.StackExchangeRedis package automatically gets the redis [config ````js "Redis": { + "IsEnabled": "true", "Configuration": "127.0.0.1" } ```` +The setting `IsEnabled` is optional and will be considered `true` if it is not set. Alternatively you can configure the standard [RedisCacheOptions](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.stackexchangeredis.rediscacheoptions) [options](Options.md) class in the `ConfigureServices` method of your [module](Module-Development-Basics.md): diff --git a/docs/en/UI/Angular/Localization.md b/docs/en/UI/Angular/Localization.md index eec4db0cb4..c8073585e1 100644 --- a/docs/en/UI/Angular/Localization.md +++ b/docs/en/UI/Angular/Localization.md @@ -219,7 +219,18 @@ If you see an error like this, you should pass the `cultureNameLocaleFileMap` pr See [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales). +## Adding new culture +```js +//app.module.ts + +import { storeLocaleData } from '@abp/ng.core'; +import( +/* webpackChunkName: "_locale-your-locale-js"*/ +/* webpackMode: "eager" */ +'@angular/common/locales/your-locale.js' +).then(m => storeLocaleData(m.default, 'your-locale')); +``` ## See Also * [Localization in ASP.NET Core](../../Localization.md) diff --git a/docs/en/UI/Angular/Toaster-Service.md b/docs/en/UI/Angular/Toaster-Service.md index f6d5c71e99..4d94b8cf6d 100644 --- a/docs/en/UI/Angular/Toaster-Service.md +++ b/docs/en/UI/Angular/Toaster-Service.md @@ -85,7 +85,103 @@ The all open toasts can be removed manually via the `clear` method: ```js this.toaster.clear(); ``` +## Replacing ToasterService with 3rd party toaster libraries +If you want the ABP Framework to utilize 3rd party libraries for the toasters instead of the built-in one, you can provide a service that implements `Toaster.Service` interface, and provide it as follows (ngx-toastr library used in example): + +> You can use *LocalizationService* for toaster messages translations. +```js +// your-custom-toaster.service.ts +import { Injectable } from '@angular/core'; +import { Config, LocalizationService } from '@abp/ng.core'; +import { Toaster } from '@abp/ng.theme.shared'; +import { ToastrService } from 'ngx-toastr'; + +@Injectable() +export class CustomToasterService implements Toaster.Service { + constructor(private toastr: ToastrService, private localizationService: LocalizationService) {} + + error( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) { + return this.show(message, title, 'error', options); + } + + clear(): void { + this.toastr.clear(); + } + + info( + message: Config.LocalizationParam, + title: Config.LocalizationParam | undefined, + options: Partial | undefined, + ): Toaster.ToasterId { + return this.show(message, title, 'info', options); + } + + remove(id: number): void { + this.toastr.remove(id); + } + + show( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + severity: Toaster.Severity, + options: Partial, + ): Toaster.ToasterId { + const translatedMessage = this.localizationService.instant(message); + const translatedTitle = this.localizationService.instant(title); + const toasterOptions = { + positionClass: 'toast-bottom-right', + tapToDismiss: options.tapToDismiss, + ...(options.sticky && { + extendedTimeOut: 0, + timeOut: 0, + }), + }; + const activeToast = this.toastr.show( + translatedMessage, + translatedTitle, + toasterOptions, + `toast-${severity}`, + ); + return activeToast.toastId; + } + + success( + message: Config.LocalizationParam, + title: Config.LocalizationParam | undefined, + options: Partial | undefined, + ): Toaster.ToasterId { + return this.show(message, title, 'success', options); + } + + warn( + message: Config.LocalizationParam, + title: Config.LocalizationParam | undefined, + options: Partial | undefined, + ): Toaster.ToasterId { + return this.show(message, title, 'warning', options); + } +} +``` +```js +// app.module.ts + +import { ToasterService } from '@abp/ng.theme.shared'; + +@NgModule({ + providers: [ + // ... + { + provide: ToasterService, + useClass: CustomToasterService, + }, + ] +}) +``` ## API ### success diff --git a/docs/en/UI/AspNetCore/Client-Side-Package-Management.md b/docs/en/UI/AspNetCore/Client-Side-Package-Management.md index 63c5cec225..77dee7a383 100644 --- a/docs/en/UI/AspNetCore/Client-Side-Package-Management.md +++ b/docs/en/UI/AspNetCore/Client-Side-Package-Management.md @@ -94,7 +94,8 @@ An example mapping configuration is shown below: mappings: { "@node_modules/bootstrap/dist/css/bootstrap.css": "@libs/bootstrap/css/", "@node_modules/bootstrap/dist/js/bootstrap.bundle.js": "@libs/bootstrap/js/", - "@node_modules/bootstrap-datepicker/dist/locales/*.*": "@libs/bootstrap-datepicker/locales/" + "@node_modules/bootstrap-datepicker/dist/locales/*.*": "@libs/bootstrap-datepicker/locales/", + "@node_modules/bootstrap-v4-rtl/dist/**/*": "@libs/bootstrap-v4-rtl/dist/" } ```` diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index f1f0174c89..c4e196fbb9 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -376,7 +376,7 @@ Assume that you need to add the Google Analytics script to the layout (that will ![bookstore-google-analytics-view-component](../../images/bookstore-google-analytics-view-component.png) -**NotificationViewComponent.cs** +**GoogleAnalyticsViewComponent.cs** ````csharp public class GoogleAnalyticsViewComponent : AbpViewComponent @@ -441,7 +441,7 @@ Layout system allows themes to define standard, named layouts and allows any pag * "**Account**": This layout is used by login, register and other similar pages. It is used for the pages under the `/Pages/Account` folder by default. * "**Empty**": Empty and minimal layout. -These names are defined in the `StandardLayouts` class as constants. You can definitely create your own layouts, but these are standard layout names and implemented by all the themes out of the box. +These names are defined in the `StandardLayouts` class as constants. You can definitely create your own layouts, but these are the standard layout names and implemented by all the themes out of the box. #### Layout Location diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md b/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md new file mode 100644 index 0000000000..dca3105b5c --- /dev/null +++ b/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md @@ -0,0 +1,150 @@ +# ASP.NET Core MVC / Razor Pages UI JavaScript AJAX API + +`abp.ajax` API provides a convenient way of performing AJAX calls to the server. It internally uses JQuery's `$.ajax`, but automates some common tasks for you; + +* Automatically **handles & localize the errors** and informs the user (using the [abp.message](Message.md)). So you typically don't care about errors. +* Automatically adds **anti forgery** token to the HTTP header to satisfy CSRF protection validation on the server side. +* Automatically sets **default options** and allows to configure the defaults in a single place. +* Can **block** a UI part (or the full page) during the AJAX operation. +* Allows to fully customize any AJAX call, by using the standard `$.ajax` **options**. + +> While `abp.ajax` makes the AJAX call pretty easier, you typically will use the [Dynamic JavaScript Client Proxy](Dynamic-JavaScript-Client-Proxies.md) system to perform calls to your server side HTTP APIs. `abp.ajax` can be used when you need to perform low level AJAX operations. + +## Basic Usage + +`abp.ajax` accepts an options object that is accepted by the standard [$.ajax](https://api.jquery.com/jquery.ajax/#jQuery-ajax-settings). All the standard options are valid. It returns a [promise](https://api.jquery.com/category/deferred-object/) as the return value. + +**Example: Get the list of users** + +````js +abp.ajax({ + type: 'GET', + url: '/api/identity/users' +}).then(function(result){ + console.log(result); +}); +```` + +This command logs the list of users to the console, if you've **logged in** to the application and have [permission](../../../Authorization.md) for the user management page of the [Identity Module](../../../Modules/Identity.md). + +## Error Handling + +The example AJAX call above shows an **error message** if you haven't login to the application or you don't have the necessary permissions to perform this request: + +![ajax-error](../../../images/ajax-error.png) + +All kinds of errors are automatically handled by `abp.ajax`, unless you want to disable it. + +### Standard Error Response + +`abp.ajax` is compatible with the [exception handling system](../../../Exception-Handling.md) of the ABP Framework and it properly handles the standard error format returned from the server. A typical error message is a JSON as like below: + +````json +{ + "error": { + "code": "App:010042", + "message": "This topic is locked and can not add a new message", + "details": "A more detailed info about the error..." + } +} +```` + +The error message is directly shown to the user, using the `message` and `details` properties. + +### Non-Standard Error Response & HTTP Status Codes + +It also handles errors even if the standard error format was not sent by the server. This can be case if you bypass the ABP exception handling system and manually build the HTTP response on the server. In that case, **HTTP status codes** are considered. + +The following HTTP Status Codes are pre-defined; + +* **401**: Shows an error message like "*You should be authenticated (sign in) in order to perform this operation*". When the users click the OK button, they are redirected to the home page of the application to make them login again. +* **403**: Shows an error message like "*You are not allowed to perform this operation*". +* **404**: Shows an error message like "*The resource requested could not found on the server*". +* **Others**: Shows a generic error message like "*An error has occurred. Error detail not sent by server*". + +All these messages are localized based on the current user's language. + +### Manually Handling the Errors + +Since `abp.ajax` returns a promise, you can always chain a `.cactch(...)` call to register a callback that is executed if the AJAX request fails. + +**Example: Show an alert if the AJAX request fails** + +````js +abp.ajax({ + type: 'GET', + url: '/api/identity/users' +}).then(function(result){ + console.log(result); +}).catch(function(){ + alert("request failed :("); +}); +```` + +While your callback is fired, ABP still handles the error itself. If you want to disable automatic error handling, pass `abpHandleError: false` the the `abp.ajax` options. + +**Example: Disable the auto error handling** + +````js +abp.ajax({ + type: 'GET', + url: '/api/identity/users', + abpHandleError: false //DISABLE AUTO ERROR HANDLING +}).then(function(result){ + console.log(result); +}).catch(function(){ + alert("request failed :("); +}); +```` + +If you set `abpHandleError: false` and don't catch the error yourself, then the error will be hidden and the request silently fails. `abp.ajax` still logs the error to the browser console (see the *Configuration* section to override it). + +## Configuration + +`abp.ajax` has a **global configuration** that you can customize based on your requirements. + +### Default AJAX Options + +`abp.ajax.defaultOpts` object is used to configure default options used while performing an AJAX call, unless you override them. Default value of this object is shown below: + +````js +{ + dataType: 'json', + type: 'POST', + contentType: 'application/json', + headers: { + 'X-Requested-With': 'XMLHttpRequest' + } +} +```` + +So, if you want to change the default request type, you can do it as shown below: + +````js +abp.ajax.defaultOpts.type = 'GET'; +```` + +Write this code before all of your JavaScript code. You typically want to place such a configuration into a separate JavaScript file and add it to the layout using the global [bundle](../Bundling-Minification.md). + +### Log/Show Errors + +The following functions can be overridden to customize the logging and showing the error messages: + +* `abp.ajax.logError` function logs errors using the [abp.log.error(...)](Logging.md) by default. +* `abp.ajax.showError` function shows the error message using the [abp.message.error(...)](Message.md) by default. +* `abp.ajax.handleErrorStatusCode` handles different HTTP status codes and shows different messages based on the code. +* `abp.ajax.handleAbpErrorResponse` handles the errors sent with the standard ABP error format. +* `abp.ajax.handleNonAbpErrorResponse` handles the non-standard error responses. +* `abp.ajax.handleUnAuthorizedRequest` handles responses with `401` status code and redirect users to the home page of the application. + +**Example: Override the `logError` function** + +````js +abp.ajax.logError = function(error) { + //... +} +```` + +### Other Options + +* `abp.ajax.ajaxSendHandler` function is used to intercept the AJAX requests and add antiforgery token to the HTTP header. Note that this works for all AJAX requests, even if you don't use the `abp.ajax`. \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Dynamic-JavaScript-Client-Proxies.md b/docs/en/UI/AspNetCore/JavaScript-API/Dynamic-JavaScript-Client-Proxies.md new file mode 100644 index 0000000000..5270852b60 --- /dev/null +++ b/docs/en/UI/AspNetCore/JavaScript-API/Dynamic-JavaScript-Client-Proxies.md @@ -0,0 +1,3 @@ +# ASP.NET Core MVC / Razor Pages UI: Dynamic JavaScript Client Proxies + +TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Index.md b/docs/en/UI/AspNetCore/JavaScript-API/Index.md index 9f584eacfb..bca62835f7 100644 --- a/docs/en/UI/AspNetCore/JavaScript-API/Index.md +++ b/docs/en/UI/AspNetCore/JavaScript-API/Index.md @@ -1,23 +1,23 @@ # JavaScript API -ABP provides some JavaScript APIs for ASP.NET Core MVC / Razor Pages applications. They can be used to perform some common application requirements in the client side. +ABP provides a set of JavaScript APIs for ASP.NET Core MVC / Razor Pages applications. They can be used to perform common application requirements easily in the client side and integrate to the server side. ## APIs -* abp.ajax +* [abp.ajax](Ajax.md) * abp.auth * abp.currentUser * abp.dom * abp.event * abp.features -* abp.localization +* [abp.localization](Localization.md) * abp.log +* [abp.message](Message.md) * abp.ModalManager -* abp.notify +* [abp.notify](Notify.md) * abp.security * abp.setting * abp.ui * abp.utils * abp.ResourceLoader -* abp.WidgetManager -* Other APIs \ No newline at end of file +* abp.WidgetManager \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Localization.md b/docs/en/UI/AspNetCore/JavaScript-API/Localization.md new file mode 100644 index 0000000000..0897b99268 --- /dev/null +++ b/docs/en/UI/AspNetCore/JavaScript-API/Localization.md @@ -0,0 +1,143 @@ +# ASP.NET Core MVC / Razor Pages UI: JavaScript Localization API + +Localization API allows you to reuse the server side localization resources in the client side. + +> This document only explains the JavaScript API. See the [localization document](../../../Localization.md) to understand the ABP localization system. + +## Basic Usage + +`abp.localization.getResource(...)` function is used to get a localization resource: + +````js +var testResource = abp.localization.getResource('Test'); +```` + +Then you can localize a string based on this resource: + +````js +var str = testResource('HelloWorld'); +```` + +`abp.localization.localize(...)` function is a shortcut where you can both specify the text name and the resource name: + +````js +var str = abp.localization.localize('HelloWorld', 'Test'); +```` + +`HelloWorld` is the text to localize, where `Test` is the localization resource name here. + +### Fallback Logic + +If given texts was not localized, localization method returns the given key as the localization result. + +### Default Localization Resource + +If you don't specify the localization resource name, it uses the **default localization resource** defined on the `AbpLocalizationOptions` (see the [localization document](../../../Localization.md)). + +**Example: Using the default localization resource** + +````js +var str = abp.localization.localize('HelloWorld'); //uses the default resource +```` + +### Format Arguments + +If your localized string contains arguments, like `Hello {0}, welcome!`, you can pass arguments to the localization methods. Examples: + +````js +var testSource = abp.localization.getResource('Test'); +var str1 = testSource('HelloWelcomeMessage', 'John'); +var str2 = abp.localization.localize('HelloWelcomeMessage', 'Test', 'John'); +```` + +Assuming the `HelloWelcomeMessage` is localized as `Hello {0}, welcome!`, both of the samples above produce the output `Hello John, welcome!`. + +## Other Properties & Methods + +### abp.localization.values + +`abp.localization.values` property stores all the localization resources, keys and their values. + +### abp.localization.isLocalized + +Returns a boolean indicating that if the given text was localized or not. + +**Example** + +````js +abp.localization.isLocalized('ProductName', 'MyResource'); +```` + +Returns `true` if the `ProductName` text was localized for the `MyResource` resource. Otherwise, returns `false`. You can leave the resource name empty to use the default localization resource. + +### abp.localization.defaultResourceName + +`abp.localization.defaultResourceName` can be set to change the default localization resource. You normally don't set this since the ABP Framework automatically sets is based on the server side configuration. + +### abp.localization.currentCulture + +`abp.localization.currentCulture` returns an object to get information about the **currently selected language**. + +An example value of this object is shown below: + +````js +{ + "displayName": "English", + "englishName": "English", + "threeLetterIsoLanguageName": "eng", + "twoLetterIsoLanguageName": "en", + "isRightToLeft": false, + "cultureName": "en", + "name": "en", + "nativeName": "English", + "dateTimeFormat": { + "calendarAlgorithmType": "SolarCalendar", + "dateTimeFormatLong": "dddd, MMMM d, yyyy", + "shortDatePattern": "M/d/yyyy", + "fullDateTimePattern": "dddd, MMMM d, yyyy h:mm:ss tt", + "dateSeparator": "/", + "shortTimePattern": "h:mm tt", + "longTimePattern": "h:mm:ss tt" + } +} +```` + +### abp.localization.languages + +Used to get list of all **available languages** in the application. An example value of this object is shown below: + +````js +[ + { + "cultureName": "en", + "uiCultureName": "en", + "displayName": "English", + "flagIcon": null + }, + { + "cultureName": "fr", + "uiCultureName": "fr", + "displayName": "Français", + "flagIcon": null + }, + { + "cultureName": "pt-BR", + "uiCultureName": "pt-BR", + "displayName": "Português", + "flagIcon": null + }, + { + "cultureName": "tr", + "uiCultureName": "tr", + "displayName": "Türkçe", + "flagIcon": null + }, + { + "cultureName": "zh-Hans", + "uiCultureName": "zh-Hans", + "displayName": "简体中文", + "flagIcon": null + } +] +```` + diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Logging.md b/docs/en/UI/AspNetCore/JavaScript-API/Logging.md new file mode 100644 index 0000000000..9fe48f22da --- /dev/null +++ b/docs/en/UI/AspNetCore/JavaScript-API/Logging.md @@ -0,0 +1,3 @@ +# ASP.NET Core MVC / Razor Pages UI: JavaScript Logging API + +TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Message.md b/docs/en/UI/AspNetCore/JavaScript-API/Message.md new file mode 100644 index 0000000000..68c74914c6 --- /dev/null +++ b/docs/en/UI/AspNetCore/JavaScript-API/Message.md @@ -0,0 +1,128 @@ +# ASP.NET Core MVC / Razor Pages UI: JavaScript Message API + +Message API is used to show nice looking messages to the user as a blocking dialog. Message API is an abstraction provided by the ABP Framework and implemented using the [SweetAlert2](https://sweetalert2.github.io/) library by default. + +## Quick Example + +Use `abp.message.success(...)` function to show a success message: + +````js +abp.message.success('Your changes have been successfully saved!', 'Congratulations'); +```` + +It will show a dialog on the UI: + +![js-message-success](../../../images/js-message-success.png) + +## Informative Messages + +There are four types of informative message functions: + +* `abp.message.info(...)` +* `abp.message.success(...)` +* `abp.message.warn(...)` +* `abp.message.error(...)` + +All these methods get two parameters: + +* `message`: The message (`string`) to be shown. +* `title`: An optional (`string`) title. + +**Example: Show an error message** + +````js +abp.message.error('Your credit card number is not valid!'); +```` + +![js-message-error](../../../images/js-message-error.png) + +## Confirmation Message + +`abp.message.confirm(...)` function can be used to get a confirmation from the user. + +**Example** + +Use the following code to get a confirmation result from the user: + +````js +abp.message.confirm('Are you sure to delete the "admin" role?') +.then(function(confirmed){ + if(confirmed){ + console.log('TODO: deleting the role...'); + } +}); +```` + +The resulting UI will be like shown below: + +![js-message-confirm](../../../images/js-message-confirm.png) + +If user has clicked the `Yes` button, the `confirmed` argument in the `then` callback function will be `true`. + +> "*Are you sure?*" is the default title (localized based on the current language) and you can override it. + +### The Return Value + +The return value of the `abp.message.confirm(...)` function is a promise, so you can chain a `then` callback as shown above. + +### Parameters + +`abp.message.confirm(...)` function has the following parameters: + +* `message`: A message (string) to show to the user. +* `titleOrCallback` (optional): A title or a callback function. If you supply a string, it is shown as the title. If you supply a callback function (that gets a `bool` parameter) then it's called with the result. +* `callback` (optional): If you've passes a title to the second parameter, you can pass your callback function as the 3rd parameter. + +Passing a callback function is an alternative to the `then` callback shown above. + +**Example: Providing all the parameters and getting result with the callback function** + +````js +abp.message.confirm( + 'Are you sure to delete the "admin" role?', + 'Be careful!', + function(confirmed){ + if(confirmed){ + console.log('TODO: deleting the role...'); + } + }); +```` + +## SweetAlert Configuration + +The Message API is implemented using the [SweetAlert2](https://sweetalert2.github.io/) library by default. If you want to change its configuration, you can set the options in the `abp.libs.sweetAlert.config` object. The default configuration object is shown below: + +````js +{ + 'default': { + }, + info: { + icon: 'info' + }, + success: { + icon: 'success' + }, + warn: { + icon: 'warning' + }, + error: { + icon: 'error' + }, + confirm: { + icon: 'warning', + title: 'Are you sure?', + buttons: ['Cancel', 'Yes'] + } +} +```` + +> "Are you sure?", "Cancel" and "Yes" texts are automatically localized based on the current language. + +So, if you want to set the `warn` icon, you can set it like: + +````js +abp.libs.sweetAlert.config.warn.icon = 'error'; +```` + +See the [SweetAlert document](https://sweetalert2.github.io/) for all the configuration options. + diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Notify.md b/docs/en/UI/AspNetCore/JavaScript-API/Notify.md new file mode 100644 index 0000000000..371aa8d4b9 --- /dev/null +++ b/docs/en/UI/AspNetCore/JavaScript-API/Notify.md @@ -0,0 +1,45 @@ +# ASP.NET Core MVC / Razor Pages UI: JavaScript Notify API + +Notify API is used to show toast style, auto disappearing UI notifications to the end user. It is implemented by the [Toastr](https://github.com/CodeSeven/toastr) library by default. + +## Quick Example + +Use `abp.notify.success(...)` function to show a success message: + +````js +abp.notify.success( + 'The product "Acme Atom Re-Arranger" has been successfully deleted.', + 'Deleted the Product' +); +```` + +A notification message is shown at the bottom right of the page: + +![js-message-success](../../../images/js-notify-success.png) + +## Notification Types + +There are four types of pre-defined notifications; + +* `abp.notify.success(...)` +* `abp.notify.info(...)` +* `abp.notify.warn(...)` +* `abp.notify.error(...)` + +All of the methods above gets the following parameters; + +* `message`: A message (`string`) to show to the user. +* `title`: An optional title (`string`). +* `options`: Additional options to be passed to the underlying library, to the Toastr by default. + +## Toastr Configuration + +The notification API is implemented by the [Toastr](https://github.com/CodeSeven/toastr) library by default. You can see its own configuration options. + +**Example: Show toast messages on the top right of the page** + +````js +toastr.options.positionClass = 'toast-top-right'; +```` + +> ABP sets this option to `toast-bottom-right` by default. You can override it just as shown above. \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Layout-Hooks.md b/docs/en/UI/AspNetCore/Layout-Hooks.md index 49b334c6c0..7039749142 100644 --- a/docs/en/UI/AspNetCore/Layout-Hooks.md +++ b/docs/en/UI/AspNetCore/Layout-Hooks.md @@ -1,3 +1,105 @@ -# Layout Hooks +# ASP.NET Core MVC / Razor Pages Layout Hooks -TODO \ No newline at end of file +ABP Framework theming system places the page layout into the [theme](Theming.md) NuGet packages. That means the final application doesn't include a `Layout.cshtml`, so you can't directly change the layout code to customize it. + +You copy the theme code into your solution. In this case you are completely free to customize it. However, then you won't be able to get automatic updates of the theme (by upgrading the theme NuGet package). + +ABP Framework provides different ways of [customizing the UI](Customization-User-Interface.md). + +The **Layout Hook System** allows you to **add code** at some specific parts of the layout. All layouts of all themes should implement these hooks. Finally, you can add a **view component** into a hook point. + +## Example: Add Google Analytics Script + +Assume that you need to add the Google Analytics script to the layout (that will be available for all the pages). First, **create a view component** in your project: + +![bookstore-google-analytics-view-component](../../images/bookstore-google-analytics-view-component.png) + +**NotificationViewComponent.cs** + +````csharp +public class GoogleAnalyticsViewComponent : AbpViewComponent +{ + public IViewComponentResult Invoke() + { + return View("/Pages/Shared/Components/GoogleAnalytics/Default.cshtml"); + } +} +```` + +**Default.cshtml** + +````html + +```` + +Change `UA-xxxxxx-1` with your own code. + +You can then add this component to any of the hook points in the `ConfigureServices` of your module: + +````csharp +Configure(options => +{ + options.Add( + LayoutHooks.Head.Last, //The hook name + typeof(GoogleAnalyticsViewComponent) //The component to add + ); +}); +```` + +Now, the GA code will be inserted in the `head` of the page as the last item. + +### Specifying the Layout + +The configuration above adds the `GoogleAnalyticsViewComponent` to all layouts. You may want to only add to a specific layout: + +````csharp +Configure(options => +{ + options.Add( + LayoutHooks.Head.Last, + typeof(GoogleAnalyticsViewComponent), + layout: StandardLayouts.Application //Set the layout to add + ); +}); +```` + +See the *Layouts* section below to learn more about the layout system. + +## Layout Hook Points + +There are some pre-defined layout hook points. The `LayoutHooks.Head.Last` used above was one of them. The standard hook points are; + +* `LayoutHooks.Head.First`: Used to add a component as the first item in the HTML head tag. +* `LayoutHooks.Head.Last`: Used to add a component as the last item in the HTML head tag. +* `LayoutHooks.Body.First`: Used to add a component as the first item in the HTML body tag. +* `LayoutHooks.Body.Last`: Used to add a component as the last item in the HTML body tag. +* `LayoutHooks.PageContent.First`: Used to add a component just before the page content (the `@RenderBody()` in the layout). +* `LayoutHooks.PageContent.Last`: Used to add a component just after the page content (the `@RenderBody()` in the layout). + +> You (or the modules you are using) can add **multiple items to the same hook point**. All of them will be added to the layout by the order they were added. + +## Layouts + +Layout system allows themes to define standard, named layouts and allows any page to select a proper layout for its purpose. There are three pre-defined layouts: + +* "**Application**": The main (and the default) layout for an application. It typically contains header, menu (sidebar), footer, toolbar... etc. +* "**Account**": This layout is used by login, register and other similar pages. It is used for the pages under the `/Pages/Account` folder by default. +* "**Empty**": Empty and minimal layout. + +These names are defined in the `StandardLayouts` class as constants. You can definitely create your own layouts, but these are the standard layout names and implemented by all the themes out of the box. + +### Layout Location + +You can find the layout files [here](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) for the basic theme. You can take them as references to build your own layouts or you can override them if necessary. + +## See Also + +* [Customizing the User Interface](Customization-User-Interface.md) \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Badges.md b/docs/en/UI/AspNetCore/Tag-Helpers/Badges.md index 66727cc112..c627273062 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Badges.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Badges.md @@ -2,11 +2,11 @@ ## Introduction -`abp-badge` and `abp-badge-pill` are abp tags for badges. +`abp-badge` and `abp-badge-pill` are ABP Tag Helper attributes for `a` and `span` html tags. Basic usage: -````csharp +````html Primary Info Danger @@ -22,8 +22,7 @@ See the [badges demo page](https://bootstrap-taghelpers.abp.io/Components/Badges * Indicates the type of the badge. Should be one of the following values: - * `_` (default value) - * `Default` (default value) + * `Default` * `Primary` * `Secondary` * `Success` @@ -35,6 +34,7 @@ See the [badges demo page](https://bootstrap-taghelpers.abp.io/Components/Badges Example: -````csharp +````html Danger ```` + diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Blockquote.md b/docs/en/UI/AspNetCore/Tag-Helpers/Blockquote.md new file mode 100644 index 0000000000..a63187aeb3 --- /dev/null +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Blockquote.md @@ -0,0 +1,18 @@ +# Blockquote + +`abp-blockquote` is the main container for blockquote items. + +Basic usages: + +````html + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
+ + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in Source Title
+
+```` + +It adds `blockquote` class to main container, also adds `blockquote-footer` class to inner `footer` element and `mb-0` class to inner `p` element. \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Borders.md b/docs/en/UI/AspNetCore/Tag-Helpers/Borders.md index 1dc070e8ad..e1d98ac7d8 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Borders.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Borders.md @@ -2,11 +2,11 @@ ## Introduction -`abp-border` is a main element for border styling. +`abp-border` is ABP Tag Helper attribute for border styling. Basic usage: -````csharp +````html @@ -124,3 +124,5 @@ A value indicates type, position and the color of the border. Should be one of t * `Bottom_Light_0` * `Bottom_Dark_0` * `Bottom_White_0` + +(Values with `_0` at the end is for [Subtractive](https://getbootstrap.com/docs/4.0/utilities/borders/#subtractive) usages) \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Breadcrumbs.md b/docs/en/UI/AspNetCore/Tag-Helpers/Breadcrumbs.md index 59332cf8de..b7082696c5 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Breadcrumbs.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Breadcrumbs.md @@ -6,7 +6,7 @@ Basic usage: -````csharp +````html diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Button-groups.md b/docs/en/UI/AspNetCore/Tag-Helpers/Button-groups.md index 93865e0d74..bfd558f89e 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Button-groups.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Button-groups.md @@ -6,7 +6,7 @@ Basic usage: -````csharp +````html Left Middle diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Carousel.md b/docs/en/UI/AspNetCore/Tag-Helpers/Carousel.md index 6088977068..3b91087838 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Carousel.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Carousel.md @@ -6,7 +6,7 @@ Basic usage: -````csharp +````html diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Collapse.md b/docs/en/UI/AspNetCore/Tag-Helpers/Collapse.md index 38fab4d44b..dfbe8ea248 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Collapse.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Collapse.md @@ -6,7 +6,7 @@ Basic usage: -````xml +````html Link with href diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Figure.md b/docs/en/UI/AspNetCore/Tag-Helpers/Figure.md new file mode 100644 index 0000000000..e3b0e0d0a4 --- /dev/null +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Figure.md @@ -0,0 +1,14 @@ +# Figures + +`abp-figure` is the main container for bootstrap figure items. + +Basic usage: + +````html + + + A caption for the above image. + +```` + +It adds `figure` class to main container, also adds `figure-img` class to inner `abp-image` element and `figure-caption` class to inner `abp-figcaption` element. \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Index.md b/docs/en/UI/AspNetCore/Tag-Helpers/Index.md index 229460de92..54c37af688 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Index.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Index.md @@ -13,19 +13,26 @@ ABP Framework also adds some **useful features** to the standard bootstrap compo Here, the list of components those are wrapped by the ABP Framework: * [Alerts](Alerts.md) +* [Badges](Badges.md)) +* [Blockquote](Blockquote.md) +* [Borders](Borders.md) +* [Breadcrumb](Breadcrumb.md) * [Buttons](Buttons.md) * [Cards](Cards.md) +* [Carousel](Carousel.md) * [Collapse](Collapse.md) * [Dropdowns](Dropdowns.md) +* [Figures](Figure.md) * [Grids](Grids.md) * [List Groups](List-Groups.md) * [Modals](Modals.md) +* [Navigation](Navs.md) * [Paginator](Paginator.md) * [Popovers](Popovers.md) * [Progress Bars](Progress-Bars.md) +* [Tables](Tables.md) * [Tabs](Tabs.md) * [Tooltips](Tooltips.md) -* ... > Until all the tag helpers are documented, you can visit https://bootstrap-taghelpers.abp.io/ to see them with live samples. diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Navs.md b/docs/en/UI/AspNetCore/Tag-Helpers/Navs.md index c7503fa51d..9c8347b831 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Navs.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Navs.md @@ -6,7 +6,7 @@ Basic usage: -````csharp +````html Active @@ -78,7 +78,7 @@ See the [navs demo page](https://bootstrap-taghelpers.abp.io/Components/Navs) to Example: -````csharp +````html Navbar diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Paginator.md b/docs/en/UI/AspNetCore/Tag-Helpers/Paginator.md index 9969bcf3cc..c30e68eed9 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Paginator.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Paginator.md @@ -12,7 +12,7 @@ Basic usage: Model: -````xml +````csharp using Microsoft.AspNetCore.Mvc.RazorPages; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination; diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Tables.md b/docs/en/UI/AspNetCore/Tag-Helpers/Tables.md index 50e6c3baf9..db30db6a09 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Tables.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Tables.md @@ -6,7 +6,7 @@ Basic usage: -````csharp +````html diff --git a/docs/en/UI/Blazor/Localization.md b/docs/en/UI/Blazor/Localization.md new file mode 100644 index 0000000000..e6cf761ce3 --- /dev/null +++ b/docs/en/UI/Blazor/Localization.md @@ -0,0 +1,3 @@ +# Blazor UI: Localization + +Blazor applications can reuse the same `IStringLocalizer` service that is explained in the [localization document](../../Localization.md). All the localization resources and texts available in the server side are usable in the Blazor application. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 7531d4e9f1..c0c25fd658 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -99,11 +99,15 @@ "path": "CLI.md" }, { - "text": "Authentication", + "text": "Authentication & Security", "items": [ { "text": "Social/External Logins", "path": "Authentication/Social-External-Logins.md" + }, + { + "text": "CSRF/XSRF & Anti Forgery", + "path": "CSRF-Anti-Forgery.md" } ] }, @@ -432,10 +436,39 @@ "text": "Widgets", "path": "UI/AspNetCore/Widgets.md" }, + { + "text": "Layout Hooks", + "path": "UI/AspNetCore/Layout-Hooks.md" + }, { "text": "Theming", "path": "UI/AspNetCore/Theming.md" }, + { + "text": "JavaScript API", + "items": [ + { + "text": "Overall", + "path": "UI/AspNetCore/JavaScript-API/Index.md" + }, + { + "text": "Localization", + "path": "UI/AspNetCore/JavaScript-API/Localization.md" + }, + { + "text": "AJAX", + "path": "UI/AspNetCore/JavaScript-API/Ajax.md" + }, + { + "text": "Message", + "path": "UI/AspNetCore/JavaScript-API/Message.md" + }, + { + "text": "Notify", + "path": "UI/AspNetCore/JavaScript-API/Notify.md" + } + ] + }, { "text": "Customize/Extend the UI", "path": "UI/AspNetCore/Customization-User-Interface.md" diff --git a/docs/en/images/ajax-error.png b/docs/en/images/ajax-error.png new file mode 100644 index 0000000000..2b9bc2bb37 Binary files /dev/null and b/docs/en/images/ajax-error.png differ diff --git a/docs/en/images/js-message-confirm.png b/docs/en/images/js-message-confirm.png new file mode 100644 index 0000000000..876ae8d98e Binary files /dev/null and b/docs/en/images/js-message-confirm.png differ diff --git a/docs/en/images/js-message-error.png b/docs/en/images/js-message-error.png new file mode 100644 index 0000000000..fd8abb1d7e Binary files /dev/null and b/docs/en/images/js-message-error.png differ diff --git a/docs/en/images/js-message-success.png b/docs/en/images/js-message-success.png new file mode 100644 index 0000000000..bbf418a37c Binary files /dev/null and b/docs/en/images/js-message-success.png differ diff --git a/docs/en/images/js-notify-success.png b/docs/en/images/js-notify-success.png new file mode 100644 index 0000000000..04489bc7ce Binary files /dev/null and b/docs/en/images/js-notify-success.png differ diff --git a/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md b/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md index 7daf6c5d4b..c94c29d27f 100644 --- a/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md @@ -70,7 +70,7 @@ namespace Acme.BookStore.Web.Pages.Identity.Users 在这种情况下; -1. 像上面描述过的那术重写C#页面模型类,但不需要替换已存在的页面模型类. +1. 像上面描述过的那样重写C#页面模型类,但不需要替换已存在的页面模型类. 2. 像上面描述过的那样重写Razor页面,并且更改@model指向新的页面模型 #### 示例 diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index c64adcbb0f..56670b8dca 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -319,33 +319,33 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aliyun EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aliyun.Tests", "test\Volo.Abp.BlobStoring.Aliyun.Tests\Volo.Abp.BlobStoring.Aliyun.Tests.csproj", "{8E49687A-E69F-49F2-8DB0-428D0883A937}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Aws", "src\Volo.Abp.BlobStoring.Aws\Volo.Abp.BlobStoring.Aws.csproj", "{50968CDE-1029-4051-B2E5-B69D0ECF2A18}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aws", "src\Volo.Abp.BlobStoring.Aws\Volo.Abp.BlobStoring.Aws.csproj", "{50968CDE-1029-4051-B2E5-B69D0ECF2A18}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Aws.Tests", "test\Volo.Abp.BlobStoring.Aws.Tests\Volo.Abp.BlobStoring.Aws.Tests.csproj", "{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aws.Tests", "test\Volo.Abp.BlobStoring.Aws.Tests\Volo.Abp.BlobStoring.Aws.Tests.csproj", "{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Kafka", "src\Volo.Abp.Kafka\Volo.Abp.Kafka.csproj", "{2A864049-9CD5-4493-8CDB-C408474D43D4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Kafka", "src\Volo.Abp.Kafka\Volo.Abp.Kafka.csproj", "{2A864049-9CD5-4493-8CDB-C408474D43D4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EventBus.Kafka", "src\Volo.Abp.EventBus.Kafka\Volo.Abp.EventBus.Kafka.csproj", "{C1D891B0-AE83-42CB-987D-425A2787DE78}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.EventBus.Kafka", "src\Volo.Abp.EventBus.Kafka\Volo.Abp.EventBus.Kafka.csproj", "{C1D891B0-AE83-42CB-987D-425A2787DE78}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.GlobalFeatures", "src\Volo.Abp.GlobalFeatures\Volo.Abp.GlobalFeatures.csproj", "{04F44063-C952-403A-815F-EFB778BDA125}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.GlobalFeatures", "src\Volo.Abp.GlobalFeatures\Volo.Abp.GlobalFeatures.csproj", "{04F44063-C952-403A-815F-EFB778BDA125}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.GlobalFeatures.Tests", "test\Volo.Abp.GlobalFeatures.Tests\Volo.Abp.GlobalFeatures.Tests.csproj", "{231F1581-AA21-44C3-BF27-51EB3AD5355C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.GlobalFeatures.Tests", "test\Volo.Abp.GlobalFeatures.Tests\Volo.Abp.GlobalFeatures.Tests.csproj", "{231F1581-AA21-44C3-BF27-51EB3AD5355C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Http.Client.IdentityModel.WebAssembly", "src\Volo.Abp.Http.Client.IdentityModel.WebAssembly\Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj", "{3D35A1E0-A9A1-404F-9B55-5F1A7EB6D5B8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Http.Client.IdentityModel.WebAssembly", "src\Volo.Abp.Http.Client.IdentityModel.WebAssembly\Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj", "{3D35A1E0-A9A1-404F-9B55-5F1A7EB6D5B8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.Client.Common", "src\Volo.Abp.AspNetCore.Mvc.Client.Common\Volo.Abp.AspNetCore.Mvc.Client.Common.csproj", "{8A22D962-016E-474A-8BB7-F831F0ABF3AC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.Client.Common", "src\Volo.Abp.AspNetCore.Mvc.Client.Common\Volo.Abp.AspNetCore.Mvc.Client.Common.csproj", "{8A22D962-016E-474A-8BB7-F831F0ABF3AC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly", "src\Volo.Abp.AspNetCore.Components.WebAssembly\Volo.Abp.AspNetCore.Components.WebAssembly.csproj", "{E1A62D10-F2FB-4040-BD60-11A3934058DF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Components.WebAssembly", "src\Volo.Abp.AspNetCore.Components.WebAssembly\Volo.Abp.AspNetCore.Components.WebAssembly.csproj", "{E1A62D10-F2FB-4040-BD60-11A3934058DF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlazoriseUI", "src\Volo.Abp.BlazoriseUI\Volo.Abp.BlazoriseUI.csproj", "{4EBDDB1B-D6C5-4FAE-B5A7-2171B18CDFA5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlazoriseUI", "src\Volo.Abp.BlazoriseUI\Volo.Abp.BlazoriseUI.csproj", "{4EBDDB1B-D6C5-4FAE-B5A7-2171B18CDFA5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme", "src\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj", "{ABC27C10-C0FF-44CB-B4FF-A09C0B79F695}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme", "src\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj", "{ABC27C10-C0FF-44CB-B4FF-A09C0B79F695}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly.Theming", "src\Volo.Abp.AspNetCore.Components.WebAssembly.Theming\Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj", "{29CA7471-4E3E-4E75-8B33-001DDF682F01}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Components.WebAssembly.Theming", "src\Volo.Abp.AspNetCore.Components.WebAssembly.Theming\Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj", "{29CA7471-4E3E-4E75-8B33-001DDF682F01}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Autofac.WebAssembly", "src\Volo.Abp.Autofac.WebAssembly\Volo.Abp.Autofac.WebAssembly.csproj", "{37F89B0B-1C6B-426F-A5EE-676D1956D9E9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Autofac.WebAssembly", "src\Volo.Abp.Autofac.WebAssembly\Volo.Abp.Autofac.WebAssembly.csproj", "{37F89B0B-1C6B-426F-A5EE-676D1956D9E9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Authentication.OpenIdConnect", "src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj", "{DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Authentication.OpenIdConnect", "src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj", "{DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.ExceptionHandling", "src\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj", "{B9D1ADCB-D552-4626-A1F1-78FF72C1E822}" EndProject diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor index 8e64b32022..6954057142 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor @@ -11,12 +11,14 @@
@Body + +
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/_Imports.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/_Imports.razor index f1ebc76453..7d695e9344 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/_Imports.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/_Imports.razor @@ -8,3 +8,5 @@ @using Volo.Abp.AspNetCore.Components.WebAssembly @using Blazorise @using Blazorise.DataGrid +@using Volo.Abp.BlazoriseUI; +@using Volo.Abp.BlazoriseUI.Components; \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj index 263e0fd4b5..97f9188b17 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj @@ -22,6 +22,7 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs index 7d59042806..1b5c5893d5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly _jsRuntime = jsRuntime; } - protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + protected async override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { await SetLanguageAsync(request, cancellationToken); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs index 2c834ddc87..fd70cc40e1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs @@ -1,17 +1,18 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.AspNetCore.Components.WebAssembly { public interface IUiMessageService { - Task InfoAsync(string message, string title = null); - - Task SuccessAsync(string message, string title = null); - - Task WarnAsync(string message, string title = null); - - Task ErrorAsync(string message, string title = null); - - Task ConfirmAsync(string message, string title = null); + Task InfoAsync(string message, string title = null, Action options = null); + + Task SuccessAsync(string message, string title = null, Action options = null); + + Task WarnAsync(string message, string title = null, Action options = null); + + Task ErrorAsync(string message, string title = null, Action options = null); + + Task ConfirmAsync(string message, string title = null, Action options = null); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs index a25bf75ae0..a9816dc325 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs @@ -5,5 +5,8 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly public interface IUiNotificationService { Task Info(string message); + Task Success(string message); + Task Warn(string message); + Task Error(string message); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs new file mode 100644 index 0000000000..2a00d29ec5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs @@ -0,0 +1,34 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public class NullUiMessageService : IUiMessageService, ITransientDependency + { + public Task InfoAsync(string message, string title = null, Action options = null) + { + return Task.CompletedTask; + } + + public Task SuccessAsync(string message, string title = null, Action options = null) + { + return Task.CompletedTask; + } + + public Task WarnAsync(string message, string title = null, Action options = null) + { + return Task.CompletedTask; + } + + public Task ErrorAsync(string message, string title = null, Action options = null) + { + return Task.CompletedTask; + } + + public Task ConfirmAsync(string message, string title = null, Action options = null) + { + return Task.FromResult(true); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs index d93aaa8e83..85ee10287c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs @@ -9,5 +9,19 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly { return Task.CompletedTask; } + + public Task Success(string message) + { + return Task.CompletedTask; + } + + public Task Warn(string message) + { + return Task.CompletedTask; + } + public Task Error(string message) + { + return Task.CompletedTask; + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs new file mode 100644 index 0000000000..4431d3c819 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs @@ -0,0 +1,35 @@ +using System; +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public class UiMessageEventArgs : EventArgs + { + public UiMessageEventArgs(UiMessageType messageType, string message, string title, UiMessageOptions options) + { + MessageType = messageType; + Message = message; + Title = title; + Options = options; + } + + public UiMessageEventArgs(UiMessageType messageType, string message, string title, UiMessageOptions options, TaskCompletionSource callback) + { + MessageType = messageType; + Message = message; + Title = title; + Options = options; + Callback = callback; + } + + public UiMessageType MessageType { get; set; } + + public string Message { get; } + + public string Title { get; } + + public UiMessageOptions Options { get; } + + public TaskCompletionSource Callback { get; } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs new file mode 100644 index 0000000000..59b2e8f400 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs @@ -0,0 +1,53 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + /// + /// Options to override message dialog appearance. + /// + public class UiMessageOptions + { + /// + /// If true, the message dialogue will be centered on the screen. + /// + public bool CenterMessage { get; set; } + + /// + /// If true, the message dialogue will show the large icon for the current message type. + /// + public bool ShowMessageIcon { get; set; } + + /// + /// Overrides the build-in message icon. + /// + public object MessageIcon { get; set; } + + /// + /// Custom text for the Ok button. + /// + public string OkButtonText { get; set; } + + /// + /// Custom icon for the Ok button. + /// + public object OkButtonIcon { get; set; } + + /// + /// Custom text for the Confirmation button. + /// + public string ConfirmButtonText { get; set; } + + /// + /// Custom icon for the Confirmation button. + /// + public object ConfirmButtonIcon { get; set; } + + /// + /// Custom text for the Cancel button. + /// + public string CancelButtonText { get; set; } + + /// + /// Custom icon for the Cancel button. + /// + public object CancelButtonIcon { get; set; } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs index 16fe041de4..93970de348 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using Microsoft.JSInterop; using Volo.Abp.DependencyInjection; @@ -14,27 +15,27 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly JsRuntime = jsRuntime; } - public async Task InfoAsync(string message, string title = null) + public async Task InfoAsync(string message, string title = null, Action options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - public async Task SuccessAsync(string message, string title = null) + public async Task SuccessAsync(string message, string title = null, Action options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - public async Task WarnAsync(string message, string title = null) + public async Task WarnAsync(string message, string title = null, Action options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - - public async Task ErrorAsync(string message, string title = null) + + public async Task ErrorAsync(string message, string title = null, Action options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - - public async Task ConfirmAsync(string message, string title = null) + + public async Task ConfirmAsync(string message, string title = null, Action options = null) { return await JsRuntime.InvokeAsync("confirm", message); } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs new file mode 100644 index 0000000000..5e3a77a3c5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + /// + /// Defines the possible ui message types with predefined actions. + /// + public enum UiMessageType + { + Info, + Success, + Warning, + Error, + Confirmation, + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs index 2c82095dac..0aeb97e89d 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Volo.Abp.DependencyInjection; using Volo.Abp.MultiTenancy; @@ -8,59 +7,24 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { public class MultiTenancyMiddleware : IMiddleware, ITransientDependency { - private readonly ITenantResolver _tenantResolver; - private readonly ITenantStore _tenantStore; + private readonly ITenantConfigurationProvider _tenantConfigurationProvider; private readonly ICurrentTenant _currentTenant; - private readonly ITenantResolveResultAccessor _tenantResolveResultAccessor; public MultiTenancyMiddleware( - ITenantResolver tenantResolver, - ITenantStore tenantStore, - ICurrentTenant currentTenant, - ITenantResolveResultAccessor tenantResolveResultAccessor) + ITenantConfigurationProvider tenantConfigurationProvider, + ICurrentTenant currentTenant) { - _tenantResolver = tenantResolver; - _tenantStore = tenantStore; + _tenantConfigurationProvider = tenantConfigurationProvider; _currentTenant = currentTenant; - _tenantResolveResultAccessor = tenantResolveResultAccessor; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - var resolveResult = _tenantResolver.ResolveTenantIdOrName(); - _tenantResolveResultAccessor.Result = resolveResult; - - TenantConfiguration tenant = null; - if (resolveResult.TenantIdOrName != null) - { - tenant = await FindTenantAsync(resolveResult.TenantIdOrName); - - if (tenant == null) - { - throw new BusinessException( - code: "Volo.AbpIo.MultiTenancy:010001", - message: "Tenant not found!", - details: "There is no tenant with the tenant id or name: " + resolveResult.TenantIdOrName - ); - } - } - + var tenant = await _tenantConfigurationProvider.GetAsync(saveResolveResult: true); using (_currentTenant.Change(tenant?.Id, tenant?.Name)) { await next(context); } } - - private async Task FindTenantAsync(string tenantIdOrName) - { - if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) - { - return await _tenantStore.FindAsync(parsedTenantId); - } - else - { - return await _tenantStore.FindAsync(tenantIdOrName); - } - } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs index ab35dbe804..ff0b9dd34f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs @@ -47,6 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button var icon = new TagBuilder("i"); icon.AddCssClass(GetIconClass(context, output)); output.Content.AppendHtml(icon); + output.Content.Append(" "); } protected virtual string GetIconClass(TagHelperContext context, TagHelperOutput output) @@ -80,4 +81,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs index 1bc6ab2f3a..31cccf2428 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs @@ -45,12 +45,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal sb.AppendLine(GetSaveButton()); break; case AbpModalButtons.Save | AbpModalButtons.Cancel: - sb.AppendLine(GetSaveButton()); sb.AppendLine(GetCancelButton()); + sb.AppendLine(GetSaveButton()); break; case AbpModalButtons.Save | AbpModalButtons.Close: - sb.AppendLine(GetSaveButton()); sb.AppendLine(GetCloseButton()); + sb.AppendLine(GetSaveButton()); break; } @@ -72,6 +72,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal element.AddCssClass("btn-primary"); element.Attributes.Add("data-busy-text", _localizer["SavingWithThreeDot"]); element.InnerHtml.AppendHtml(icon); + element.InnerHtml.AppendHtml(" "); element.InnerHtml.AppendHtml(span); return element.ToHtmlString(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/es.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/es.json new file mode 100644 index 0000000000..d6fd84dcbe --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/es.json @@ -0,0 +1,12 @@ +{ + "culture": "es", + "texts": { + "GivenTenantIsNotAvailable": "El inquilino {0} no está disponible", + "Tenant": "Inquilino", + "Switch": "cambiar", + "Name": "Nombre", + "SwitchTenant": "Cambiar inquilino", + "SwitchTenantHint": "Deje en blanco el campo nombre para cambiar el lado del host.", + "NotSelected": "No seleccionado" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml index 5fcd5951cd..6ab5267b72 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml @@ -13,7 +13,6 @@ @using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles @using Volo.Abp.MultiTenancy @using Volo.Abp.Localization -@inject IAbpAntiForgeryManager AbpAntiForgeryManager @inject IBrandingProvider BrandingProvider @inject IOptions MultiTenancyOptions @inject ICurrentTenant CurrentTenant @@ -22,7 +21,6 @@ @{ Layout = null; - AbpAntiForgeryManager.SetCookie(); var containerClass = ViewBag.FluidLayout == true ? "container-fluid" : "container"; //TODO: Better and type-safe options var rtl = CultureHelper.IsRtl ? "rtl" : string.Empty; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml index 7b06538510..d3ebd2f57f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml @@ -9,12 +9,10 @@ @using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetScripts @using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles @using Volo.Abp.Localization -@inject IAbpAntiForgeryManager AbpAntiForgeryManager @inject IBrandingProvider BrandingProvider @inject IPageLayout PageLayout @{ Layout = null; - AbpAntiForgeryManager.SetCookie(); var containerClass = ViewBag.FluidLayout == true ? "container-fluid" : "container"; //TODO: Better and type-safe options var pageTitle = ViewBag.Title == null ? BrandingProvider.AppName : ViewBag.Title; //TODO: Discard to get from Title diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml index 9871bcbb25..2176782a70 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml @@ -8,12 +8,10 @@ @using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetScripts @using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles @using Volo.Abp.Localization -@inject IAbpAntiForgeryManager AbpAntiForgeryManager @inject IBrandingProvider BrandingProvider @inject IPageLayout PageLayout @{ Layout = null; - AbpAntiForgeryManager.SetCookie(); var containerClass = ViewBag.FluidLayout == true ? "container-fluid" : "container"; //TODO: Better and type-safe options var pageTitle = ViewBag.Title == null ? BrandingProvider.AppName : ViewBag.Title; //TODO: Discard to get from Title diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 88a81fa1ec..3097a3c725 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Localization; using Volo.Abp.ApiVersioning; +using Volo.Abp.AspNetCore.Mvc.AntiForgery; using Volo.Abp.AspNetCore.Mvc.ApiExploring; using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.AspNetCore.Mvc.DataAnnotations; @@ -94,7 +95,10 @@ namespace Volo.Abp.AspNetCore.Mvc } }); - var mvcCoreBuilder = context.Services.AddMvcCore(); + var mvcCoreBuilder = context.Services.AddMvcCore(options => + { + options.Filters.Add(new AbpAutoValidateAntiforgeryTokenAttribute()); + }); context.Services.ExecutePreConfiguredActions(mvcCoreBuilder); var abpMvcDataAnnotationsLocalizationOptions = context.Services diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpMvcOptionsExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpMvcOptionsExtensions.cs index a2f1b1b523..9ff444001b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpMvcOptionsExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpMvcOptionsExtensions.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Auditing; +using Volo.Abp.AspNetCore.Mvc.Content; using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.AspNetCore.Mvc.ExceptionHandling; using Volo.Abp.AspNetCore.Mvc.Features; @@ -21,6 +22,13 @@ namespace Volo.Abp.AspNetCore.Mvc AddPageFilters(options); AddModelBinders(options); AddMetadataProviders(options, services); + AddFormatters(options); + } + + private static void AddFormatters(MvcOptions options) + { + options.InputFormatters.Insert(0, new RemoteStreamContentInputFormatter()); + options.OutputFormatters.Insert(0, new RemoteStreamContentOutputFormatter()); } private static void AddConventions(MvcOptions options, IServiceCollection services) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryCookieNameProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryCookieNameProvider.cs new file mode 100644 index 0000000000..66cd8701de --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryCookieNameProvider.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +{ + public class AbpAntiForgeryCookieNameProvider : ITransientDependency + { + private readonly IOptionsSnapshot _namedOptionsAccessor; + private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions; + + public AbpAntiForgeryCookieNameProvider( + IOptionsSnapshot namedOptionsAccessor, + IOptions abpAntiForgeryOptions) + { + _namedOptionsAccessor = namedOptionsAccessor; + _abpAntiForgeryOptions = abpAntiForgeryOptions.Value; + } + + public virtual string GetAuthCookieNameOrNull() + { + if (_abpAntiForgeryOptions.AuthCookieSchemaName == null) + { + return null; + } + + return _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthCookieSchemaName)?.Cookie?.Name; + } + + public virtual string GetAntiForgeryCookieNameOrNull() + { + return _abpAntiForgeryOptions.TokenCookie.Name; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryManagerAspNetCoreExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryManagerAspNetCoreExtensions.cs deleted file mode 100644 index c5c992b364..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryManagerAspNetCoreExtensions.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Volo.Abp.AspNetCore.Mvc.AntiForgery -{ - public static class AbpAntiForgeryManagerAspNetCoreExtensions - { - public static void SetCookie(this IAbpAntiForgeryManager manager) - { - manager.HttpContext.Response.Cookies.Append(manager.Options.TokenCookieName, manager.GenerateToken()); - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs index 0dc573fd5d..197cab8ac6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs @@ -1,23 +1,69 @@ -namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Http; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery { public class AbpAntiForgeryOptions { /// - /// Get/sets cookie name to transfer Anti Forgery token between server and client. - /// Default value: "XSRF-TOKEN". + /// Use to set the cookie options to transfer Anti Forgery token between server and client. + /// Default name of the cookie: "XSRF-TOKEN". /// - public string TokenCookieName { get; set; } + public CookieBuilder TokenCookie { get; } /// - /// Get/sets header name to transfer Anti Forgery token from client to the server. - /// Default value: "X-XSRF-TOKEN". + /// Used to find auth cookie when validating Anti Forgery token. + /// Default value: "Identity.Application". /// - public string TokenHeaderName { get; set; } + public string AuthCookieSchemaName { get; set; } + + /// + /// Default value: true. + /// + public bool AutoValidate { get; set; } = true; + + /// + /// A predicate to filter types to auto-validate. + /// Return true to select the type to validate. + /// Default: returns true for all given types. + /// + [NotNull] + public Predicate AutoValidateFilter + { + get => _autoValidateFilter; + set => _autoValidateFilter = Check.NotNull(value, nameof(value)); + } + private Predicate _autoValidateFilter; + + /// + /// Default methods: "GET", "HEAD", "TRACE", "OPTIONS". + /// + [NotNull] + public HashSet AutoValidateIgnoredHttpMethods + { + get => _autoValidateIgnoredHttpMethods; + set => _autoValidateIgnoredHttpMethods = Check.NotNull(value, nameof(value)); + } + private HashSet _autoValidateIgnoredHttpMethods; public AbpAntiForgeryOptions() { - TokenCookieName = "XSRF-TOKEN"; - TokenHeaderName = "X-XSRF-TOKEN"; + AutoValidateFilter = type => true; + + TokenCookie = new CookieBuilder + { + Name = "XSRF-TOKEN", + HttpOnly = false, + IsEssential = true, + SameSite = SameSiteMode.None, + Expiration = TimeSpan.FromDays(3650) //10 years! + }; + + AuthCookieSchemaName = "Identity.Application"; + + AutoValidateIgnoredHttpMethods = new HashSet {"GET", "HEAD", "TRACE", "OPTIONS"}; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAttribute.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAttribute.cs new file mode 100644 index 0000000000..346d5e9db4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAttribute.cs @@ -0,0 +1,37 @@ +using System; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class AbpAutoValidateAntiforgeryTokenAttribute : Attribute, IFilterFactory, IOrderedFilter + { + /// + /// Gets the order value for determining the order of execution of filters. Filters execute in + /// ascending numeric value of the property. + /// + /// + /// + /// Filters are executed in a sequence determined by an ascending sort of the property. + /// + /// + /// The default Order for this attribute is 1000 because it must run after any filter which does authentication + /// or login in order to allow them to behave as expected (ie Unauthenticated or Redirect instead of 400). + /// + /// + /// Look at for more detailed info. + /// + /// + public int Order { get; set; } = 1000; + + /// + public bool IsReusable => true; + + /// + public IFilterMetadata CreateInstance(IServiceProvider serviceProvider) + { + return serviceProvider.GetRequiredService(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs new file mode 100644 index 0000000000..8affb3aa08 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs @@ -0,0 +1,65 @@ +using System; +using Microsoft.AspNetCore.Antiforgery; +using Microsoft.AspNetCore.Mvc.Abstractions; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +{ + public class AbpAutoValidateAntiforgeryTokenAuthorizationFilter : AbpValidateAntiforgeryTokenAuthorizationFilter, ITransientDependency + { + private readonly AbpAntiForgeryOptions _options; + + public AbpAutoValidateAntiforgeryTokenAuthorizationFilter( + IAntiforgery antiforgery, + AbpAntiForgeryCookieNameProvider antiForgeryCookieNameProvider, + IOptions options, + ILogger logger) + : base( + antiforgery, + antiForgeryCookieNameProvider, + logger) + { + _options = options.Value; + } + + protected override bool ShouldValidate(AuthorizationFilterContext context) + { + if (!_options.AutoValidate) + { + return false; + } + + if(context.ActionDescriptor.IsControllerAction()) + { + var controllerType = context.ActionDescriptor + .AsControllerActionDescriptor() + .ControllerTypeInfo + .AsType(); + + if (!_options.AutoValidateFilter(controllerType)) + { + return false; + } + } + + if (IsIgnoredHttpMethod(context)) + { + return false; + } + + return base.ShouldValidate(context); + } + + protected virtual bool IsIgnoredHttpMethod(AuthorizationFilterContext context) + { + return context.HttpContext + .Request + .Method + .ToUpperInvariant() + .IsIn(_options.AutoValidateIgnoredHttpMethods); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiForgeryTokenAttribute.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiForgeryTokenAttribute.cs new file mode 100644 index 0000000000..853f642b29 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiForgeryTokenAttribute.cs @@ -0,0 +1,37 @@ +using System; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class AbpValidateAntiForgeryTokenAttribute : Attribute, IFilterFactory, IOrderedFilter + { + /// + /// Gets the order value for determining the order of execution of filters. Filters execute in + /// ascending numeric value of the property. + /// + /// + /// + /// Filters are executed in an ordering determined by an ascending sort of the property. + /// + /// + /// The default Order for this attribute is 1000 because it must run after any filter which does authentication + /// or login in order to allow them to behave as expected (ie Unauthenticated or Redirect instead of 400). + /// + /// + /// Look at for more detailed info. + /// + /// + public int Order { get; set; } = 1000; + + /// + public bool IsReusable => true; + + /// + public IFilterMetadata CreateInstance(IServiceProvider serviceProvider) + { + return serviceProvider.GetRequiredService(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs new file mode 100644 index 0000000000..fd0c5e6a01 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs @@ -0,0 +1,81 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Antiforgery; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.Extensions.Logging; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +{ + public class AbpValidateAntiforgeryTokenAuthorizationFilter : IAsyncAuthorizationFilter, IAntiforgeryPolicy, ITransientDependency + { + private IAntiforgery _antiforgery; + private readonly AbpAntiForgeryCookieNameProvider _antiForgeryCookieNameProvider; + private readonly ILogger _logger; + + public AbpValidateAntiforgeryTokenAuthorizationFilter( + IAntiforgery antiforgery, + AbpAntiForgeryCookieNameProvider antiForgeryCookieNameProvider, + ILogger logger) + { + _antiforgery = antiforgery; + _logger = logger; + _antiForgeryCookieNameProvider = antiForgeryCookieNameProvider; + } + + public async Task OnAuthorizationAsync(AuthorizationFilterContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (!context.IsEffectivePolicy(this)) + { + _logger.LogInformation("Skipping the execution of current filter as its not the most effective filter implementing the policy " + typeof(IAntiforgeryPolicy)); + return; + } + + if (ShouldValidate(context)) + { + try + { + await _antiforgery.ValidateRequestAsync(context.HttpContext); + } + catch (AntiforgeryValidationException exception) + { + _logger.LogError(exception.Message, exception); + context.Result = new AntiforgeryValidationFailedResult(); + } + } + } + + protected virtual bool ShouldValidate(AuthorizationFilterContext context) + { + var authCookieName = _antiForgeryCookieNameProvider.GetAuthCookieNameOrNull(); + + //Always perform antiforgery validation when request contains authentication cookie + if (authCookieName != null && + context.HttpContext.Request.Cookies.ContainsKey(authCookieName)) + { + return true; + } + + var antiForgeryCookieName = _antiForgeryCookieNameProvider.GetAntiForgeryCookieNameOrNull(); + + //No need to validate if antiforgery cookie is not sent. + //That means the request is sent from a non-browser client. + //See https://github.com/aspnet/Antiforgery/issues/115 + if (antiForgeryCookieName != null && + !context.HttpContext.Request.Cookies.ContainsKey(antiForgeryCookieName)) + { + return false; + } + + // Anything else requires a token. + return true; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AspNetCoreAbpAntiForgeryManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AspNetCoreAbpAntiForgeryManager.cs index f016c36671..cf8143c50a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AspNetCoreAbpAntiForgeryManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AspNetCoreAbpAntiForgeryManager.cs @@ -7,9 +7,9 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery { public class AspNetCoreAbpAntiForgeryManager : IAbpAntiForgeryManager, ITransientDependency { - public AbpAntiForgeryOptions Options { get; } + protected AbpAntiForgeryOptions Options { get; } - public HttpContext HttpContext => _httpContextAccessor.HttpContext; + protected HttpContext HttpContext => _httpContextAccessor.HttpContext; private readonly IAntiforgery _antiforgery; private readonly IHttpContextAccessor _httpContextAccessor; @@ -24,14 +24,18 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery Options = options.Value; } - public void SetCookie() + public virtual void SetCookie() { - HttpContext.Response.Cookies.Append(Options.TokenCookieName, GenerateToken()); + HttpContext.Response.Cookies.Append( + Options.TokenCookie.Name, + GenerateToken(), + Options.TokenCookie.Build(HttpContext) + ); } - public string GenerateToken() + public virtual string GenerateToken() { return _antiforgery.GetAndStoreTokens(_httpContextAccessor.HttpContext).RequestToken; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/IAbpAntiForgeryManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/IAbpAntiForgeryManager.cs index 359e857dcb..bd385c7538 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/IAbpAntiForgeryManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/IAbpAntiForgeryManager.cs @@ -1,13 +1,7 @@ -using Microsoft.AspNetCore.Http; - -namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery { public interface IAbpAntiForgeryManager { - AbpAntiForgeryOptions Options { get; } - - HttpContext HttpContext { get; } - void SetCookie(); string GenerateToken(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs index 67c373585e..89282110b9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.AntiForgery; namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations { @@ -9,17 +10,21 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations public class AbpApplicationConfigurationController : AbpController, IAbpApplicationConfigurationAppService { private readonly IAbpApplicationConfigurationAppService _applicationConfigurationAppService; + private readonly IAbpAntiForgeryManager _antiForgeryManager; public AbpApplicationConfigurationController( - IAbpApplicationConfigurationAppService applicationConfigurationAppService) + IAbpApplicationConfigurationAppService applicationConfigurationAppService, + IAbpAntiForgeryManager antiForgeryManager) { _applicationConfigurationAppService = applicationConfigurationAppService; + _antiForgeryManager = antiForgeryManager; } [HttpGet] public async Task GetAsync() { + _antiForgeryManager.SetCookie(); return await _applicationConfigurationAppService.GetAsync(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs index d4ce99dc12..7a773d92eb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.Mvc.AntiForgery; using Volo.Abp.Auditing; using Volo.Abp.Http; using Volo.Abp.Json; @@ -20,17 +21,20 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations private readonly IJsonSerializer _jsonSerializer; private readonly AbpAspNetCoreMvcOptions _options; private readonly IJavascriptMinifier _javascriptMinifier; + private readonly IAbpAntiForgeryManager _antiForgeryManager; public AbpApplicationConfigurationScriptController( IAbpApplicationConfigurationAppService configurationAppService, IJsonSerializer jsonSerializer, IOptions options, - IJavascriptMinifier javascriptMinifier) + IJavascriptMinifier javascriptMinifier, + IAbpAntiForgeryManager antiForgeryManager) { _configurationAppService = configurationAppService; _jsonSerializer = jsonSerializer; _options = options.Value; _javascriptMinifier = javascriptMinifier; + _antiForgeryManager = antiForgeryManager; } [HttpGet] @@ -39,6 +43,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations { var script = CreateAbpExtendScript(await _configurationAppService.GetAsync()); + _antiForgeryManager.SetCookie(); + return Content( _options.MinifyGeneratedScript == true ? _javascriptMinifier.Minify(script) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs index 617650d0e2..5cd1333f34 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs @@ -282,9 +282,20 @@ namespace Volo.Abp.AspNetCore.Mvc return; } + var parameterDescriptionNames = apiDescription + .ParameterDescriptions + .Select(p => p.Name) + .ToArray(); + + var methodParameterNames = method + .GetParameters() + .Where(IsNotFromServicesParameter) + .Select(GetMethodParamName) + .ToArray(); + var matchedMethodParamNames = ArrayMatcher.Match( - apiDescription.ParameterDescriptions.Select(p => p.Name).ToArray(), - method.GetParameters().Select(GetMethodParamName).ToArray() + parameterDescriptionNames, + methodParameterNames ); for (var i = 0; i < apiDescription.ParameterDescriptions.Count; i++) @@ -310,6 +321,11 @@ namespace Volo.Abp.AspNetCore.Mvc } } + private static bool IsNotFromServicesParameter(ParameterInfo parameterInfo) + { + return !parameterInfo.IsDefined(typeof(FromServicesAttribute), true); + } + public string GetMethodParamName(ParameterInfo parameterInfo) { var modelNameProvider = parameterInfo.GetCustomAttributes() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/InternalRemoteStreamContent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/InternalRemoteStreamContent.cs new file mode 100644 index 0000000000..aaaa849f4f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/InternalRemoteStreamContent.cs @@ -0,0 +1,25 @@ +using System.IO; +using Microsoft.AspNetCore.Http; +using Volo.Abp.Content; + +namespace Volo.Abp.AspNetCore.Mvc.Content +{ + internal class InternalRemoteStreamContent : IRemoteStreamContent + { + private readonly HttpContext _httpContext; + + public InternalRemoteStreamContent(HttpContext httpContext) + { + _httpContext = httpContext; + } + + public string ContentType => _httpContext.Request.ContentType; + + public long? ContentLength => _httpContext.Request.ContentLength; + + public Stream GetStream() + { + return _httpContext.Request.Body; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/RemoteStreamContentInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/RemoteStreamContentInputFormatter.cs new file mode 100644 index 0000000000..a4f5668b7d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/RemoteStreamContentInputFormatter.cs @@ -0,0 +1,28 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Net.Http.Headers; +using Microsoft.AspNetCore.Mvc.Formatters; +using Volo.Abp.Content; + +namespace Volo.Abp.AspNetCore.Mvc.Content +{ + public class RemoteStreamContentInputFormatter : InputFormatter + { + public RemoteStreamContentInputFormatter() + { + SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("*/*")); + } + + protected override bool CanReadType(Type type) + { + return typeof(IRemoteStreamContent) == type; + } + + public override Task ReadRequestBodyAsync(InputFormatterContext context) + { + return InputFormatterResult.SuccessAsync( + new InternalRemoteStreamContent(context.HttpContext) + ); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/RemoteStreamContentOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/RemoteStreamContentOutputFormatter.cs new file mode 100644 index 0000000000..d3ecfaff27 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Content/RemoteStreamContentOutputFormatter.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Formatters; +using Microsoft.Net.Http.Headers; +using Volo.Abp.Content; + +namespace Volo.Abp.AspNetCore.Mvc.Content +{ + public class RemoteStreamContentOutputFormatter : OutputFormatter + { + public RemoteStreamContentOutputFormatter() + { + SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("*/*")); + } + + protected override bool CanWriteType(Type type) + { + return typeof(IRemoteStreamContent).IsAssignableFrom(type); + } + + public async override Task WriteResponseBodyAsync(OutputFormatterWriteContext context) + { + var remoteStream = (IRemoteStreamContent)context.Object; + using (var stream = remoteStream.GetStream()) + { + await stream.CopyToAsync(context.HttpContext.Response.Body); + } + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs index f19de585b9..ab2003a595 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs @@ -7,24 +7,30 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ActionConstraints; using Microsoft.AspNetCore.Mvc.ApplicationModels; using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.Application.Services; using Volo.Abp.DependencyInjection; using Volo.Abp.GlobalFeatures; using Volo.Abp.Http; using Volo.Abp.Http.Modeling; -using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Reflection; namespace Volo.Abp.AspNetCore.Mvc.Conventions { public class AbpServiceConvention : IAbpServiceConvention, ITransientDependency { + public ILogger Logger { get; set; } + private readonly AbpAspNetCoreMvcOptions _options; - public AbpServiceConvention(IOptions options) + public AbpServiceConvention( + IOptions options) { _options = options.Value; + + Logger = NullLogger.Instance; } public void Apply(ApplicationModel application) @@ -34,9 +40,12 @@ namespace Volo.Abp.AspNetCore.Mvc.Conventions protected virtual void ApplyForControllers(ApplicationModel application) { + RemoveDuplicateControllers(application); + foreach (var controller in application.Controllers) { var controllerType = controller.ControllerType.AsType(); + var configuration = GetControllerSettingOrNull(controllerType); //TODO: We can remove different behaviour for ImplementsRemoteServiceInterface. If there is a configuration, then it should be applied! @@ -59,6 +68,26 @@ namespace Volo.Abp.AspNetCore.Mvc.Conventions } } + protected virtual void RemoveDuplicateControllers(ApplicationModel application) + { + var derivedControllerModels = new List(); + + foreach (var controllerModel in application.Controllers) + { + var baseControllerTypes = controllerModel.ControllerType + .GetBaseClasses(typeof(Controller), includeObject: false) + .Where(t => !t.IsAbstract) + .ToArray(); + if (baseControllerTypes.Length > 0) + { + derivedControllerModels.Add(controllerModel); + Logger.LogInformation($"Removing the controller {controllerModel.ControllerType.AssemblyQualifiedName} from the application model since it replaces the controller(s): {baseControllerTypes.Select(c => c.AssemblyQualifiedName).JoinAsString(", ")}"); + } + } + + application.Controllers.RemoveAll(derivedControllerModels); + } + protected virtual void ConfigureRemoteService(ControllerModel controller, [CanBeNull] ConventionalControllerSetting configuration) { ConfigureApiExplorer(controller); diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs index 263d0532d0..001fc6a02d 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.DependencyInjection; using Nito.AsyncEx; diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 7289ebe954..8723209c53 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -225,7 +225,7 @@ namespace Volo.Abp.BlazoriseUI { if (reference == null) { - reference = (TRef) ScopedServices.GetRequiredService(serviceType); + reference = (TRef)ScopedServices.GetRequiredService(serviceType); } return reference; @@ -266,7 +266,7 @@ namespace Volo.Abp.BlazoriseUI var input = await CreateGetListInputAsync(); var result = await AppService.GetListAsync(input); Entities = MapToListViewModel(result.Items); - TotalCount = (int?) result.TotalCount; + TotalCount = (int?)result.TotalCount; } private IReadOnlyList MapToListViewModel(IReadOnlyList dtos) diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs new file mode 100644 index 0000000000..f22ec3b653 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs @@ -0,0 +1,96 @@ +using System; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.BlazoriseUI +{ + [Dependency(ReplaceServices = true)] + public class BlazoriseUiMessageService : IUiMessageService, IScopedDependency + { + /// + /// An event raised after the message is received. Used to notify the message dialog. + /// + public event EventHandler MessageReceived; + + private readonly IStringLocalizer localizer; + + public ILogger Logger { get; set; } + + public BlazoriseUiMessageService( + IStringLocalizer localizer) + { + this.localizer = localizer; + + Logger = NullLogger.Instance; + } + + public Task InfoAsync(string message, string title = null, Action options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Info, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task SuccessAsync(string message, string title = null, Action options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Success, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task WarnAsync(string message, string title = null, Action options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Warning, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task ErrorAsync(string message, string title = null, Action options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Error, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public async Task ConfirmAsync(string message, string title = null, Action options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + var callback = new TaskCompletionSource(); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Confirmation, message, title, uiMessageOptions)); + + return await callback.Task; + } + + protected virtual UiMessageOptions CreateDefaultOptions() + { + return new UiMessageOptions + { + CenterMessage = true, + ShowMessageIcon = true, + OkButtonText = localizer["Ok"], + CancelButtonText = localizer["Cancel"], + ConfirmButtonText = localizer["Yes"], + }; + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs index 5163e05467..549a1f4d07 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs @@ -21,5 +21,20 @@ namespace Volo.Abp.BlazoriseUI Logger.LogInformation(message); return Task.CompletedTask; } + + public Task Success(string message) + { + return Task.CompletedTask; + } + + public Task Warn(string message) + { + return Task.CompletedTask; + } + + public Task Error(string message) + { + return Task.CompletedTask; + } } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor new file mode 100644 index 0000000000..cd8fd5cada --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor @@ -0,0 +1,48 @@ + + + + + + @Title + + + + @if ( ShowMessageIcon ) + { + + + + } + @Message + + + @if ( IsConfirmation ) + { + + + } + else + { + + } + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs new file mode 100644 index 0000000000..59e4aa3820 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs @@ -0,0 +1,140 @@ +using System; +using System.Text; +using System.Threading.Tasks; +using Blazorise; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.WebAssembly; + +namespace Volo.Abp.BlazoriseUI.Components +{ + public partial class UiMessageAlert : ComponentBase, IDisposable + { + protected Modal ModalRef { get; set; } + + protected virtual bool IsConfirmation + => MessageType == UiMessageType.Confirmation; + + protected virtual bool CenterMessage + => Options?.CenterMessage ?? true; + + protected virtual bool ShowMessageIcon + => Options?.ShowMessageIcon ?? true; + + protected virtual object MessageIcon => Options?.MessageIcon ?? MessageType switch + { + UiMessageType.Info => IconName.Info, + UiMessageType.Success => IconName.Check, + UiMessageType.Warning => IconName.Exclamation, + UiMessageType.Error => IconName.Times, + UiMessageType.Confirmation => IconName.QuestionCircle, + _ => null, + }; + + protected virtual string MessageIconColor => MessageType switch + { + // gets the color in the order of importance: Blazorise > Bootstrap > fallback color + UiMessageType.Info => "var(--b-theme-info, var(--info, #17a2b8))", + UiMessageType.Success => "var(--b-theme-success, var(--success, #28a745))", + UiMessageType.Warning => "var(--b-theme-warning, var(--warning, #ffc107))", + UiMessageType.Error => "var(--b-theme-danger, var(--danger, #dc3545))", + UiMessageType.Confirmation => "var(--b-theme-secondary, var(--secondary, #6c757d))", + _ => null, + }; + + protected virtual string MessageIconStyle + { + get + { + var sb = new StringBuilder(); + + sb.Append($"color:{MessageIconColor}"); + + return sb.ToString(); + } + } + + protected virtual string OkButtonText + => Options?.OkButtonText ?? "OK"; + + protected virtual string ConfirmButtonText + => Options?.ConfirmButtonText ?? "Confirm"; + + protected virtual string CancelButtonText + => Options?.CancelButtonText ?? "Cancel"; + + [Parameter] public UiMessageType MessageType { get; set; } + + [Parameter] public string Title { get; set; } + + [Parameter] public string Message { get; set; } + + [Parameter] public TaskCompletionSource Callback { get; set; } + + [Parameter] public UiMessageOptions Options { get; set; } + + [Parameter] public EventCallback Okayed { get; set; } + + [Parameter] public EventCallback Confirmed { get; set; } + + [Parameter] public EventCallback Canceled { get; set; } + + [Inject] protected BlazoriseUiMessageService UiMessageService { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + + UiMessageService.MessageReceived += OnMessageReceived; + } + + private void OnMessageReceived(object sender, UiMessageEventArgs e) + { + MessageType = e.MessageType; + Message = e.Message; + Title = e.Title; + Options = e.Options; + Callback = e.Callback; + + ModalRef.Show(); + } + + public void Dispose() + { + if (UiMessageService != null) + { + UiMessageService.MessageReceived -= OnMessageReceived; + } + } + + protected Task OnOkClicked() + { + ModalRef.Hide(); + + return Okayed.InvokeAsync(null); + } + + protected Task OnConfirmClicked() + { + ModalRef.Hide(); + + if (IsConfirmation && Callback != null) + { + Callback.SetResult(true); + } + + return Confirmed.InvokeAsync(null); + } + + protected Task OnCancelClicked() + { + ModalRef.Hide(); + + if (IsConfirmation && Callback != null) + { + Callback.SetResult(false); + } + + return Canceled.InvokeAsync(null); + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index df8685a36d..14a97eec0a 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor b/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor new file mode 100644 index 0000000000..37be71828c --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor @@ -0,0 +1,2 @@ +@using Microsoft.AspNetCore.Components.Web +@using Blazorise \ No newline at end of file diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpCachingStackExchangeRedisModule.cs b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpCachingStackExchangeRedisModule.cs index b0f7d68ee4..0f71cbdd25 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpCachingStackExchangeRedisModule.cs +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpCachingStackExchangeRedisModule.cs @@ -14,17 +14,21 @@ namespace Volo.Abp.Caching.StackExchangeRedis public override void ConfigureServices(ServiceConfigurationContext context) { var configuration = context.Services.GetConfiguration(); - - context.Services.AddStackExchangeRedisCache(options => + + var redisEnabled = configuration["Redis:IsEnabled"]; + if (redisEnabled.IsNullOrEmpty() || bool.Parse(redisEnabled)) { - var redisConfiguration = configuration["Redis:Configuration"]; - if (!redisConfiguration.IsNullOrEmpty()) + context.Services.AddStackExchangeRedisCache(options => { - options.Configuration = configuration["Redis:Configuration"]; - } - }); + var redisConfiguration = configuration["Redis:Configuration"]; + if (!redisConfiguration.IsNullOrEmpty()) + { + options.Configuration = redisConfiguration; + } + }); - context.Services.Replace(ServiceDescriptor.Singleton()); + context.Services.Replace(ServiceDescriptor.Singleton()); + } } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj index 2dfd66f4ab..13f81e730b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj +++ b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj @@ -14,7 +14,6 @@ - diff --git a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs index d1067a383f..958398e0c5 100644 --- a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System.Collections.Generic; +using System.ComponentModel; using System.Globalization; using System.Linq; @@ -49,6 +50,17 @@ namespace System return list.Contains(item); } + /// + /// Check if an item is in the given enumerable. + /// + /// Item to check + /// Items + /// Type of the items + public static bool IsIn(this T item, IEnumerable items) + { + return items.Contains(item); + } + /// /// Can be used to conditionally perform a function /// on an object and return the modified or the original object. diff --git a/framework/src/Volo.Abp.Core/System/AbpTypeExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpTypeExtensions.cs index e7c600eff6..1cf60a2906 100644 --- a/framework/src/Volo.Abp.Core/System/AbpTypeExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpTypeExtensions.cs @@ -55,14 +55,28 @@ namespace System return types.ToArray(); } + /// + /// Gets all base classes of this type. + /// + /// The type to get its base classes. + /// A type to stop going to the deeper base classes. This type will be be included in the returned array + /// True, to include the standard type in the returned array. + public static Type[] GetBaseClasses([NotNull] this Type type, Type stoppingType, bool includeObject = true) + { + Check.NotNull(type, nameof(type)); + + var types = new List(); + AddTypeAndBaseTypesRecursively(types, type.BaseType, includeObject, stoppingType); + return types.ToArray(); + } + private static void AddTypeAndBaseTypesRecursively( [NotNull] List types, - [CanBeNull] Type type, - bool includeObject) + [CanBeNull] Type type, + bool includeObject, + [CanBeNull] Type stoppingType = null) { - Check.NotNull(types, nameof(types)); - - if (type == null) + if (type == null || type == stoppingType) { return; } @@ -72,7 +86,7 @@ namespace System return; } - AddTypeAndBaseTypesRecursively(types, type.BaseType, includeObject); + AddTypeAndBaseTypesRecursively(types, type.BaseType, includeObject, stoppingType); types.Add(type); } } diff --git a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs index 2a858f7626..e014ee9e21 100644 --- a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs @@ -105,5 +105,19 @@ namespace System.Collections.Generic return items; } + + /// + /// Removes all items from the collection those satisfy the given . + /// + /// Type of the items in the collection + /// The collection + /// Items to be removed from the list + public static void RemoveAll([NotNull] this ICollection source, IEnumerable items) + { + foreach (var item in items) + { + source.Remove(item); + } + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Content/IRemoteStreamContent.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Content/IRemoteStreamContent.cs new file mode 100644 index 0000000000..bca259d422 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Content/IRemoteStreamContent.cs @@ -0,0 +1,13 @@ +using System.IO; + +namespace Volo.Abp.Content +{ + public interface IRemoteStreamContent + { + string ContentType { get; } + + long? ContentLength { get; } + + Stream GetStream(); + } +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs new file mode 100644 index 0000000000..f217101cea --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs @@ -0,0 +1,23 @@ +using System.IO; + +namespace Volo.Abp.Content +{ + public class RemoteStreamContent : IRemoteStreamContent + { + private readonly Stream _stream; + + public RemoteStreamContent(Stream stream) + { + _stream = stream; + } + + public virtual string ContentType { get; set; } + + public virtual long? ContentLength => _stream.Length; + + public virtual Stream GetStream() + { + return _stream; + } + } +} diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json new file mode 100644 index 0000000000..4563876228 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json @@ -0,0 +1,6 @@ +{ + "culture": "es", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} no puede tener más de {1}! Incremente {2}.{3} en el lado del servidor para obtener más resultados." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json index 33c59be8b5..da1d7fde95 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json @@ -18,6 +18,8 @@ "Description:Abp.Mailing.Smtp.Password": "La contraseña del ususario asociado a las credenciales.", "Description:Abp.Mailing.Smtp.Domain": "El dominio o equipo que valida las credenciales.", "Description:Abp.Mailing.Smtp.EnableSsl": "Si SmtpClient usa Secure Sockets Layer (SSL) para encriptar la conección.", - "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Si las credenciales por defecto se envían con los request." + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Si las credenciales por defecto se envían con los request.", + "TextTemplate:StandardEmailTemplates.Layout": "Plantilla de email por defecto", + "TextTemplate:StandardEmailTemplates.Message": "Plantilla de mensaje simple para emails" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs index a019d29a49..2463062cde 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs @@ -5,32 +5,29 @@ using Volo.Abp.Domain.Repositories.EntityFrameworkCore; namespace Volo.Abp.Domain.Repositories { - //TODO: Should work for any IRepository implementation - public static class EfCoreRepositoryExtensions { - public static DbContext GetDbContext(this IReadOnlyBasicRepository repository) - where TEntity : class, IEntity + public static DbContext GetDbContext(this IReadOnlyBasicRepository repository) + where TEntity : class, IEntity { return repository.ToEfCoreRepository().DbContext; } - public static DbSet GetDbSet(this IReadOnlyBasicRepository repository) - where TEntity : class, IEntity + public static DbSet GetDbSet(this IReadOnlyBasicRepository repository) + where TEntity : class, IEntity { return repository.ToEfCoreRepository().DbSet; } - public static IEfCoreRepository ToEfCoreRepository(this IReadOnlyBasicRepository repository) - where TEntity : class, IEntity + public static IEfCoreRepository ToEfCoreRepository(this IReadOnlyBasicRepository repository) + where TEntity : class, IEntity { - var efCoreRepository = repository as IEfCoreRepository; - if (efCoreRepository == null) + if (repository is IEfCoreRepository efCoreRepository) { - throw new ArgumentException("Given repository does not implement " + typeof(IEfCoreRepository).AssemblyQualifiedName, nameof(repository)); + return efCoreRepository; } - return efCoreRepository; + throw new ArgumentException("Given repository does not implement " + typeof(IEfCoreRepository).AssemblyQualifiedName, nameof(repository)); } } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs index c86fc095c7..0e0b659ef1 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly AccessTokenProvider = accessTokenProvider; } - public override async Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) + public async override Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) { if (context.RemoteService.GetUseCurrentAccessToken() != false) { diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Content/ReferencedRemoteStreamContent.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Content/ReferencedRemoteStreamContent.cs new file mode 100644 index 0000000000..b99cec8a51 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Content/ReferencedRemoteStreamContent.cs @@ -0,0 +1,16 @@ +using System.IO; +using Volo.Abp.Content; + +namespace Volo.Abp.Http.Client.Content +{ + internal class ReferencedRemoteStreamContent : RemoteStreamContent + { + private readonly object[] _references; + + public ReferencedRemoteStreamContent(Stream stream, params object[] references) + : base(stream) + { + this._references = references; + } + } +} diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 5313457ba7..321d538044 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -10,9 +10,11 @@ using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; +using Volo.Abp.Content; using Volo.Abp.DependencyInjection; using Volo.Abp.DynamicProxy; using Volo.Abp.Http.Client.Authentication; +using Volo.Abp.Http.Client.Content; using Volo.Abp.Http.Modeling; using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Json; @@ -103,17 +105,26 @@ namespace Volo.Abp.Http.Client.DynamicProxying private async Task MakeRequestAndGetResultAsync(IAbpMethodInvocation invocation) { - var responseAsString = await MakeRequestAsync(invocation); + var responseContent = await MakeRequestAsync(invocation); + if (typeof(T) == typeof(IRemoteStreamContent)) + { + /* returning a class that holds a reference to response + * content just to be sure that GC does not dispose of + * it before we finish doing our work with the stream */ + return (T)((object)new ReferencedRemoteStreamContent(await responseContent.ReadAsStreamAsync(), responseContent)); + } + + var stringContent = await responseContent.ReadAsStringAsync(); if (typeof(T) == typeof(string)) { - return (T)Convert.ChangeType(responseAsString, typeof(T)); + return (T)(object)stringContent; } - return JsonSerializer.Deserialize(responseAsString); + return JsonSerializer.Deserialize(await responseContent.ReadAsStringAsync()); } - private async Task MakeRequestAsync(IAbpMethodInvocation invocation) + private async Task MakeRequestAsync(IAbpMethodInvocation invocation) { var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var remoteServiceConfig = AbpRemoteServiceOptions.RemoteServices.GetConfigurationOrDefault(clientConfig.RemoteServiceName); @@ -140,14 +151,16 @@ namespace Volo.Abp.Http.Client.DynamicProxying ) ); - var response = await client.SendAsync(requestMessage, GetCancellationToken()); + var response = await client.SendAsync(requestMessage, + HttpCompletionOption.ResponseHeadersRead /*this will buffer only the headers, the content will be used as a stream*/, + GetCancellationToken()); if (!response.IsSuccessStatusCode) { await ThrowExceptionForResponseAsync(response); } - return await response.Content.ReadAsStringAsync(); + return response.Content; } private ApiVersionInfo GetApiVersionInfo(ActionApiDescriptionModel action) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs index afc5f9e4f0..7aacfaad02 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Net.Http; using System.Text; using JetBrains.Annotations; +using Volo.Abp.Content; using Volo.Abp.Http.Modeling; using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Json; @@ -12,24 +13,20 @@ namespace Volo.Abp.Http.Client.DynamicProxying public static class RequestPayloadBuilder { [CanBeNull] - public static HttpContent BuildContent(ActionApiDescriptionModel action,IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) + public static HttpContent BuildContent(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) { var body = GenerateBody(action, methodArguments, jsonSerializer); if (body != null) { - return new StringContent(body, Encoding.UTF8, MimeTypes.Application.Json); + return body; } body = GenerateFormPostData(action, methodArguments); - if (body != null) - { - return new StringContent(body, Encoding.UTF8, MimeTypes.Application.XWwwFormUrlencoded); - } - return null; + return body; } - private static string GenerateBody(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) + private static HttpContent GenerateBody(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) { var parameters = action .Parameters @@ -54,10 +51,20 @@ namespace Volo.Abp.Http.Client.DynamicProxying return null; } - return jsonSerializer.Serialize(value); + if (value is IRemoteStreamContent remoteStreamContent) + { + var content = new StreamContent(remoteStreamContent.GetStream()); + content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(remoteStreamContent.ContentType); + content.Headers.ContentLength = remoteStreamContent.ContentLength; + return content; + } + else + { + return new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json); + } } - private static string GenerateFormPostData(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) + private static HttpContent GenerateFormPostData(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) { var parameters = action .Parameters @@ -86,7 +93,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying isFirstParam = false; } - return postDataBuilder.ToString(); + return new StringContent(postDataBuilder.ToString(), Encoding.UTF8, MimeTypes.Application.XWwwFormUrlencoded); } } } diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json new file mode 100644 index 0000000000..365856425e --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json @@ -0,0 +1,19 @@ +{ + "culture": "es", + "texts": { + "DisplayName:Abp.Ldap.ServerHost": "Server host", + "Description:Abp.Ldap.ServerHost": "Servidor host", + + "DisplayName:Abp.Ldap.ServerPort": "Server port", + "Description:Abp.Ldap.ServerPort": "Puerto del servidor host", + + "DisplayName:Abp.Ldap.BaseDc": "Base domain component", + "Description:Abp.Ldap.BaseDc": "Dominio base", + + "DisplayName:Abp.Ldap.UserName": "Username", + "Description:Abp.Ldap.UserName": "Nombre de usuario", + + "DisplayName:Abp.Ldap.Password": "Password", + "Description:Abp.Ldap.Password": "Contraseña" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs index 4cd6ae9527..cd5fb5c3b3 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs @@ -1,4 +1,4 @@ -using System; +using System; using Volo.Abp.DependencyInjection; namespace Volo.Abp.MultiTenancy diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs new file mode 100644 index 0000000000..010a10791a --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.MultiTenancy +{ + public interface ITenantConfigurationProvider + { + Task GetAsync(bool saveResolveResult = false); + } +} diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs new file mode 100644 index 0000000000..a89c44b465 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs @@ -0,0 +1,62 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.MultiTenancy +{ + public class TenantConfigurationProvider : ITenantConfigurationProvider, ITransientDependency + { + protected virtual ITenantResolver TenantResolver { get; } + protected virtual ITenantStore TenantStore { get; } + protected virtual ITenantResolveResultAccessor TenantResolveResultAccessor { get; } + + public TenantConfigurationProvider( + ITenantResolver tenantResolver, + ITenantStore tenantStore, + ITenantResolveResultAccessor tenantResolveResultAccessor) + { + TenantResolver = tenantResolver; + TenantStore = tenantStore; + TenantResolveResultAccessor = tenantResolveResultAccessor; + } + + public virtual async Task GetAsync(bool saveResolveResult = false) + { + var resolveResult = TenantResolver.ResolveTenantIdOrName(); + + if (saveResolveResult) + { + TenantResolveResultAccessor.Result = resolveResult; + } + + TenantConfiguration tenant = null; + if (resolveResult.TenantIdOrName != null) + { + tenant = await FindTenantAsync(resolveResult.TenantIdOrName); + + if (tenant == null) + { + throw new BusinessException( + code: "Volo.AbpIo.MultiTenancy:010001", + message: "Tenant not found!", + details: "There is no tenant with the tenant id or name: " + resolveResult.TenantIdOrName + ); + } + } + + return tenant; + } + + protected virtual async Task FindTenantAsync(string tenantIdOrName) + { + if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) + { + return await TenantStore.FindAsync(parsedTenantId); + } + else + { + return await TenantStore.FindAsync(tenantIdOrName); + } + } + } +} diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/CurrentPrincipalAccessorExtensions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/CurrentPrincipalAccessorExtensions.cs new file mode 100644 index 0000000000..63f83f8a5a --- /dev/null +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/CurrentPrincipalAccessorExtensions.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Security.Claims; + +namespace Volo.Abp.Security.Claims +{ + public static class CurrentPrincipalAccessorExtensions + { + public static IDisposable Change(this ICurrentPrincipalAccessor currentPrincipalAccessor, Claim claim) + { + return currentPrincipalAccessor.Change(new[] {claim}); + } + + public static IDisposable Change(this ICurrentPrincipalAccessor currentPrincipalAccessor, IEnumerable claims) + { + return currentPrincipalAccessor.Change(new ClaimsIdentity(claims)); + } + + public static IDisposable Change(this ICurrentPrincipalAccessor currentPrincipalAccessor, ClaimsIdentity claimsIdentity) + { + return currentPrincipalAccessor.Change(new ClaimsPrincipal(claimsIdentity)); + } + } +} diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json new file mode 100644 index 0000000000..a23fccc1c4 --- /dev/null +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json @@ -0,0 +1,7 @@ +{ + "culture": "es", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Zona horaria", + "Description:Abp.Timing.Timezone": "Zona horaria de la Aplicacion" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json index fb0bc45903..56d6b117cf 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json @@ -4,6 +4,7 @@ "Languages": "Lenguajes", "AreYouSure": "¿Está seguro?", "Cancel": "Cancelar", + "Clear": "Limpiar", "Yes": "Si", "No": "No", "Ok": "Aceptar", @@ -34,6 +35,8 @@ "PagerInfoEmpty": "Mostrando desde 0 hasta 0 de 0 registros", "PagerInfoFiltered": "(filtrado de un total de _MAX_ registros)", "NoDataAvailableInDatatable": "No hay datos", + "Total": "total", + "Selected": "seleccionado", "PagerShowMenuEntries": "Mostrar _MENU_ registros", "DatatableActionDropdownDefaultText": "Acciones", "ChangePassword": "Cambiar contraseña", @@ -41,6 +44,9 @@ "AreYouSureYouWantToCancelEditingWarningMessage": "Tiene cambios sin guardar.", "GoHomePage": "Ir a la página principal", "GoBack": "Atras", - "Search": "Buscar" + "Search": "Buscar", + "ItemWillBeDeletedMessageWithFormat": "Se eliminarán {0}!", + "ItemWillBeDeletedMessage": "Este itém será eliminado!", + "ManageYourAccount": "Administre su cuenta" } -} +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/es.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/es.json new file mode 100644 index 0000000000..baf2d0c45b --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/es.json @@ -0,0 +1,7 @@ +{ + "culture": "es", + "texts": { + "BirthDate": "Fecha de nacimiento", + "Value1": "Valor uno" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Utils/ArrayMacther_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Utils/ArrayMacther_Tests.cs index a066622748..f30dc082aa 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Utils/ArrayMacther_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Utils/ArrayMacther_Tests.cs @@ -10,7 +10,10 @@ namespace Volo.Abp.AspNetCore.Mvc.Utils new[] { "p1", "p2", "p3", "p4", "p5" }, new[] { "p1", "p2", "p2", "p2", "p3", "p4", "p5", "p5" }) ] - public void Should_Find_Correct_Items(string[] sourceArray, string[] destinationArray, string[] expectedArray) + public void Should_Find_Correct_Items( + string[] sourceArray, + string[] destinationArray, + string[] expectedArray) { var result = ArrayMatcher.Match(sourceArray, destinationArray); Assert.Equal(expectedArray, result); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json index fc327ad536..539ede118e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json @@ -3,7 +3,7 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^3.2.0", + "@abp/aspnetcore.mvc.ui.theme.shared": "^3.2.1", "highlight.js": "^9.13.1" }, "devDependencies": {} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock index 8252be1892..c4ed1c0ce8 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock @@ -2,30 +2,30 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.shared@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -34,145 +34,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json index 7d6c2e8636..7cb63c1ea1 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json @@ -3,8 +3,8 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0", - "@abp/prismjs": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1", + "@abp/prismjs": "^3.2.1" }, "devDependencies": {} } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/core/abp.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/core/abp.js +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index 7b0d3f4b79..1dd15e460d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,162 +41,162 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0.tgz#9c9f95c40639cabe89e6bc86ee0f33c853321225" - integrity sha512-WGonC5Hp4FCUBxevIt180QWIqOri0eO//mlRLBqj7gvo7H6zt5f4t90XKF24ZYWXjx7bCbIQQFt5t5ByeqdcJg== +"@abp/clipboard@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.1.tgz#ffb57db0e73ae7c96df78dc7b739e436c9654ae0" + integrity sha512-iLCMV8JVkvdDzWf83UlkSIuU4Tiz+/wdGjiCt7lQp538fCYO7EAqurfWwMbb1Kaz0CRFzt/+AbDrXw004AND2Q== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" clipboard "^2.0.6" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0.tgz#11c7c3023f11097a3eb26d8a0c04f7fa39d9531b" - integrity sha512-OafE/K8rC7popNQDh1J97AtPuxVeAFWh/msfHE3K5nmdYABpl8U7190ITw5COcVjjFLCEONpkkhfN/9ZdAQ8fQ== +"@abp/prismjs@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.1.tgz#8f8ef367c9a10c3ec871d721055fbed4a8ec867a" + integrity sha512-+wcKmi/F66qGRmTk+oYgYmJo+b9kQvJ+BG/+vIsN+n3Dzb/sjaDmc18pMFhEKWy7P/Yq28NxZdK+qO1LgzTktg== dependencies: - "@abp/clipboard" "~3.2.0" - "@abp/core" "~3.2.0" + "@abp/clipboard" "~3.2.1" + "@abp/core" "~3.2.1" prismjs "^1.20.0" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/framework/test/Volo.Abp.Core.Tests/System/AbpTypeExtensions_Tests.cs b/framework/test/Volo.Abp.Core.Tests/System/AbpTypeExtensions_Tests.cs index 382440a3f4..dceeda72b2 100644 --- a/framework/test/Volo.Abp.Core.Tests/System/AbpTypeExtensions_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/System/AbpTypeExtensions_Tests.cs @@ -6,7 +6,7 @@ namespace System public class AbpTypeExtensions_Tests { [Fact] - public void GetBaseClasses() + public void GetBaseClasses_Excluding_Object() { var baseClasses = typeof(MyClass).GetBaseClasses(includeObject: false); baseClasses.Length.ShouldBe(2); @@ -14,6 +14,14 @@ namespace System baseClasses[1].ShouldBe(typeof(MyBaseClass2)); } + [Fact] + public void GetBaseClasses_With_StoppingType() + { + var baseClasses = typeof(MyClass).GetBaseClasses(typeof(MyBaseClass1)); + baseClasses.Length.ShouldBe(1); + baseClasses[0].ShouldBe(typeof(MyBaseClass2)); + } + public abstract class MyBaseClass1 { diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/es.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/es.json new file mode 100644 index 0000000000..7cf144aab4 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/es.json @@ -0,0 +1,6 @@ +{ + "culture": "es", + "texts": { + "hello": "Hola" + } +} \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index 759fb11760..f5b0ee5e5d 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/package.json +++ b/modules/blogging/app/Volo.BloggingTestApp/package.json @@ -3,7 +3,7 @@ "name": "volo.blogtestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0", - "@abp/blogging": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1", + "@abp/blogging": "^3.2.1" } } \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/core/abp.js b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/core/abp.js +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index 0b75f07db8..0bd496f67d 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,214 +41,214 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/blogging@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.2.0.tgz#a963c128fe92666a1b0f9059c2e9fb6519545ad3" - integrity sha512-+moP5svgo7eo3vegepH9Dff66kXLojtDN/5iLXZeNQmf+7KFmB7eATzIMJgWQzgRm99lBRERiGpQcAtWgpxpVA== +"@abp/blogging@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.2.1.tgz#edd07431dff8faa69d79b2ecd672c646de27d561" + integrity sha512-4Rt43AvAIvXDRobpji1k+b8Imf2CSpQZf8Haz9K9E+MY4QHre4rrvL8U03kwwwvO5MI/9GXUoBMIdGdxtsrqqQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" - "@abp/owl.carousel" "~3.2.0" - "@abp/prismjs" "~3.2.0" - "@abp/tui-editor" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" + "@abp/owl.carousel" "~3.2.1" + "@abp/prismjs" "~3.2.1" + "@abp/tui-editor" "~3.2.1" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0.tgz#9c9f95c40639cabe89e6bc86ee0f33c853321225" - integrity sha512-WGonC5Hp4FCUBxevIt180QWIqOri0eO//mlRLBqj7gvo7H6zt5f4t90XKF24ZYWXjx7bCbIQQFt5t5ByeqdcJg== +"@abp/clipboard@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.1.tgz#ffb57db0e73ae7c96df78dc7b739e436c9654ae0" + integrity sha512-iLCMV8JVkvdDzWf83UlkSIuU4Tiz+/wdGjiCt7lQp538fCYO7EAqurfWwMbb1Kaz0CRFzt/+AbDrXw004AND2Q== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" clipboard "^2.0.6" -"@abp/codemirror@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.2.0.tgz#b9604d31591522b3c3c140830444422f9742c9d7" - integrity sha512-Qv/+g6NSsv5M3puE3MgF17JPvWytkG4PDMyEX8cf8DOe2FCb3p44EbFyN6sqMY5l621S7fhjIRJfMAZ9I5FcZQ== +"@abp/codemirror@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.2.1.tgz#093bf88d74a4ec2111afa84d47f643fee2e210dd" + integrity sha512-4Qe2/kDqlwlIlyrUVzirYkX713qZRG0Sn1pMSnXIb6JxJYFIxrxt8IxGy0o3IsL2xU3H2mnRTXSA0rFbQvVxRQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" codemirror "^5.54.0" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/highlight.js@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.2.0.tgz#b180ef024744599a647b942c278eefd58722280e" - integrity sha512-Hcc2RbjqbmIZWaKfWs/6utpwl5Ehc/tMC9hG1m61uXwO+3ISif5MCb1GQ1i2ycFJJRumdHgfm2tFAyGXGS9Z6Q== +"@abp/highlight.js@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.2.1.tgz#3ece76e83ab49fdf12ab0bd33c5b2cdaa93a988e" + integrity sha512-bxQnwXJifZgEqY1kOhBbUBRMih99u661FaKhM9VjZgPPjaASDbH9Af6w2n30zuUUJx+8hu0TvIE35yfnvfEPjw== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.2.0.tgz#6fdd0b7f43bffce569908ba907c85f351ff89164" - integrity sha512-dGyM9Zdj21Pf08KY/X2lYtDr+lMX8v6TPHMKQVpgkDQ3/fzWDcg0MAr4CWUpg+BGLIhpwDWyKVBI/nQtEG/ihg== +"@abp/markdown-it@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.2.1.tgz#b62d52302d300ee00726de8e1a328192923855dd" + integrity sha512-62Q67GNkwS5iYoiBTm47esljrIrowTaThJkx0/nQy5PRh+BZlVggyWMyS2O8BfSwAN3iXO5PEWjj7aH1EV2ujg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" markdown-it "^11.0.0" -"@abp/owl.carousel@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.2.0.tgz#dd4c0c0bd9b4cc033577fd885fa10ab4670ccaf1" - integrity sha512-bxVkjkW1gWTSFuyM1iqHY8esTf+65e/tUZIDf+El0/xLbVkygeAZZtumMnwkizCAzWifBpQSd3QgGkY+wtabVw== +"@abp/owl.carousel@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.2.1.tgz#97c1d353873027771f070c5aae31ec029c7b53e3" + integrity sha512-Tu/BlCGNun1sID0lIhT387vyEC7Pbyv6ZXbKjAZjgO+fRz3Je8XZ5gdyQ2Jfgr2/Nqc4uHNpJGZ38E+b4yUE6Q== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" owl.carousel "^2.3.4" -"@abp/prismjs@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0.tgz#11c7c3023f11097a3eb26d8a0c04f7fa39d9531b" - integrity sha512-OafE/K8rC7popNQDh1J97AtPuxVeAFWh/msfHE3K5nmdYABpl8U7190ITw5COcVjjFLCEONpkkhfN/9ZdAQ8fQ== +"@abp/prismjs@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.1.tgz#8f8ef367c9a10c3ec871d721055fbed4a8ec867a" + integrity sha512-+wcKmi/F66qGRmTk+oYgYmJo+b9kQvJ+BG/+vIsN+n3Dzb/sjaDmc18pMFhEKWy7P/Yq28NxZdK+qO1LgzTktg== dependencies: - "@abp/clipboard" "~3.2.0" - "@abp/core" "~3.2.0" + "@abp/clipboard" "~3.2.1" + "@abp/core" "~3.2.1" prismjs "^1.20.0" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/tui-editor@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.2.0.tgz#025d3348db0aa9f90aa01c49010a15227e029cc0" - integrity sha512-8dKALM8tRuMdoa1WNOekiwAdDwFAMjyf9wy3FiWLX/oyJOkQhRyxsT455TxQ2yt7pTDiY3DrYyF1xeqwxbGoRw== +"@abp/tui-editor@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.2.1.tgz#4cda3bb6a6dfd6413cd5a3520d98c923f54b4b4b" + integrity sha512-KvWc5ZkXGNAPb6ek0Y91/89BD9AfDQ/lBPB3aYydRe1A2NSMgpRQ4DXsCYaQmmsyAv5aAKJAmsqN89V7v8NoUQ== dependencies: - "@abp/codemirror" "~3.2.0" - "@abp/highlight.js" "~3.2.0" - "@abp/jquery" "~3.2.0" - "@abp/markdown-it" "~3.2.0" + "@abp/codemirror" "~3.2.1" + "@abp/highlight.js" "~3.2.1" + "@abp/jquery" "~3.2.1" + "@abp/markdown-it" "~3.2.1" tui-editor "^1.4.10" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/BlogDto.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/BlogDto.cs deleted file mode 100644 index 38b87e277c..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/BlogDto.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Volo.Blogging.Admin.Blogs -{ - public class BlogDto : FullAuditedEntityDto - { - public string Name { get; set; } - - public string ShortName { get; set; } - - public string Description { get; set; } - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/CreateBlogDto.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/CreateBlogDto.cs index 5f47311404..605d1b666b 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/CreateBlogDto.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/CreateBlogDto.cs @@ -1,9 +1,13 @@ +using System.ComponentModel.DataAnnotations; + namespace Volo.Blogging.Admin.Blogs { public class CreateBlogDto { + [Required] public string Name { get; set; } + [Required] public string ShortName { get; set; } public string Description { get; set; } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs index 3554413d5f..35d6d1c97e 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs @@ -2,6 +2,8 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.Blogging.Blogs; +using Volo.Blogging.Blogs.Dtos; namespace Volo.Blogging.Admin.Blogs { diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs index 529ace6e0d..759bdf31aa 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs @@ -1,9 +1,13 @@ -namespace Volo.Blogging.Admin.Blogs +using System.ComponentModel.DataAnnotations; + +namespace Volo.Blogging.Admin.Blogs { public class UpdateBlogDto { + [Required] public string Name { get; set; } + [Required] public string ShortName { get; set; } public string Description { get; set; } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs index 2f2cf74563..378fc46132 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs @@ -1,6 +1,7 @@ using AutoMapper; using Volo.Blogging.Admin.Blogs; using Volo.Blogging.Blogs; +using Volo.Blogging.Blogs.Dtos; namespace Volo.Blogging.Admin { diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs index 242ccb6330..b11bd481fe 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Blogging.Blogs; +using Volo.Blogging.Blogs.Dtos; namespace Volo.Blogging.Admin.Blogs { @@ -35,10 +36,12 @@ namespace Volo.Blogging.Admin.Blogs [Authorize(BloggingPermissions.Blogs.Create)] public async Task CreateAsync(CreateBlogDto input) { - var newBlog = await _blogRepository.InsertAsync(new Blog(GuidGenerator.Create(), input.Name, input.ShortName) + var newBlog = new Blog(GuidGenerator.Create(), input.Name, input.ShortName) { Description = input.Description - }); + }; + + newBlog = await _blogRepository.InsertAsync(newBlog); return ObjectMapper.Map(newBlog); } diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs index 782a05a42e..815604e871 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs @@ -5,6 +5,8 @@ using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc; using Volo.Blogging.Admin.Blogs; +using Volo.Blogging.Blogs; +using Volo.Blogging.Blogs.Dtos; namespace Volo.Blogging.Admin { diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/AbpBloggingAdminWebAutoMapperProfile.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/AbpBloggingAdminWebAutoMapperProfile.cs index 082daf9bae..35f83cd480 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/AbpBloggingAdminWebAutoMapperProfile.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/AbpBloggingAdminWebAutoMapperProfile.cs @@ -1,6 +1,8 @@ using AutoMapper; using Volo.Blogging.Admin.Blogs; using Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs; +using Volo.Blogging.Blogs; +using Volo.Blogging.Blogs.Dtos; using EditModel = Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs.EditModel; namespace Volo.Blogging.Admin diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs index ae275cd4e6..9c752e6c44 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp.Validation; using Volo.Blogging.Admin.Blogs; using Volo.Blogging.Blogs; +using Volo.Blogging.Blogs.Dtos; namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs { diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Blogs/Dtos/BlogDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/Blogs/Dtos/BlogDto.cs similarity index 99% rename from modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Blogs/Dtos/BlogDto.cs rename to modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/Blogs/Dtos/BlogDto.cs index 45aa60e171..fc72ae0d25 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Blogs/Dtos/BlogDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/Blogs/Dtos/BlogDto.cs @@ -11,4 +11,4 @@ namespace Volo.Blogging.Blogs.Dtos public string Description { get; set; } } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CreateCommentDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CreateCommentDto.cs index 917db5a41f..d2480ecf45 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CreateCommentDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CreateCommentDto.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; namespace Volo.Blogging.Comments.Dtos { @@ -8,6 +9,7 @@ namespace Volo.Blogging.Comments.Dtos public Guid PostId { get; set; } + [Required] public string Text { get; set; } } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs index d501c01bd7..0385feb9b8 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs @@ -1,7 +1,10 @@ -namespace Volo.Blogging.Comments.Dtos +using System.ComponentModel.DataAnnotations; + +namespace Volo.Blogging.Comments.Dtos { public class UpdateCommentDto { + [Required] public string Text { get; set; } } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs index 96cfbd6859..43dfb02e8c 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs @@ -19,6 +19,7 @@ namespace Volo.Blogging.Posts [DynamicStringLength(typeof(PostConsts), nameof(PostConsts.MaxUrlLength))] public string Url { get; set; } + [Required] [DynamicStringLength(typeof(PostConsts), nameof(PostConsts.MaxContentLength))] public string Content { get; set; } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/GetPostInput.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/GetPostInput.cs index 3eb6ff62b0..44b2ea20ec 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/GetPostInput.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/GetPostInput.cs @@ -1,11 +1,13 @@  using System; + using System.ComponentModel.DataAnnotations; -namespace Volo.Blogging.Posts + namespace Volo.Blogging.Posts { public class GetPostInput { + [Required] public string Url { get; set; } public Guid BlogId { get; set; } } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs index 16b54fedd6..988d708440 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using System.Reflection; namespace Volo.Blogging.Posts @@ -7,12 +8,16 @@ namespace Volo.Blogging.Posts { public Guid BlogId { get; set; } + [Required] public string Title { get; set; } + [Required] public string CoverImage { get; set; } + [Required] public string Url { get; set; } + [Required] public string Content { get; set; } public string Description { get; set; } diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs index 1b0a903d2e..ccc1002657 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Entities; using Volo.Blogging.Blogs.Dtos; @@ -28,6 +29,8 @@ namespace Volo.Blogging.Blogs public async Task GetByShortNameAsync(string shortName) { + Check.NotNullOrWhiteSpace(shortName, nameof(shortName)); + var blog = await _blogRepository.FindByShortNameAsync(shortName); if (blog == null) diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs index 8fdd12858d..e7cc7047e0 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs @@ -34,7 +34,7 @@ namespace Volo.Blogging.Files { if (input.Bytes.IsNullOrEmpty()) { - ThrowValidationException("Bytes can not be null or empty!", "Bytes"); + ThrowValidationException("Bytes of file can not be null or empty!", "Bytes"); } if (input.Bytes.Length > BloggingWebConsts.FileUploading.MaxFileSize) @@ -44,7 +44,7 @@ namespace Volo.Blogging.Files if (!ImageFormatHelper.IsValidImage(input.Bytes, FileUploadConsts.AllowedImageUploadFormats)) { - throw new UserFriendlyException("Not a valid image format!"); + throw new UserFriendlyException("Invalid image format!"); } var uniqueFileName = GenerateUniqueFileName(Path.GetExtension(input.Name)); diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index 798bf8e39f..70007a0c56 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -187,9 +187,7 @@ namespace Volo.Blogging.Posts private async Task RenameUrlIfItAlreadyExistAsync(Guid blogId, string url, Post existingPost = null) { - var postList = await _postRepository.GetListAsync(); - - if (postList.Where(p => p.Url == url).WhereIf(existingPost != null, p => existingPost.Id != p.Id).Any()) + if (await _postRepository.IsPostUrlInUseAsync(blogId, url, existingPost?.Id)) { return url + "-" + Guid.NewGuid().ToString().Substring(0, 5); } diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/IPostRepository.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/IPostRepository.cs index 02bd68a6b0..9a49590015 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/IPostRepository.cs +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/IPostRepository.cs @@ -9,8 +9,10 @@ namespace Volo.Blogging.Posts { Task> GetPostsByBlogId(Guid id); + Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null); + Task GetPostByUrl(Guid blogId, string url); - + Task> GetOrderedList(Guid blogId,bool descending = false); } } diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs index 01c5652902..b152f3ae7d 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs @@ -23,6 +23,18 @@ namespace Volo.Blogging.Posts return await DbSet.Where(p => p.BlogId == id).OrderByDescending(p=>p.CreationTime).ToListAsync(); } + public Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null) + { + var query = DbSet.Where(p => blogId == p.BlogId && p.Url == url); + + if (excludingPostId != null) + { + query = query.Where(p => excludingPostId != p.Id); + } + + return query.AnyAsync(); + } + public async Task GetPostByUrl(Guid blogId, string url) { var post = await DbSet.FirstOrDefaultAsync(p => p.BlogId == blogId && p.Url == url); diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs index 2e7675a898..e12e5f29de 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs @@ -21,6 +21,19 @@ namespace Volo.Blogging.Posts return await GetMongoQueryable().Where(p => p.BlogId == id).OrderByDescending(p => p.CreationTime).ToListAsync(); } + + public Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null) + { + var query = GetMongoQueryable().Where(p => blogId == p.BlogId && p.Url == url); + + if (excludingPostId != null) + { + query = query.Where(p => excludingPostId != p.Id); + } + + return query.AnyAsync(); + } + public async Task GetPostByUrl(Guid blogId, string url) { var post = await GetMongoQueryable().FirstOrDefaultAsync(p => p.BlogId == blogId && p.Url == url); @@ -36,12 +49,12 @@ namespace Volo.Blogging.Posts public async Task> GetOrderedList(Guid blogId, bool @descending = false) { var query = GetMongoQueryable().Where(x => x.BlogId == blogId); - + if (!descending) { return await query.OrderBy(x => x.CreationTime).ToListAsync(); } - + return await query.OrderByDescending(x => x.CreationTime).ToListAsync(); } } diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json index 32abffa6e8..ca54119683 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json @@ -3,6 +3,6 @@ "name": "client-simulation-web", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/core/abp.js b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/core/abp.js +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index 972be20fa8..9f74aafa41 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index 3c883b278e..b10b355025 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.2.0", - "@abp/ng.identity": "~3.2.0", - "@abp/ng.setting-management": "~3.2.0", - "@abp/ng.tenant-management": "~3.2.0", - "@abp/ng.theme.basic": "~3.2.0", + "@abp/ng.account": "~3.2.1", + "@abp/ng.identity": "~3.2.1", + "@abp/ng.setting-management": "~3.2.1", + "@abp/ng.tenant-management": "~3.2.1", + "@abp/ng.theme.basic": "~3.2.1", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0", diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json index 1806d9cad0..28c2183e6f 100644 --- a/modules/cms-kit/angular/projects/cms-kit/package.json +++ b/modules/cms-kit/angular/projects/cms-kit/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.2.0", - "@abp/ng.theme.shared": ">=3.2.0" + "@abp/ng.core": ">=3.2.1", + "@abp/ng.theme.shared": ">=3.2.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index fba2dab1f7..3c54abaaa7 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/core/abp.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/core/abp.js +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index 72a5d2df3d..b8e6718657 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json index 9b79ab6170..64a770f40e 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/core/abp.js b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/core/abp.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index a37f397509..fb3a5a17a8 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index 9b79ab6170..64a770f40e 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/core/abp.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/core/abp.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 1a8ccc322d..f89fd42bb2 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index 3c775e0c73..4dc0d9add5 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0", - "@abp/docs": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1", + "@abp/docs": "^3.2.1" } } diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/core/abp.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/core/abp.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index d3ad70f70e..b261cab6bf 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,45 +2,45 @@ # yarn lockfile v1 -"@abp/anchor-js@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.2.0.tgz#df7e4483d2fbc9c3160031e42e6b27fff5d24d7b" - integrity sha512-rA1H6YWvS4bqGevdGM9H+D84ESh+Ka9eg7RzGoWyP4yK+/+Kgj8aOXPXtUrYlETfGwqg4dXQ1iu+AQUELcOaMQ== +"@abp/anchor-js@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.2.1.tgz#c8ba822de20c3eef9dd4708d9d3de591c7a86804" + integrity sha512-Ip8hJbi5GML36Rizb3feUhvpf286n5xBt76+QN9BIW+cLX7U93ECFQEkKbxWEx4GffI5MeMy3VDjdlbzlev75w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" anchor-js "^4.2.2" -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -49,181 +49,181 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0.tgz#9c9f95c40639cabe89e6bc86ee0f33c853321225" - integrity sha512-WGonC5Hp4FCUBxevIt180QWIqOri0eO//mlRLBqj7gvo7H6zt5f4t90XKF24ZYWXjx7bCbIQQFt5t5ByeqdcJg== +"@abp/clipboard@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.1.tgz#ffb57db0e73ae7c96df78dc7b739e436c9654ae0" + integrity sha512-iLCMV8JVkvdDzWf83UlkSIuU4Tiz+/wdGjiCt7lQp538fCYO7EAqurfWwMbb1Kaz0CRFzt/+AbDrXw004AND2Q== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" clipboard "^2.0.6" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/docs@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.2.0.tgz#f4b5284af7ebbd1f5b9b741ebfb61ac2fd71fa4a" - integrity sha512-ZrCUHjrTba82NJRwZYUUyLxWIp6tu8ZdHpq1vnlfr5rZ+5m1vAx0dRi0VY3x50ZifIE65cqoI91F32fHYiE8KA== +"@abp/docs@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.2.1.tgz#2c5ed5c2f7696cfbf4068ad2046d8d175c298b26" + integrity sha512-3KE6t6u5GB+q7Y+SxPFxtvhtbgxiELPWrLDBkUZvI9u/QCrDzV1ZmlupgNhfKtk/T16s3JDXR6HtT67P3fOd1g== dependencies: - "@abp/anchor-js" "~3.2.0" - "@abp/clipboard" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/popper.js" "~3.2.0" - "@abp/prismjs" "~3.2.0" + "@abp/anchor-js" "~3.2.1" + "@abp/clipboard" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/popper.js" "~3.2.1" + "@abp/prismjs" "~3.2.1" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/popper.js@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.2.0.tgz#2b1c078ad56a8e80e4030154b0e30f9e07a5e103" - integrity sha512-mdmx6qrkZvOKYBD9n0cblMKygWYprn9Mw8BB468oV/vf6izzGYgiOsC2dtwXLrVsELIaPQMZZbKVeeyPxgiH0Q== +"@abp/popper.js@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.2.1.tgz#721d788582accf3ef61bff5772914311974cb3a6" + integrity sha512-AgqOsCPWX/GCY5RNpvkfBpKriCChAI1+kvO7m8h9vXpXfYITzeQ6TvR7x1iwhZTncv1zeUWcKTskq/J5U9DAcw== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" popper.js "^1.16.0" -"@abp/prismjs@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0.tgz#11c7c3023f11097a3eb26d8a0c04f7fa39d9531b" - integrity sha512-OafE/K8rC7popNQDh1J97AtPuxVeAFWh/msfHE3K5nmdYABpl8U7190ITw5COcVjjFLCEONpkkhfN/9ZdAQ8fQ== +"@abp/prismjs@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.1.tgz#8f8ef367c9a10c3ec871d721055fbed4a8ec867a" + integrity sha512-+wcKmi/F66qGRmTk+oYgYmJo+b9kQvJ+BG/+vIsN+n3Dzb/sjaDmc18pMFhEKWy7P/Yq28NxZdK+qO1LgzTktg== dependencies: - "@abp/clipboard" "~3.2.0" - "@abp/core" "~3.2.0" + "@abp/clipboard" "~3.2.1" + "@abp/core" "~3.2.1" prismjs "^1.20.0" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs index 01c15f0eee..0770ec5d72 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs @@ -19,7 +19,5 @@ namespace Volo.Docs.Admin.Documents Task RemoveFromCacheAsync(Guid documentId); Task ReindexAsync(Guid documentId); - - Task DeleteFromDatabaseAsync(Guid documentId); } } diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json index 3d22afabe9..4849da66e5 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json @@ -43,7 +43,6 @@ "RemovedFromCache": "تم الحذف من ذاكرة التخزين", "RemoveFromCacheConfirmation": "هل أنت متأكد من حذف هذا العنصر من ذاكرة التخزين؟", "ReIndexDocumentConfirmation": "هل أنت متأكد من إعادة فهرسة هذا العنصر؟", - "DeleteDocumentFromDbConfirmation": "هل أنت متأكد من حذف هذا العنصر من قاعدة البيانات؟", "DeleteFromDatabase": "حذف من قاعدة البيانات", "Deleted": "محذوف", "Search": "بحث", @@ -57,4 +56,4 @@ "FileName": "اسم الملف", "LastCachedTime": "وقت ذاكرة التخزين" } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json index f02fa96f50..fa65dc8a72 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json @@ -43,7 +43,6 @@ "RemovedFromCache": "Odebráno z mezipaměti", "RemoveFromCacheConfirmation": "Opravdu chcete tuto položku odebrat z mezipaměti?", "ReIndexDocumentConfirmation": "Opravdu chcete tuto položku reindexovat?", - "DeleteDocumentFromDbConfirmation": "Opravdu chcete tuto položku odstranit z databáze?", "DeleteFromDatabase": "Odstranit z databáze", "Deleted": "Vymazáno", "Search": "Vyhledávání", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json index 8b940df86d..2b1571c0b9 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json @@ -43,7 +43,6 @@ "RemovedFromCache": "Removed from cache", "RemoveFromCacheConfirmation": "Are you sure you want to remove this item from cache?", "ReIndexDocumentConfirmation": "Are you sure you want to reindex this item?", - "DeleteDocumentFromDbConfirmation": "Are you sure you want to delete this item from database?", "DeleteFromDatabase": "Delete from database", "Deleted": "Deleted", "Search": "Search", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json index 319a901004..530283c91d 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json @@ -41,8 +41,7 @@ "RemovedFromCache": "Önbellekten kaldırıldı", "RemoveFromCacheConfirmation": "Bu maddeyi önbellekten kaldırmak istediğiniz emin misiniz?", "ReIndexDocumentConfirmation": "Bu maddeyi yeniden indekslemek istediğinize emin misiniz?", - "DeleteDocumentFromDbConfirmation": "Bu maddeyi veritabanından silmek istediğinize emin misiniz?", "DeleteFromDatabase": "Veritabanından sil", "Deleted": "Silindi" } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index c6758127cf..4f1a493a2b 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -205,10 +205,7 @@ namespace Volo.Docs.Admin.Documents ); await _documentUpdateCache.RemoveAsync(documentUpdateInfoCacheKey); - - document.LastCachedTime = DateTime.MinValue; - - await _documentRepository.UpdateAsync(document); + await _documentRepository.DeleteAsync(document); } public async Task ReindexAsync(Guid documentId) @@ -218,12 +215,6 @@ namespace Volo.Docs.Admin.Documents await _documentFullSearch.AddOrUpdateAsync(document); } - public async Task DeleteFromDatabaseAsync(Guid documentId) - { - var document = await _documentRepository.GetAsync(documentId); - await _documentRepository.DeleteAsync(document); - } - private async Task UpdateDocumentUpdateInfoCache(Document document) { var cacheKey = $"DocumentUpdateInfo{document.ProjectId}#{document.Name}#{document.LanguageCode}#{document.Version}"; diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs index ff143bfdb0..99c3060f5d 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs @@ -63,12 +63,5 @@ namespace Volo.Docs.Admin { await _documentAdminAppService.ReindexAsync(documentId); } - - [HttpDelete] - [Route("DeleteDocumentFromDatabase")] - public async Task DeleteFromDatabaseAsync(Guid documentId) - { - await _documentAdminAppService.DeleteFromDatabaseAsync(documentId); - } } } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js index 3f0f30270f..23203a23f5 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js @@ -80,26 +80,7 @@ dataTable.ajax.reload(); }); }, - }, - { - text: l('DeleteFromDatabase'), - visible: abp.auth.isGranted( - 'Docs.Admin.Documents' - ), - confirmMessage: function (data) { - return l( - 'DeleteDocumentFromDbConfirmation' - ); - }, - action: function (data) { - service - .deleteFromDatabase(data.record.id) - .then(function () { - abp.message.success(l('Deleted')); - dataTable.ajax.reload(); - }); - }, - }, + } ], }, }, diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs index 1689a209fe..4aba5776df 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs @@ -49,7 +49,7 @@ namespace Volo.Docs.HtmlConverting var imgTag = match.Groups[0].Value; var title = GetTitleFromTag(imgTag); - return $"\"{title}\""; + return $"{imgTag}"; }); } @@ -82,4 +82,4 @@ namespace Volo.Docs.HtmlConverting return null; } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index afbb5fcf5b..a7897eddfe 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -305,7 +305,10 @@ diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 661c21eb11..9b7daa596a 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; @@ -70,6 +71,8 @@ namespace Volo.Docs.Pages.Documents.Project public DocumentRenderParameters UserPreferences { get; set; } = new DocumentRenderParameters(); + public List AlternativeOptionLinkQueries { get; set; } = new List(); + public bool FullSearchEnabled { get; set; } private const int MaxDescriptionMetaTagLength = 200; @@ -441,6 +444,7 @@ namespace Volo.Docs.Pages.Documents.Project if (_uiOptions.SectionRendering) { await SetDocumentPreferencesAsync(); + SetAlternativeOptionLinksAsync(); SetUserPreferences(); var partialTemplates = await GetDocumentPartialTemplatesAsync(); @@ -617,21 +621,21 @@ namespace Volo.Docs.Pages.Documents.Project return; } - var availableparameters = await _documentSectionRenderer.GetAvailableParametersAsync(Document.Content); + var availableParameters = await _documentSectionRenderer.GetAvailableParametersAsync(Document.Content); DocumentPreferences = new DocumentParametersDto { Parameters = new List() }; - if (availableparameters == null || !availableparameters.Any()) + if (availableParameters == null || !availableParameters.Any()) { return; } foreach (var parameter in projectParameters.Parameters) { - var availableParameter = availableparameters.GetOrDefault(parameter.Name); + var availableParameter = availableParameters.GetOrDefault(parameter.Name); if (availableParameter != null) { var newParameter = new DocumentParameterDto @@ -654,6 +658,48 @@ namespace Volo.Docs.Pages.Documents.Project } } + private void SetAlternativeOptionLinksAsync() + { + if (!DocumentPreferences?.Parameters?.Any() ?? true) + { + return; + } + + AlternativeOptionLinkQueries = CollectAlternativeOptionLinksRecursively(); + } + + private List CollectAlternativeOptionLinksRecursively(int index = 0) + { + if (index >= DocumentPreferences.Parameters.Count) + { + return new List(); + } + + var option = DocumentPreferences.Parameters[index]; + var queries = new List(); + + foreach (var key in option.Values.Keys) + { + var linkQuery = new StringBuilder($"{option.Name}={key}"); + + var restOfQueries = CollectAlternativeOptionLinksRecursively(index + 1); + + if (restOfQueries.Any()) + { + foreach (var restOfQuery in restOfQueries) + { + queries.Add($"{linkQuery}&{restOfQuery}"); + } + } + else + { + queries.Add($"{linkQuery}"); + } + } + + return queries; + } + public string GetDescription() { if (Document == null || Document.Content.IsNullOrWhiteSpace()) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index bbb97b041c..a65251a20e 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -237,119 +237,6 @@ setQueryString(); }; - var initCrawlerLinks = function () { - var isCrawler = function () { - var crawlers = [ - 'Google', - 'Googlebot', - 'YandexBot', - 'msnbot', - 'Rambler', - 'Yahoo', - 'AbachoBOT', - 'accoona', - 'AcoiRobot', - 'ASPSeek', - 'CrocCrawler', - 'Dumbot', - 'FAST-WebCrawler', - 'GeonaBot', - 'Gigabot', - 'Lycos', - 'MSRBOT', - 'Scooter', - 'AltaVista', - 'IDBot', - 'eStyle', - 'Scrubby', - 'Slurp', - 'DuckDuckBot', - 'Baiduspider', - 'VoilaBot', - 'ExaLead', - 'Search Dog', - 'MSN Bot', - 'BingBot', - ]; - - var agent = navigator.userAgent; - - for (var i = 0; i < crawlers.length; i++) { - if (agent.indexOf(crawlers[i]) >= 0) { - return true; - } - } - - return false; - }; - - if (!isCrawler()) { - return; - } - - var comboboxes = $('.doc-section-combobox'); - - if (comboboxes.length <= 0) { - return; - } - - $('#crawler_link').show(); - - var html = ''; - - var currentUrl = window.location.href.toString(); - - if (currentUrl.indexOf('?') > 0) { - currentUrl = currentUrl.substring(0, currentUrl.indexOf('?')); - } - - var getQueryStringsFromComboboxes = function (x) { - if (x >= comboboxes.length) { - return []; - } - - var key = $(comboboxes[x]).data('key'); - - var queryStrings = getQueryStringsFromComboboxes(x + 1); - var returnList = []; - - $(comboboxes[x]) - .find('option') - .each(function () { - if (queryStrings.length <= 0) { - returnList.push(key + '=' + $(this).val()); - } else { - for (var k = 0; k < queryStrings.length; k++) { - returnList.push( - key + - '=' + - $(this).val() + - '&' + - queryStrings[k] - ); - } - } - }); - - return returnList; - }; - - var queryStrings = getQueryStringsFromComboboxes(0); - - for (var i = 0; i < queryStrings.length; i++) { - html += - '' + - queryStrings[i] + - ' '; - } - - $('#crawler_link').html(html); - }; - initNavigationFilter('sidebar-scroll'); initAnchorTags('.docs-page .docs-body'); @@ -357,7 +244,5 @@ initSocialShareLinks(); initSections(); - - initCrawlerLinks(); }); })(jQuery); diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitConsts.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitConsts.cs index 7338fc8a28..997a394a7d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitConsts.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitConsts.cs @@ -3,7 +3,7 @@ public static class OrganizationUnitConsts { /// - /// Maximum length of the property. + /// Maximum length of the DisplayName property. /// public static int MaxDisplayNameLength { get; set; } = 128; @@ -18,7 +18,7 @@ public const int CodeUnitLength = 5; /// - /// Maximum length of the property. + /// Maximum length of the Code property. /// public const int MaxCodeLength = MaxDepth * (CodeUnitLength + 1) - 1; } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs index c2d91eafd7..c37889a897 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs @@ -29,11 +29,12 @@ namespace Microsoft.Extensions.DependencyInjection //AbpRoleStore services.TryAddScoped(); services.TryAddScoped(typeof(IRoleStore), provider => provider.GetService(typeof(IdentityRoleStore))); - + return services .AddIdentityCore(setupAction) .AddRoles() - .AddClaimsPrincipalFactory(); + .AddClaimsPrincipalFactory() + .AddTokenProvider(LinkUserTokenProvider.LinkUserTokenProviderName); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs index c9e266bf23..9946ac5b37 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs @@ -7,7 +7,6 @@ using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Security.Claims; using Volo.Abp.Uow; -using Volo.Abp.Users; namespace Volo.Abp.Identity { diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityLinkUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityLinkUserRepository.cs new file mode 100644 index 0000000000..2040924d10 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityLinkUserRepository.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace Volo.Abp.Identity +{ + public interface IIdentityLinkUserRepository : IBasicRepository + { + Task FindAsync( + IdentityLinkUserInfo sourceLinkUserInfo, + IdentityLinkUserInfo targetLinkUserInfo, + CancellationToken cancellationToken = default); + + Task> GetListAsync( + IdentityLinkUserInfo linkUserInfo, + CancellationToken cancellationToken = default); + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs new file mode 100644 index 0000000000..bec5563525 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs @@ -0,0 +1,44 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Identity +{ + public class IdentityLinkUser : BasicAggregateRoot + { + public virtual Guid SourceUserId { get; protected set; } + + public virtual Guid? SourceTenantId { get; protected set; } + + public virtual Guid TargetUserId { get; protected set; } + + public virtual Guid? TargetTenantId { get; protected set; } + + /// + /// Initializes a new instance of . + /// + protected IdentityLinkUser() + { + + } + + public IdentityLinkUser(Guid id, IdentityLinkUserInfo sourceUser, IdentityLinkUserInfo targetUser) + : base(id) + { + SourceUserId = sourceUser.UserId; + SourceTenantId = sourceUser.TenantId; + + TargetUserId = targetUser.UserId; + TargetTenantId = targetUser.TenantId; + } + + public IdentityLinkUser(Guid id, Guid sourceUserId, Guid? sourceTenantId, Guid targetUserId, Guid? targetTenantId) + : base(id) + { + SourceUserId = sourceUserId; + SourceTenantId = sourceTenantId; + + TargetUserId = targetUserId; + TargetTenantId = targetTenantId; + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs new file mode 100644 index 0000000000..68edd57f4a --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs @@ -0,0 +1,17 @@ +using System; + +namespace Volo.Abp.Identity +{ + public class IdentityLinkUserInfo + { + public virtual Guid UserId { get; set; } + + public virtual Guid? TenantId { get; set; } + + public IdentityLinkUserInfo(Guid userId, Guid? tenantId) + { + UserId = userId; + TenantId = tenantId; + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs new file mode 100644 index 0000000000..a067b259f4 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs @@ -0,0 +1,86 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Identity +{ + public class IdentityLinkUserManager : DomainService + { + protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; } + + protected IdentityUserManager UserManager { get; } + + protected new ICurrentTenant CurrentTenant { get; } + + public IdentityLinkUserManager(IIdentityLinkUserRepository identityLinkUserRepository, IdentityUserManager userManager, ICurrentTenant currentTenant) + { + IdentityLinkUserRepository = identityLinkUserRepository; + UserManager = userManager; + CurrentTenant = currentTenant; + } + + public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser) + { + if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId) + { + return; + } + + if (await IsLinkedAsync(sourceLinkUser, targetLinkUser)) + { + return; + } + + var userLink = new IdentityLinkUser( + GuidGenerator.Create(), + sourceLinkUser, + targetLinkUser); + await IdentityLinkUserRepository.InsertAsync(userLink, true); + } + + public virtual async Task IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser) + { + return await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser) != null; + } + + public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser) + { + if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser)) + { + return; + } + + var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser); + if (linkedUser != null) + { + await IdentityLinkUserRepository.DeleteAsync(linkedUser); + } + } + + public virtual async Task GenerateLinkTokenAsync(IdentityLinkUserInfo targetLinkUser) + { + using (CurrentTenant.Change(targetLinkUser.TenantId)) + { + var user = await UserManager.GetByIdAsync(targetLinkUser.UserId); + return await UserManager.GenerateUserTokenAsync( + user, + LinkUserTokenProvider.LinkUserTokenProviderName, + LinkUserTokenProvider.LinkUserTokenPurpose); + } + } + + public virtual async Task VerifyLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string token) + { + using (CurrentTenant.Change(targetLinkUser.TenantId)) + { + var user = await UserManager.GetByIdAsync(targetLinkUser.UserId); + return await UserManager.VerifyUserTokenAsync( + user, + LinkUserTokenProvider.LinkUserTokenProviderName, + LinkUserTokenProvider.LinkUserTokenPurpose, + token); + } + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/LinkUserTokenProvider.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/LinkUserTokenProvider.cs new file mode 100644 index 0000000000..706c045578 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/LinkUserTokenProvider.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; + +namespace Volo.Abp.Identity +{ + public class LinkUserTokenProvider : TotpSecurityStampBasedTokenProvider + { + public const string LinkUserTokenProviderName = "AbpLinkUser"; + + public const string LinkUserTokenPurpose = "AbpLinkUserLogin"; + + public override Task CanGenerateTwoFactorTokenAsync(UserManager manager, IdentityUser user) + { + return Task.FromResult(false); + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs new file mode 100644 index 0000000000..a1ea1fd7ba --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.Identity.EntityFrameworkCore +{ + public class EfCoreIdentityLinkUserRepository : EfCoreRepository, IIdentityLinkUserRepository + { + public EfCoreIdentityLinkUserRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + + } + + public async Task FindAsync(IdentityLinkUserInfo sourceLinkUserInfo, IdentityLinkUserInfo targetLinkUserInfo, CancellationToken cancellationToken = default) + { + return await DbSet.FirstOrDefaultAsync(x => + x.SourceUserId == sourceLinkUserInfo.UserId && x.SourceTenantId == sourceLinkUserInfo.TenantId && + x.TargetUserId == targetLinkUserInfo.UserId && x.TargetTenantId == targetLinkUserInfo.TenantId || + x.TargetUserId == sourceLinkUserInfo.UserId && x.TargetTenantId == sourceLinkUserInfo.TenantId && + x.SourceUserId == targetLinkUserInfo.UserId && x.SourceTenantId == targetLinkUserInfo.TenantId + , cancellationToken: GetCancellationToken(cancellationToken)); + } + + public async Task> GetListAsync(IdentityLinkUserInfo linkUserInfo, CancellationToken cancellationToken = default) + { + return await DbSet.Where(x => + x.SourceUserId == linkUserInfo.UserId && x.SourceTenantId == linkUserInfo.TenantId || + x.TargetUserId == linkUserInfo.UserId && x.TargetTenantId == linkUserInfo.TenantId) + .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs index 48da4daf87..f76ff7b9c3 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs @@ -1,7 +1,6 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.SecurityLog; namespace Volo.Abp.Identity.EntityFrameworkCore { @@ -16,6 +15,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore DbSet OrganizationUnits { get; set; } - DbSet IdentitySecurityLogs { get; set; } + DbSet SecurityLogs { get; set; } + + DbSet LinkUsers { get; set; } } } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs index 16679429b8..dd9c2ffea5 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs @@ -18,7 +18,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore public DbSet OrganizationUnits { get; set; } - public DbSet IdentitySecurityLogs { get; set; } + public DbSet SecurityLogs { get; set; } + + public DbSet LinkUsers { get; set; } public IdentityDbContext(DbContextOptions options) : base(options) diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs index 8efe82c5ce..a533ce6340 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs @@ -233,6 +233,22 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.UserId }); }); + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "LinkUsers", options.Schema); + + b.ConfigureByConvention(); + + b.HasIndex(x => new + { + UserId = x.SourceUserId, + TenantId = x.SourceTenantId, + LinkedUserId = x.TargetUserId, + LinkedTenantId = x.TargetTenantId + }).IsUnique(); + }); + + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs index 19c3316b88..7a59b255e3 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs @@ -15,7 +15,9 @@ namespace Volo.Abp.Identity.MongoDB public IMongoCollection OrganizationUnits => Collection(); - public IMongoCollection IdentitySecurityLogs => Collection(); + public IMongoCollection SecurityLogs => Collection(); + + public IMongoCollection LinkUsers => Collection(); protected override void CreateModel(IMongoModelBuilder modelBuilder) { diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContextExtensions.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContextExtensions.cs index 89aeddeb92..d9d926a3b8 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContextExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContextExtensions.cs @@ -41,6 +41,11 @@ namespace Volo.Abp.Identity.MongoDB { b.CollectionName = options.CollectionPrefix + "SecurityLogs"; }); + + builder.Entity(b => + { + b.CollectionName = options.CollectionPrefix + "LinkUsers"; + }); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbModule.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbModule.cs index 3ceab94e23..188c8ff6ae 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbModule.cs @@ -19,6 +19,7 @@ namespace Volo.Abp.Identity.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs index 54819ffa19..54e3ae7bdc 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs @@ -15,6 +15,8 @@ namespace Volo.Abp.Identity.MongoDB IMongoCollection OrganizationUnits { get; } - IMongoCollection IdentitySecurityLogs { get; } + IMongoCollection SecurityLogs { get; } + + IMongoCollection LinkUsers { get; } } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs new file mode 100644 index 0000000000..248458bb5d --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.Identity.MongoDB +{ + public class MongoIdentityLinkUserRepository : MongoDbRepository, IIdentityLinkUserRepository + { + public MongoIdentityLinkUserRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public async Task FindAsync(IdentityLinkUserInfo sourceLinkUserInfo, IdentityLinkUserInfo targetLinkUserInfo, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable().FirstOrDefaultAsync(x => + x.SourceUserId == sourceLinkUserInfo.UserId && x.SourceTenantId == sourceLinkUserInfo.TenantId && + x.TargetUserId == targetLinkUserInfo.UserId && x.TargetTenantId == targetLinkUserInfo.TenantId || + x.TargetUserId == sourceLinkUserInfo.UserId && x.TargetTenantId == sourceLinkUserInfo.TenantId && + x.SourceUserId == targetLinkUserInfo.UserId && x.SourceTenantId == targetLinkUserInfo.TenantId + , cancellationToken: GetCancellationToken(cancellationToken)); + } + + public async Task> GetListAsync(IdentityLinkUserInfo linkUserInfo, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable().Where(x => + x.SourceUserId == linkUserInfo.UserId && x.SourceTenantId == linkUserInfo.TenantId || + x.TargetUserId == linkUserInfo.UserId && x.TargetTenantId == linkUserInfo.TenantId) + .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); + } + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs new file mode 100644 index 0000000000..2791de9a4f --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Options; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Identity.AspNetCore +{ + public class LinkUserTokenProvider_Tests : AbpIdentityAspNetCoreTestBase + { + [Fact] + public void LinkUserTokenProvider_Should_Be_Register() + { + var identityOptions = GetRequiredService>().Value; + + identityOptions.Tokens.ProviderMap.ShouldContain(x => + x.Key == LinkUserTokenProvider.LinkUserTokenProviderName && + x.Value.ProviderType == typeof(LinkUserTokenProvider)); + } + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityLinkUserManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityLinkUserManager_Tests.cs new file mode 100644 index 0000000000..633f419da5 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityLinkUserManager_Tests.cs @@ -0,0 +1,86 @@ +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Identity +{ + public class IdentityLinkUserManager_Tests : AbpIdentityDomainTestBase + { + protected IIdentityUserRepository UserRepository { get; } + protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; } + protected IdentityLinkUserManager IdentityLinkUserManager { get; } + protected IdentityTestData TestData { get; } + + public IdentityLinkUserManager_Tests() + { + UserRepository = GetRequiredService(); + IdentityLinkUserRepository = GetRequiredService(); + IdentityLinkUserManager = GetRequiredService(); + TestData = GetRequiredService(); + } + + [Fact] + public virtual async Task LinkAsync() + { + var john = await UserRepository.GetAsync(TestData.UserJohnId); + var neo = await UserRepository.GetAsync(TestData.UserNeoId); + + (await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(neo.Id, neo.TenantId))).ShouldBeNull(); + + await IdentityLinkUserManager.LinkAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(neo.Id, neo.TenantId)); + + var linkUser = await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(neo.Id, neo.TenantId)); + + linkUser.ShouldNotBeNull(); + linkUser.SourceUserId.ShouldBe(john.Id); + linkUser.SourceTenantId.ShouldBe(john.TenantId); + + linkUser.TargetUserId.ShouldBe(neo.Id); + linkUser.TargetTenantId.ShouldBe(neo.TenantId); + } + + [Fact] + public virtual async Task UnlinkAsync() + { + var john = await UserRepository.GetAsync(TestData.UserJohnId); + var david = await UserRepository.GetAsync(TestData.UserDavidId); + + (await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(david.Id, david.TenantId))).ShouldNotBeNull(); + + await IdentityLinkUserManager.UnlinkAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(david.Id, david.TenantId)); + + (await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(david.Id, david.TenantId))).ShouldBeNull(); + } + + [Fact] + public virtual async Task IsLinkedAsync() + { + var john = await UserRepository.GetAsync(TestData.UserJohnId); + var david = await UserRepository.GetAsync(TestData.UserDavidId); + var neo = await UserRepository.GetAsync(TestData.UserNeoId); + + (await IdentityLinkUserManager.IsLinkedAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(david.Id, david.TenantId))).ShouldBeTrue(); + + (await IdentityLinkUserManager.IsLinkedAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(neo.Id, neo.TenantId))).ShouldBeFalse(); + } + + [Fact] + public virtual async Task GenerateAndVerifyLinkTokenAsync() + { + var john = await UserRepository.GetAsync(TestData.UserJohnId); + var token = await IdentityLinkUserManager.GenerateLinkTokenAsync(new IdentityLinkUserInfo(john.Id, john.TenantId)); + (await IdentityLinkUserManager.VerifyLinkTokenAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), token)).ShouldBeTrue(); + + (await IdentityLinkUserManager.VerifyLinkTokenAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), "123123")).ShouldBeFalse(); + } + + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs index 11345a4a46..8f3ce4c2b0 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs @@ -168,7 +168,7 @@ namespace Volo.Abp.Identity } } - catch (Exception e) + catch { throw; } diff --git a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/IdentityLinkUserRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/IdentityLinkUserRepository_Tests.cs new file mode 100644 index 0000000000..8e490fee8b --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/IdentityLinkUserRepository_Tests.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.Identity.EntityFrameworkCore +{ + public class IdentityLinkUserRepository_Tests : IdentityLinkUserRepository_Tests + { + + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo/Abp/Identity/MongoDB/IdentityLinkUserRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo/Abp/Identity/MongoDB/IdentityLinkUserRepository_Tests.cs new file mode 100644 index 0000000000..c7c9f29a55 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo/Abp/Identity/MongoDB/IdentityLinkUserRepository_Tests.cs @@ -0,0 +1,10 @@ +using Xunit; + +namespace Volo.Abp.Identity.MongoDB +{ + [Collection(MongoTestCollection.Name)] + public class IdentityLinkUserRepository_Tests : IdentityLinkUserRepository_Tests + { + + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs index 79dd858c20..708deaa68e 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs @@ -19,6 +19,8 @@ namespace Volo.Abp.Identity private readonly ILookupNormalizer _lookupNormalizer; private readonly IdentityTestData _testData; private readonly OrganizationUnitManager _organizationUnitManager; + private readonly IIdentityLinkUserRepository _identityLinkUserRepository; + private readonly IdentityLinkUserManager _identityLinkUserManager; private IdentityRole _adminRole; private IdentityRole _moderatorRole; @@ -36,7 +38,9 @@ namespace Volo.Abp.Identity IIdentitySecurityLogRepository identitySecurityLogRepository, ILookupNormalizer lookupNormalizer, IdentityTestData testData, - OrganizationUnitManager organizationUnitManager) + OrganizationUnitManager organizationUnitManager, + IIdentityLinkUserRepository identityLinkUserRepository, + IdentityLinkUserManager identityLinkUserManager) { _guidGenerator = guidGenerator; _userRepository = userRepository; @@ -46,6 +50,8 @@ namespace Volo.Abp.Identity _testData = testData; _organizationUnitRepository = organizationUnitRepository; _organizationUnitManager = organizationUnitManager; + _identityLinkUserRepository = identityLinkUserRepository; + _identityLinkUserManager = identityLinkUserManager; _identitySecurityLogRepository = identitySecurityLogRepository; } @@ -54,6 +60,7 @@ namespace Volo.Abp.Identity await AddRoles(); await AddOrganizationUnits(); await AddUsers(); + await AddLinkUsers(); await AddClaimTypes(); await AddSecurityLogs(); } @@ -128,6 +135,17 @@ namespace Volo.Abp.Identity await _userRepository.InsertAsync(neo); } + private async Task AddLinkUsers() + { + var john = await _userRepository.GetAsync(_testData.UserJohnId); + var david = await _userRepository.GetAsync(_testData.UserDavidId); + var neo = await _userRepository.GetAsync(_testData.UserNeoId); + + await _identityLinkUserManager.LinkAsync(new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(david.Id, david.TenantId)); + await _identityLinkUserManager.LinkAsync(new IdentityLinkUserInfo(david.Id, david.TenantId), + new IdentityLinkUserInfo(neo.Id, neo.TenantId)); + } private async Task AddClaimTypes() { diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityLinkUserRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityLinkUserRepository_Tests.cs new file mode 100644 index 0000000000..e5dd6dcd5f --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityLinkUserRepository_Tests.cs @@ -0,0 +1,58 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.Abp.Identity +{ + public abstract class IdentityLinkUserRepository_Tests : AbpIdentityTestBase + where TStartupModule : IAbpModule + { + protected IIdentityUserRepository UserRepository { get; } + protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; } + protected IdentityTestData TestData { get; } + + public IdentityLinkUserRepository_Tests() + { + UserRepository = GetRequiredService(); + IdentityLinkUserRepository = GetRequiredService(); + TestData = GetRequiredService(); + } + + [Fact] + public async Task FindAsync() + { + var john = await UserRepository.GetAsync(TestData.UserJohnId); + var david = await UserRepository.GetAsync(TestData.UserDavidId); + var neo = await UserRepository.GetAsync(TestData.UserNeoId); + + var johnAndDavidLinkUser = await IdentityLinkUserRepository.FindAsync( + new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(david.Id, david.TenantId)); + + johnAndDavidLinkUser.ShouldNotBeNull(); + johnAndDavidLinkUser.SourceUserId.ShouldBe(john.Id); + johnAndDavidLinkUser.SourceTenantId.ShouldBe(john.TenantId); + johnAndDavidLinkUser.TargetUserId.ShouldBe(david.Id); + johnAndDavidLinkUser.TargetTenantId.ShouldBe(david.TenantId); + + (await IdentityLinkUserRepository.FindAsync( + new IdentityLinkUserInfo(john.Id, john.TenantId), + new IdentityLinkUserInfo(neo.Id, neo.TenantId))).ShouldBeNull(); + } + + [Fact] + public async Task GetListAsync() + { + var john = await UserRepository.GetAsync(TestData.UserJohnId); + var david = await UserRepository.GetAsync(TestData.UserDavidId); + var neo = await UserRepository.GetAsync(TestData.UserNeoId); + + var davidLinkUsers = await IdentityLinkUserRepository.GetListAsync(new IdentityLinkUserInfo(david.Id, david.TenantId)); + davidLinkUsers.ShouldNotBeNull(); + + davidLinkUsers.ShouldContain(x => x.SourceUserId == john.Id && x.SourceTenantId == john.TenantId); + davidLinkUsers.ShouldContain(x => x.TargetUserId == neo.Id && x.TargetTenantId == neo.TenantId); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json index f974297b06..f582705ce4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Identity Resource name already exist: {Name}", @@ -7,6 +7,7 @@ "UserLockedOut": "The user account has been locked out due to invalid login attempts. Please wait a while and try again.", "InvalidUserNameOrPassword": "Invalid username or password!", "LoginIsNotAllowed": "You are not allowed to login! You need to confirm your email/phone number.", - "InvalidUsername": "Invalid username or password!" + "InvalidUsername": "Invalid username or password!", + "TheTargetUserIsNotLinkedToYou": "The target user is not linked to you!" } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json index 60f7a75a77..8a90e54172 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json @@ -7,6 +7,7 @@ "UserLockedOut": "Kullanıcı hesabı hatalı giriş denemeleri nedeniyle kilitlenmiştir. Lütfen bir süre bekleyip tekrar deneyin.", "InvalidUserNameOrPassword": "Kullanıcı adı ya da şifre geçersiz!", "LoginIsNotAllowed": "Giriş yapamazsınız! E-posta adresinizi ya da telefon numaranızı doğrulamanız gerekiyor.", - "InvalidUsername": "Kullanıcı adı ya da şifre geçersiz!" + "InvalidUsername": "Kullanıcı adı ya da şifre geçersiz!", + "TheTargetUserIsNotLinkedToYou": "Hedef kullanıcı sizinle bağlantılı değil!" } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hans.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hans.json index ac175e574d..ebe694ec7c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hans.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hans.json @@ -7,6 +7,7 @@ "UserLockedOut": "登录失败,用户账户已被锁定.请稍后再试.", "InvalidUserNameOrPassword": "用户名或密码错误!", "LoginIsNotAllowed": "无法登录!你需要验证邮箱地址/手机号.", - "InvalidUsername": "用户名或密码错误!" + "InvalidUsername": "用户名或密码错误!", + "TheTargetUserIsNotLinkedToYou": "目标用户未和你有关联!" } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 9e36576e56..69a9cfabb9 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -9,6 +9,7 @@ using Volo.Abp.Caching; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.Identity; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.AspNetIdentity; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.IdentityResources; @@ -94,6 +95,8 @@ namespace Volo.Abp.IdentityServer identityServerBuilder.AddInMemoryApiResources(configuration.GetSection("IdentityServer:ApiResources")); identityServerBuilder.AddInMemoryIdentityResources(configuration.GetSection("IdentityServer:IdentityResources")); } + + identityServerBuilder.AddExtensionGrantValidator(); } public override void PostConfigureServices(ServiceConfigurationContext context) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/LinkLoginExtensionGrantValidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/LinkLoginExtensionGrantValidator.cs new file mode 100644 index 0000000000..7c719d627e --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/LinkLoginExtensionGrantValidator.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using IdentityServer4.Validation; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Logging; +using Volo.Abp.Identity; +using Volo.Abp.IdentityServer.Localization; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Security.Claims; +using Volo.Abp.Users; +using IdentityUser = Volo.Abp.Identity.IdentityUser; + +namespace Volo.Abp.IdentityServer.AspNetIdentity +{ + public class LinkLoginExtensionGrantValidator : IExtensionGrantValidator + { + public const string ExtensionGrantType = "LinkLogin"; + + public string GrantType => ExtensionGrantType; + + protected ITokenValidator TokenValidator { get; } + protected IdentityLinkUserManager IdentityLinkUserManager { get; } + protected ICurrentTenant CurrentTenant { get; } + protected ICurrentUser CurrentUser { get; } + protected ICurrentPrincipalAccessor CurrentPrincipalAccessor { get; } + protected IdentityUserManager UserManager { get; } + protected IdentitySecurityLogManager IdentitySecurityLogManager { get; } + protected ILogger Logger { get; } + protected IStringLocalizer Localizer { get; } + + public LinkLoginExtensionGrantValidator( + ITokenValidator tokenValidator, + IdentityLinkUserManager identityLinkUserManager, + ICurrentTenant currentTenant, + ICurrentUser currentUser, + IdentityUserManager userManager, + ICurrentPrincipalAccessor currentPrincipalAccessor, + IdentitySecurityLogManager identitySecurityLogManager, + ILogger logger, + IStringLocalizer localizer) + { + TokenValidator = tokenValidator; + IdentityLinkUserManager = identityLinkUserManager; + CurrentTenant = currentTenant; + CurrentUser = currentUser; + UserManager = userManager; + CurrentPrincipalAccessor = currentPrincipalAccessor; + IdentitySecurityLogManager = identitySecurityLogManager; + Logger = logger; + Localizer = localizer; + } + + public virtual async Task ValidateAsync(ExtensionGrantValidationContext context) + { + var accessToken = context.Request.Raw["access_token"]; + if (accessToken.IsNullOrWhiteSpace()) + { + context.Result = new GrantValidationResult + { + IsError = true, + Error = "invalid_access_token" + }; + return; + } + + var result = await TokenValidator.ValidateAccessTokenAsync(accessToken); + if (result.IsError) + { + context.Result = new GrantValidationResult + { + IsError = true, + Error = result.Error, + ErrorDescription = result.ErrorDescription + }; + return; + } + + using (CurrentPrincipalAccessor.Change(result.Claims)) + { + if (!Guid.TryParse(context.Request.Raw["LinkUserId"], out var linkUserId)) + { + context.Result = new GrantValidationResult + { + IsError = true, + Error = "invalid_link_user_id" + }; + return; + } + + Guid? linkTenantId = null; + if (!context.Request.Raw["LinkTenantId"].IsNullOrWhiteSpace()) + { + if (!Guid.TryParse(context.Request.Raw["LinkTenantId"], out var parsedGuid)) + { + context.Result = new GrantValidationResult + { + IsError = true, + Error = "invalid_link_tenant_id" + }; + return; + } + + linkTenantId = parsedGuid; + } + + var isLinked = await IdentityLinkUserManager.IsLinkedAsync( + new IdentityLinkUserInfo(CurrentUser.GetId(), CurrentTenant.Id), + new IdentityLinkUserInfo(linkUserId, linkTenantId)); + + if (isLinked) + { + using (CurrentTenant.Change(linkTenantId)) + { + var user = await UserManager.GetByIdAsync(linkUserId); + var sub = await UserManager.GetUserIdAsync(user); + + var additionalClaims = new List(); + await AddCustomClaimsAsync(additionalClaims, user, context); + + context.Result = new GrantValidationResult( + sub, + GrantType, + additionalClaims.ToArray() + ); + } + } + else + { + context.Result = new GrantValidationResult + { + IsError = true, + Error = Localizer["TheTargetUserIsNotLinkedToYou"] + }; + } + } + } + + protected virtual Task AddCustomClaimsAsync(List customClaims, IdentityUser user, ExtensionGrantValidationContext context) + { + if (user.TenantId.HasValue) + { + customClaims.Add(new Claim(AbpClaimTypes.TenantId, user.TenantId?.ToString())); + } + + return Task.CompletedTask; + } + } +} diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/abp/core/abp.js b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/abp/core/abp.js index 20bd92147a..fa42828306 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/abp/core/abp.js +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/abp/core/abp.js @@ -136,38 +136,6 @@ var abp = abp || {}; }; abp.localization.defaultResourceName = undefined; - abp.localization.currentCulture = { - cultureName: undefined - }; - - var getMapValue = function (packageMaps, packageName, language) { - language = language || abp.localization.currentCulture.name; - if (!packageMaps || !packageName || !language) { - return language; - } - - var packageMap = packageMaps[packageName]; - if (!packageMap) { - return language; - } - - for (var i = 0; i < packageMap.length; i++) { - var map = packageMap[i]; - if (map.name === language){ - return map.value; - } - } - - return language; - }; - - abp.localization.getLanguagesMap = function (packageName, language) { - return getMapValue(abp.localization.languagesMap, packageName, language); - }; - - abp.localization.getLanguageFilesMap = function (packageName, language) { - return getMapValue(abp.localization.languageFilesMap, packageName, language); - }; /* AUTHORIZATION **********************************************/ @@ -362,7 +330,7 @@ var abp = abp || {}; }; /* opts: { - * + * * } */ abp.ui.unblock = function (opts) { @@ -616,7 +584,7 @@ var abp = abp || {}; * This is a simple implementation created to be used by ABP. * Please use a complete cookie library if you need. * @param {string} key - * @param {string} value + * @param {string} value * @param {Date} expireDate (optional). If not specified the cookie will expire at the end of session. * @param {string} path (optional) */ @@ -695,60 +663,4 @@ var abp = abp || {}; return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); }; - /* CLOCK *****************************************/ - abp.clock = abp.clock || {}; - - abp.clock.kind = 'Unspecified'; - - abp.clock.supportsMultipleTimezone = function () { - return abp.clock.kind === 'Utc'; - }; - - var toLocal = function (date) { - return new Date( - date.getFullYear(), - date.getMonth(), - date.getDate(), - date.getHours(), - date.getMinutes(), - date.getSeconds(), - date.getMilliseconds() - ); - }; - - var toUtc = function (date) { - return Date.UTC( - date.getUTCFullYear(), - date.getUTCMonth(), - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds(), - date.getUTCMilliseconds() - ); - }; - - abp.clock.now = function () { - if (abp.clock.kind === 'Utc') { - return toUtc(new Date()); - } - return new Date(); - }; - - abp.clock.normalize = function (date) { - var kind = abp.clock.kind; - - if (kind === 'Unspecified') { - return date; - } - - if (kind === 'Local') { - return toLocal(date); - } - - if (kind === 'Utc') { - return toUtc(date); - } - }; - -})(); +})(); \ No newline at end of file diff --git a/npm/lerna.json b/npm/lerna.json index 0dc2807678..cfe7e5f8db 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.2.1", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 35ec182a4a..2f9ffe1511 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.2.1", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 75a726c871..2fda4ba33d 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -25,17 +25,17 @@ "postinstall": "npm run compile:ivy" }, "devDependencies": { - "@abp/ng.account": "~3.2.0", - "@abp/ng.core": "~3.2.0", - "@abp/ng.feature-management": "~3.2.0", - "@abp/ng.identity": "~3.2.0", - "@abp/ng.permission-management": "~3.2.0", - "@abp/ng.schematics": "~3.2.0", - "@abp/ng.setting-management": "~3.2.0", - "@abp/ng.tenant-management": "~3.2.0", - "@abp/ng.theme.basic": "~3.2.0", - "@abp/ng.theme.shared": "~3.2.0", - "@abp/utils": "^3.2.0", + "@abp/ng.account": "~3.2.1", + "@abp/ng.core": "~3.2.1", + "@abp/ng.feature-management": "~3.2.1", + "@abp/ng.identity": "~3.2.1", + "@abp/ng.permission-management": "~3.2.1", + "@abp/ng.schematics": "~3.2.1", + "@abp/ng.setting-management": "~3.2.1", + "@abp/ng.tenant-management": "~3.2.1", + "@abp/ng.theme.basic": "~3.2.1", + "@abp/ng.theme.shared": "~3.2.1", + "@abp/utils": "^3.2.1", "@angular-builders/jest": "^10.0.0", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index e1ade0042b..c994547bff 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.account", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts index 0b80242aab..6883921202 100644 --- a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -11,7 +11,6 @@ import { ManageProfileComponent } from './components/manage-profile/manage-profi import { RegisterComponent } from './components/register/register.component'; import { eAccountComponents } from './enums/components'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; -import { ManageProfileGuard } from './guards/manage-profile.guard'; const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: 'login' }, @@ -44,7 +43,7 @@ const routes: Routes = [ { path: 'manage-profile', component: ReplaceableRouteContainerComponent, - canActivate: [AuthGuard, ManageProfileGuard], + canActivate: [AuthGuard], data: { replaceableComponent: { key: eAccountComponents.ManageProfile, diff --git a/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts b/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts index ca840bd913..4a5b5a0709 100644 --- a/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts +++ b/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts @@ -9,7 +9,7 @@ export class ManageProfileGuard implements CanActivate { canActivate(_: ActivatedRouteSnapshot, __: RouterStateSnapshot) { const env = this.configState.getEnvironment(); if (env.oAuthConfig.responseType === 'code') { - window.open(`${env.oAuthConfig.issuer}/Account/Manage`, '_blank'); + window.location.href = `${env.oAuthConfig.issuer}/Account/Manage?returnUrl=${window.location.href}`; return false; } else { return true; diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 009a85f312..e75dcb56d8 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.components", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=3.2.0", + "@abp/ng.core": ">=3.2.1", "@ng-bootstrap/ng-bootstrap": ">=6.0.0" }, "dependencies": { diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 494aa62d6f..aa07c23839 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.core", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "^3.2.0", + "@abp/utils": "^3.2.1", "@angular/localize": "~10.0.10", "@ngxs/router-plugin": "^3.7.0", "@ngxs/storage-plugin": "^3.7.0", diff --git a/npm/ng-packs/packages/core/src/lib/constants/different-locales.ts b/npm/ng-packs/packages/core/src/lib/constants/different-locales.ts index 401a766fda..3f86e31a2e 100644 --- a/npm/ng-packs/packages/core/src/lib/constants/different-locales.ts +++ b/npm/ng-packs/packages/core/src/lib/constants/different-locales.ts @@ -2,32 +2,337 @@ // Key is .NET locale, value is Angular locale export default { - 'ar-sa': 'ar-SA', + aa: 'en', + 'aa-DJ': 'en', + 'aa-ER': 'en', + 'aa-ET': 'en', + 'af-ZA': 'af', + 'agq-CM': 'agq', + 'ak-GH': 'ak', + 'am-ET': 'am', + 'ar-001': 'ar', + arn: 'en', + 'arn-CL': 'en', + 'as-IN': 'as', + 'asa-TZ': 'asa', + 'ast-ES': 'ast', + 'az-Cyrl-AZ': 'az-Cyrl', + 'az-Latn-AZ': 'az-Latn', + ba: 'ru', + 'ba-RU': 'ru', + 'bas-CM': 'bas', + 'be-BY': 'be', + 'bem-ZM': 'bem', + 'bez-TZ': 'bez', + 'bg-BG': 'bg', + bin: 'en', + 'bin-NG': 'en', + 'bm-Latn': 'bm', + 'bm-Latn-ML': 'bm', + 'bn-BD': 'bn', + 'bo-CN': 'bo', + 'br-FR': 'br', + 'brx-IN': 'brx', + 'bs-Cyrl-BA': 'bs-Cyrl', + 'bs-Latn-BA': 'bs-Latn', + byn: 'en', + 'byn-ER': 'en', + 'ca-ES': 'ca', 'ca-ES-valencia': 'ca-ES-VALENCIA', - 'de-de': 'de', - 'es-ES': 'es', + 'ce-RU': 'ce', + 'cgg-UG': 'cgg', + 'chr-Cher': 'chr', + 'chr-Cher-US': 'chr', + co: 'en', + 'co-FR': 'fr', + 'cs-CZ': 'cs', + 'cu-RU': 'cu', + 'cy-GB': 'cy', + 'da-DK': 'da', + 'dav-KE': 'dav', + 'de-DE': 'de', + 'dje-NE': 'dje', + 'dsb-DE': 'dsb', + 'dua-CM': 'dua', + dv: 'en', + 'dv-MV': 'en', + 'dyo-SN': 'dyo', + 'dz-BT': 'dz', + 'ebu-KE': 'ebu', + 'ee-GH': 'ee', + 'el-GR': 'el', + 'en-029': 'en', + 'en-ID': 'en', 'en-US': 'en', - 'fil-Latn': 'en', - 'ku-Arab': 'en', - 'ky-Cyrl': 'en', - 'mi-Latn': 'en', - 'prs-Arab': 'en', - 'qut-Latn': 'en', - nso: 'en', - quz: 'en', + 'eo-001': 'en', + 'es-ES': 'es', + 'et-EE': 'et', + 'eu-ES': 'eu', + 'ewo-CM': 'ewo', + 'fa-IR': 'fa', + 'ff-Latn-SN': 'ff-Latn', + 'ff-NG': 'ff', + 'fi-FI': 'fi', + 'fil-PH': 'fil', + 'fo-FO': 'fo', + 'fr-029': 'fr', 'fr-FR': 'fr', - 'gd-Latn': 'gd', + 'fur-IT': 'fur', + 'fy-NL': 'fy', + 'ga-IE': 'ga', + 'gd-GB': 'gd', + 'gl-ES': 'gl', + gn: 'en', + 'gn-PY': 'en', + 'gsw-CH': 'gsw', + 'gu-IN': 'gu', + 'guz-KE': 'guz', + 'gv-IM': 'gv', 'ha-Latn': 'ha', - 'ig-Latn': 'ig', - 'it-it': 'it', + 'ha-Latn-GH': 'ha-GH', + 'ha-Latn-NE': 'ha-NE', + 'ha-Latn-NG': 'ha', + 'haw-US': 'haw', + 'he-IL': 'he', + 'hi-IN': 'hi', + 'hr-HR': 'hr', + 'hsb-DE': 'hsb', + 'hu-HU': 'hu', + 'hy-AM': 'hy', + 'ia-001': 'ia', + 'ia-FR': 'ia', + ibb: 'en', + 'ibb-NG': 'en', + 'id-ID': 'id', + 'ig-NG': 'ig', + 'ii-CN': 'ii', + 'is-IS': 'is', + 'it-IT': 'it', + iu: 'en', + 'iu-Cans': 'en', + 'iu-Cans-CA': 'en', + 'iu-Latn': 'en', + 'iu-Latn-CA': 'en', + 'ja-JP': 'ja', + 'jgo-CM': 'jgo', + 'jmc-TZ': 'jmc', + 'jv-Java': 'jv', + 'jv-Java-ID': 'jv', + 'jv-Latn': 'jv', + 'jv-Latn-ID': 'jv', + 'ka-GE': 'ka', + 'kab-DZ': 'kab', + 'kam-KE': 'kam', + 'kde-TZ': 'kde', + 'kea-CV': 'kea', + 'khq-ML': 'khq', + 'ki-KE': 'ki', + 'kk-KZ': 'kk', + 'kkj-CM': 'kkj', + 'kl-GL': 'kl', + 'kln-KE': 'kln', + 'km-KH': 'km', + 'kn-IN': 'kn', + 'ko-KR': 'ko', + 'kok-IN': 'kok', + kr: 'en', + 'kr-NG': 'en', + 'ks-Arab': 'ks', + 'ks-Arab-IN': 'ks', + 'ks-Deva': 'ks', + 'ks-Deva-IN': 'ks', + 'ksb-TZ': 'ksb', + 'ksf-CM': 'ksf', + 'ksh-DE': 'ksh', + 'ku-Arab': 'ku', + 'ku-Arab-IQ': 'ku', + 'ku-Arab-IR': 'ku', + 'kw-GB': 'kw', + 'ky-KG': 'ky', + la: 'en', + 'la-001': 'en', + 'lag-TZ': 'lag', + 'lb-LU': 'lb', + 'lg-UG': 'lg', + 'lkt-US': 'lkt', + 'ln-CD': 'ln', + 'lo-LA': 'lo', + 'lrc-IR': 'lrc', + 'lt-LT': 'lt', + 'lu-CD': 'lu', + 'luo-KE': 'luo', + 'luy-KE': 'luy', + 'lv-LV': 'lv', + 'mas-KE': 'mas', + 'mer-KE': 'mer', + 'mfe-MU': 'mfe', + 'mg-MG': 'mg', + 'mgh-MZ': 'mgh', + 'mgo-CM': 'mgo', + 'mi-NZ': 'mi', + 'mk-MK': 'mk', + 'ml-IN': 'ml', 'mn-Cyrl': 'mn', + 'mn-MN': 'mn', + 'mn-Mong': 'mn', + 'mn-Mong-CN': 'mn', + 'mn-Mong-MN': 'mn', + mni: 'en', + 'mni-IN': 'en', + moh: 'en', + 'moh-CA': 'en', + 'mr-IN': 'mr', + 'ms-MY': 'ms', + 'mt-MT': 'mt', + 'mua-CM': 'mua', + 'my-MM': 'my', + 'mzn-IR': 'mzn', + 'naq-NA': 'naq', + 'nb-NO': 'nb', + + 'nd-ZW': 'nd', + 'ne-NP': 'ne', + 'nl-NL': 'nl', + 'nmg-CM': 'ngm', + 'nn-NO': 'nn', + 'nnh-CM': 'nnh', + no: 'en', + nqo: 'en', + 'nqo-GN': 'en', + nr: 'en', + 'nr-ZA': 'en', + nso: 'en', + 'nso-ZA': 'en', + 'nus-SS': 'nus', + 'nyn-UG': 'nyn', + oc: 'en', + 'oc-FR': 'fr', + 'om-ET': 'om', + 'or-IN': 'or', + 'os-GE': 'os', + 'pa-Arab-PK': 'pa-Arab', + 'pa-IN': 'pa', + pap: 'en', + 'pap-029': 'en', + 'pl-PL': 'pl', + 'prg-001': 'prg', + prs: 'en', + 'prs-AF': 'en', + 'ps-AF': 'ps', 'pt-BR': 'pt', - 'sd-Arab': 'pa-Arab', - 'sr-Cyrl-RS': 'sr-Cyrl', + quc: 'en', + 'quc-Latn': 'en', + 'quc-Latn-GT': 'en', + quz: 'en', + 'quz-BO': 'en', + 'quz-EC': 'en', + 'quz-PE': 'en', + 'rm-CH': 'rm', + 'rn-BI': 'rn', + 'ro-RO': 'ro', + 'rof-TZ': 'rof', + 'ru-RU': 'ru', + 'rw-RW': 'rw', + 'rwk-TZ': 'rwk', + sa: 'en', + 'sa-IN': 'en', + 'sah-RU': 'sah', + 'saq-KE': 'saq', + 'sbp-TZ': 'en', + 'sd-Arab': 'sd', + 'sd-Arab-PK': 'sd', + 'sd-Deva': 'sd', + 'sd-Deva-IN': 'sd', + 'se-NO': 'se', + 'seh-MZ': 'seh', + 'ses-ML': 'ses', + 'sg-CF': 'sg', + 'shi-Latn-MA': 'shi-Latn', + 'shi-Tfng-MA': 'shi-Tfng', + 'si-LK': 'si', + 'sk-SK': 'sk', + 'sl-SI': 'sl', + sma: 'en', + 'sma-NO': 'en', + 'sma-SE': 'en', + smj: 'en', + 'smj-NO': 'en', + 'smj-SE': 'en', + 'smn-FI': 'en', + sms: 'en', + 'sms-FI': 'en', + 'sn-Latn': 'sn', + 'sn-Latn-ZW': 'sn', + 'so-SO': 'so', + 'sq-AL': 'so', + 'sr-Cyrl-RS': 'sr-Cryl', 'sr-Latn-RS': 'sr-Latn', + ss: 'en', + 'ss-SZ': 'en', + 'ss-ZA': 'en', + ssy: 'en', + 'ssy-ER': 'en', + st: 'en', + 'st-LS': 'en', + 'st-ZA': 'en', + 'sv-SE': 'sv', + 'sw-TZ': 'sw', + syr: 'en', + 'syr-SY': 'en', + 'ta-IN': 'ta', + 'te-IN': 'te', + 'teo-UG': 'teo', 'tg-Cyrl': 'tg', - 'tk-Latn': 'tk', - 'tt-Cyrl': 'tt', - 'ug-Arab': 'ug', - 'yo-Latn': 'yo', + 'tg-Cyrl-TJ': 'tg', + 'th-TH': 'th', + 'ti-ET': 'ti', + tig: 'en', + 'tig-ER': 'en', + 'tk-TM': 'tk', + tn: 'en', + 'tn-BW': 'en', + 'tn-ZA': 'en', + 'to-TO': 'to', + 'tr-TR': 'tr', + ts: 'en', + 'ts-ZA': 'en', + 'tt-RU': 'tt', + 'twq-NE': 'twq', + 'tzm-Arab': 'tzm', + 'tzm-Arab-MA': 'tzm', + 'tzm-Latn': 'tzm', + 'tzm-Latn-DZ': 'tzm', + 'tzm-Latn-MA': 'tzm', + 'tzm-Tfng': 'tzm', + 'tzm-Tfng-MA': 'tzm', + 'ug-CN': 'ug', + 'uk-UA': 'uk', + 'ur-PK': 'ur', + 'uz-Arab-AF': 'uz-Arab', + 'uz-Cyrl-UZ': 'uz-Cyrl', + 'uz-Latn-UZ': 'uz-Latn', + 'vai-Latn-LR': 'vai-Latn', + 'vai-Vaii-LR': 'vai-Vaii', + ve: 'en', + 've-ZA': 'en', + 'vi-VN': 'vi', + 'vo-001': 'vo', + 'vun-TZ': 'vun', + 'wae-CH': 'wae', + wal: 'en', + 'wal-ET': 'en', + 'wo-SN': 'wo', + 'xh-ZA': 'xh', + 'xog-UG': 'xog', + 'yav-CM': 'yav', + 'yi-001': 'yi', + 'yo-NG': 'yo', + 'zgh-Tfng': 'zgh', + 'zgh-Tfng-MA': 'zgh', + 'zh-CN': 'zh', + 'zh-HK': 'zh', + 'zh-MO': 'zh', + 'zh-SG': 'zh', + 'zh-TW': 'zh', + 'zu-ZA': 'zu', }; diff --git a/npm/ng-packs/packages/core/src/lib/constants/included-locales.ts b/npm/ng-packs/packages/core/src/lib/constants/included-locales.ts new file mode 100644 index 0000000000..68ec959235 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/constants/included-locales.ts @@ -0,0 +1,12 @@ +export const includedLocales = [ + 'tr', + 'ar', + 'cs', + 'en', + 'fr', + 'pt', + 'ru', + 'sl', + 'zh-Hans', + 'zh-Hant', +]; diff --git a/npm/ng-packs/packages/core/src/lib/constants/index.ts b/npm/ng-packs/packages/core/src/lib/constants/index.ts index 54aaba730c..2113cfed8c 100644 --- a/npm/ng-packs/packages/core/src/lib/constants/index.ts +++ b/npm/ng-packs/packages/core/src/lib/constants/index.ts @@ -1 +1,2 @@ export * from './different-locales'; +export * from './included-locales'; diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 8cf9a90886..3756bff1bb 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -1,5 +1,5 @@ import { APP_BASE_HREF, CommonModule } from '@angular/common'; -import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; @@ -125,6 +125,10 @@ export class BaseCoreModule {} NgxsRouterPluginModule.forRoot(), NgxsStoragePluginModule.forRoot(), OAuthModule.forRoot(), + HttpClientXsrfModule.withOptions({ + cookieName: 'XSRF-TOKEN', + headerName: 'RequestVerificationToken', + }), ], }) export class RootCoreModule {} diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index 228cab0de3..f1cfbdb6da 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -11,3 +11,7 @@ type Serializable = Record< export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never; + +export type Strict = Class extends Contract + ? { [K in keyof Class]: K extends keyof Contract ? Contract[K] : never } + : Contract; diff --git a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts index 5cdbe3c291..c6ebb3dd00 100644 --- a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts @@ -48,12 +48,11 @@ export class LocalizationService { registerLocale(locale: string) { const router = this.injector.get(Router); - const { cultureNameLocaleFileMap } = this.injector.get(CORE_OPTIONS); const { shouldReuseRoute } = router.routeReuseStrategy; router.routeReuseStrategy.shouldReuseRoute = () => false; router.navigated = false; - return registerLocale(locale, cultureNameLocaleFileMap).then(() => { + return registerLocale(locale, this.injector).then(() => { this.ngZone.run(async () => { await router.navigateByUrl(router.url).catch(noop); router.routeReuseStrategy.shouldReuseRoute = shouldReuseRoute; diff --git a/npm/ng-packs/packages/core/src/lib/tokens/index.ts b/npm/ng-packs/packages/core/src/lib/tokens/index.ts index 8d23d581a5..bd798ae448 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/index.ts @@ -1,2 +1,3 @@ export * from './list.token'; +export * from './locale-error-handler.token'; export * from './options.token'; diff --git a/npm/ng-packs/packages/core/src/lib/tokens/locale-error-handler.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/locale-error-handler.token.ts new file mode 100644 index 0000000000..a1d2c93c20 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tokens/locale-error-handler.token.ts @@ -0,0 +1,14 @@ +import { InjectionToken, Injector } from '@angular/core'; + +export interface LocaleErrorHandlerData { + resolve: any; + reject: any; + error: any; + locale: string; + storedLocales: Record; + injector: Injector; +} + +export const LOCALE_ERROR_HANDLER = new InjectionToken<(data: LocaleErrorHandlerData) => any>( + 'LOCALE_ERROR_HANDLER', +); diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index cf35cc3023..b30b1e742b 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -1,5 +1,5 @@ import { registerLocaleData } from '@angular/common'; -import { Injector } from '@angular/core'; +import { Injector, isDevMode } from '@angular/core'; import { Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { tap } from 'rxjs/operators'; @@ -8,6 +8,7 @@ import { ABP } from '../models/common'; import { AuthService } from '../services/auth.service'; import { ConfigState } from '../states/config.state'; import { clearOAuthStorage } from '../strategies/auth-flow.strategy'; +import { LocaleErrorHandlerData, LOCALE_ERROR_HANDLER } from '../tokens/locale-error-handler.token'; import { CORE_OPTIONS } from '../tokens/options.token'; import { getRemoteEnv } from './environment-utils'; import { parseTenantFromUrl } from './multi-tenancy-utils'; @@ -42,26 +43,66 @@ export function checkAccessToken(store: Store, injector: Injector) { export function localeInitializer(injector: Injector) { const fn = () => { const store: Store = injector.get(Store); - const options = injector.get(CORE_OPTIONS); const lang = store.selectSnapshot(state => state.SessionState.language) || 'en'; return new Promise((resolve, reject) => { - registerLocale(lang, options.cultureNameLocaleFileMap).then( - () => resolve('resolved'), - reject, - ); + registerLocale(lang, injector).then(() => resolve('resolved'), reject); }); }; return fn; } -export function registerLocale(locale: string, localeNameMap: ABP.Dictionary) { - return import( - /* webpackChunkName: "_locale-[request]"*/ - `@angular/common/locales/${localeNameMap[locale] || locale}.js` - ).then(module => { - registerLocaleData(module.default); +export function registerLocale(locale: string, injector: Injector): Promise { + const { cultureNameLocaleFileMap } = injector.get(CORE_OPTIONS, {} as ABP.Root); + + const errorHandlerFn = injector.get(LOCALE_ERROR_HANDLER, defaultLocalErrorHandlerFn); + + return new Promise((resolve, reject) => { + return import( + /* webpackChunkName: "_locale-[request]"*/ + /* webpackInclude: /\/(ar|cs|en|fr|pt|tr|ru|sl|zh-Hans|zh-Hant).js/ */ + /* webpackExclude: /\/global|\/extra/ */ + `@angular/common/locales/${cultureNameLocaleFileMap[locale] || locale}.js` + ) + .then(module => { + registerLocaleData(module.default, locale); + resolve(module.default); + }) + .catch(error => { + errorHandlerFn({ + resolve, + reject, + error, + injector, + locale, + storedLocales: { ...extraLocales }, + }); + }); }); } + +const extraLocales = {}; +export function storeLocaleData(data: any, localeId: string) { + extraLocales[localeId] = data; +} + +async function defaultLocalErrorHandlerFn({ + locale, + storedLocales, + resolve, + injector, +}: LocaleErrorHandlerData) { + if (storedLocales[locale]) { + registerLocaleData(storedLocales[locale], locale); + resolve(); + return; + } + + if (isDevMode) { + console.error(`Cannot find the ${locale} locale file. You can check how can add new culture at https://docs.abp.io/en/abp/latest/UI/Angular/Localization#adding-new-culture`); + } + + resolve(); +} diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 80ccfa562c..080eef0169 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index d0dc3eb54c..921b05c961 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.identity", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.permission-management": "~3.2.0", - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.permission-management": "~3.2.1", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 1d5a965074..fe9aab70a5 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index e404d5cedd..b0304af5c0 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "3.2.0", + "version": "3.2.1", "description": "Schematics that works with ABP Backend", "keywords": [ "schematics" diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 7927944a5a..0ad26fff8b 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.setting-management", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 346263467b..ce91eb196b 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~3.2.0", - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.feature-management": "~3.2.1", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index c571438d84..0774772f53 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts index 105c756e54..56851c6d27 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts @@ -6,7 +6,6 @@ import { eLayoutType } from '@abp/ng.core'; template: ` - `, }) export class AccountLayoutComponent { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts index 4f1dac52ca..f961ecc321 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts @@ -6,7 +6,6 @@ import { eLayoutType } from '@abp/ng.core'; template: ` - `, }) export class EmptyLayoutComponent { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index eed100dff9..6d1baadb31 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "3.2.0", + "version": "3.2.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~3.2.0", + "@abp/ng.core": "~3.2.1", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ngx-validate/core": "^0.0.11", diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html index 88d45ff04b..3dc2427f92 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html @@ -1,5 +1,5 @@
-
+
+
-
- -
+
{{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}
-

+

{{ toast.message | abpLocalization: toast.options?.messageLocalizationParams }}

diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss index 7b5a2a24d1..64bf8a6068 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss @@ -10,7 +10,9 @@ } } -.toast { +$toastClass: abp-toast; + +.#{$toastClass} { display: grid; grid-template-columns: 50px 1fr; gap: 10px; @@ -23,19 +25,19 @@ z-index: 9999; @include fillColor(#f0f0f0, #000); opacity: 1; - &.toast-success { + &.#{$toastClass}-success { @include fillColor(#51a351, #fff); } - &.toast-info { + &.#{$toastClass}-info { @include fillColor(#2f96b4, #fff); } - &.toast-warning { + &.#{$toastClass}-warning { @include fillColor(#f89406, #fff); } - &.toast-error { + &.#{$toastClass}-error { @include fillColor(#bd362f, #fff); } - .toast-icon { + .#{$toastClass}-icon { display: flex; align-items: center; justify-content: center; @@ -43,9 +45,9 @@ font-size: 36px; } } - .toast-content { + .#{$toastClass}-content { position: relative; - .toast-close-button { + .#{$toastClass}-close-button { position: absolute; top: 0; right: 0; @@ -64,13 +66,13 @@ outline: none; } } - .toast-title { + .#{$toastClass}-title { margin: 0; padding: 0; font-size: 1rem; font-weight: 600; } - .toast-message { + .#{$toastClass}-message { margin: 0; padding: 0; max-width: 240px; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index b4465934b6..48298e74a0 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -1,7 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Toaster } from '../../models/toaster'; import { ToasterService } from '../../services/toaster.service'; -import { LocalizationService } from '@abp/ng.core'; import snq from 'snq'; @Component({ @@ -15,7 +14,7 @@ export class ToastComponent implements OnInit { get severityClass(): string { if (!this.toast || !this.toast.severity) return ''; - return `toast-${this.toast.severity}`; + return `abp-toast-${this.toast.severity}`; } get iconClass(): string { @@ -33,10 +32,7 @@ export class ToastComponent implements OnInit { } } - constructor( - private toastService: ToasterService, - private localizationService: LocalizationService, - ) {} + constructor(private toasterService: ToasterService) {} ngOnInit() { if (snq(() => this.toast.options.sticky)) return; @@ -47,10 +43,10 @@ export class ToastComponent implements OnInit { } close() { - this.toastService.remove(this.toast.options.id); + this.toasterService.remove(this.toast.options.id); } tap() { - if (this.toast.options && this.toast.options.tapToDismiss) this.close(); + if (this.toast.options?.tapToDismiss) this.close(); } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts index e7f456fee4..beb5d4fc6c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts @@ -20,4 +20,36 @@ export namespace Toaster { } export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; + export type ToasterId = string | number; + + export interface Service { + show: ( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + severity: Toaster.Severity, + options: Partial, + ) => ToasterId; + remove: (id: number) => void; + clear: (containerKey?: string) => void; + info: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + success: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + warn: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + error: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index 295647309d..84275a0fc8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -1,15 +1,15 @@ -import { Injectable, ComponentRef } from '@angular/core'; +import { ComponentRef, Injectable } from '@angular/core'; import { Toaster } from '../models'; import { ReplaySubject } from 'rxjs'; -import { Config, PROJECTION_STRATEGY, ContentProjectionService } from '@abp/ng.core'; +import { Config, ContentProjectionService, PROJECTION_STRATEGY, Strict } from '@abp/ng.core'; import snq from 'snq'; import { ToastContainerComponent } from '../components/toast-container/toast-container.component'; @Injectable({ providedIn: 'root', }) -export class ToasterService { - toasts$ = new ReplaySubject(1); +export class ToasterService implements ToasterContract { + private toasts$ = new ReplaySubject(1); private lastId = -1; @@ -37,7 +37,7 @@ export class ToasterService { message: Config.LocalizationParam, title?: Config.LocalizationParam, options?: Partial, - ): number { + ): Toaster.ToasterId { return this.show(message, title, 'info', options); } @@ -51,7 +51,7 @@ export class ToasterService { message: Config.LocalizationParam, title?: Config.LocalizationParam, options?: Partial, - ): number { + ): Toaster.ToasterId { return this.show(message, title, 'success', options); } @@ -65,7 +65,7 @@ export class ToasterService { message: Config.LocalizationParam, title?: Config.LocalizationParam, options?: Partial, - ): number { + ): Toaster.ToasterId { return this.show(message, title, 'warning', options); } @@ -79,7 +79,7 @@ export class ToasterService { message: Config.LocalizationParam, title?: Config.LocalizationParam, options?: Partial, - ): number { + ): Toaster.ToasterId { return this.show(message, title, 'error', options); } @@ -96,7 +96,7 @@ export class ToasterService { title: Config.LocalizationParam = null, severity: Toaster.Severity = 'neutral', options = {} as Partial, - ): number { + ): Toaster.ToasterId { if (!this.containerComponentRef) this.setContainer(); const id = ++this.lastId; @@ -122,10 +122,12 @@ export class ToasterService { /** * Removes all open toasts at once. */ - clear(key?: string): void { - this.toasts = !key + clear(containerKey?: string): void { + this.toasts = !containerKey ? [] - : this.toasts.filter(toast => snq(() => toast.options.containerKey) !== key); + : this.toasts.filter(toast => snq(() => toast.options.containerKey) !== containerKey); this.toasts$.next(this.toasts); } } + +export type ToasterContract = Strict; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts index 0807bf632e..d47e4a7cf5 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts @@ -14,6 +14,7 @@ import { ToasterService } from '../services/toaster.service'; imports: [CoreModule.forTest()], }) export class MockModule {} +const toastClassPrefix = 'abp-toast'; describe('ToasterService', () => { let spectator: SpectatorService; @@ -39,24 +40,23 @@ describe('ToasterService', () => { service['containerComponentRef'].changeDetectorRef.detectChanges(); expect(selectToasterElement('.fa-exclamation-circle')).toBeTruthy(); - expect(selectToasterContent('.toast-title')).toBe('TITLE'); - expect(selectToasterContent('.toast-message')).toBe('MESSAGE'); + expect(selectToasterContent(`.${toastClassPrefix}-title`)).toBe('TITLE'); + expect(selectToasterContent(`.${toastClassPrefix}-message`)).toBe('MESSAGE'); }); test.each` - type | selector | icon - ${'info'} | ${'.toast-info'} | ${'.fa-info-circle'} - ${'success'} | ${'.toast-success'} | ${'.fa-check-circle'} - ${'warn'} | ${'.toast-warning'} | ${'.fa-exclamation-triangle'} - ${'error'} | ${'.toast-error'} | ${'.fa-times-circle'} + type | selector | icon + ${'info'} | ${`.${toastClassPrefix}-info`} | ${'.fa-info-circle'} + ${'success'} | ${`.${toastClassPrefix}-success`} | ${'.fa-check-circle'} + ${'warn'} | ${`.${toastClassPrefix}-warning`} | ${'.fa-exclamation-triangle'} + ${'error'} | ${`.${toastClassPrefix}-error`} | ${'.fa-times-circle'} `('should display $type toast', async ({ type, selector, icon }) => { service[type]('MESSAGE', 'TITLE'); await timer(0).toPromise(); service['containerComponentRef'].changeDetectorRef.detectChanges(); - - expect(selectToasterContent('.toast-title')).toBe('TITLE'); - expect(selectToasterContent('.toast-message')).toBe('MESSAGE'); + expect(selectToasterContent(`.${toastClassPrefix}-title`)).toBe('TITLE'); + expect(selectToasterContent(`.${toastClassPrefix}-message`)).toBe('MESSAGE'); expect(selectToasterElement()).toBe(document.querySelector(selector)); expect(selectToasterElement(icon)).toBeTruthy(); }); @@ -68,10 +68,10 @@ describe('ToasterService', () => { await timer(0).toPromise(); service['containerComponentRef'].changeDetectorRef.detectChanges(); - const titles = document.querySelectorAll('.toast-title'); + const titles = document.querySelectorAll(`.${toastClassPrefix}-title`); expect(titles.length).toBe(2); - const messages = document.querySelectorAll('.toast-message'); + const messages = document.querySelectorAll(`.${toastClassPrefix}-message`); expect(messages.length).toBe(2); }); @@ -104,19 +104,19 @@ describe('ToasterService', () => { service['containerComponentRef'].changeDetectorRef.detectChanges(); expect(selectToasterElement('.fa-exclamation-circle')).toBeTruthy(); - expect(selectToasterContent('.toast-title')).toBe('TITLE_2'); - expect(selectToasterContent('.toast-message')).toBe('MESSAGE_2'); + expect(selectToasterContent(`.${toastClassPrefix}-title`)).toBe('TITLE_2'); + expect(selectToasterContent(`.${toastClassPrefix}-message`)).toBe('MESSAGE_2'); }); }); -function clearElements(selector = '.toast') { +function clearElements(selector = `.${toastClassPrefix}`) { document.querySelectorAll(selector).forEach(element => element.parentNode.removeChild(element)); } -function selectToasterContent(selector = '.toast'): string { +function selectToasterContent(selector = `.${toastClassPrefix}`): string { return selectToasterElement(selector).textContent.trim(); } -function selectToasterElement(selector = '.toast'): T { +function selectToasterElement(selector = `.${toastClassPrefix}`): T { return document.querySelector(selector); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index e45ac8d1e3..c4647cbcd1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -27,49 +27,37 @@ import { initLazyStyleHandler } from './handlers/lazy-style.handler'; import { RootParams } from './models/common'; import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; -import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; +import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; +const declarationsWithExports = [ + BreadcrumbComponent, + ButtonComponent, + ChartComponent, + ConfirmationComponent, + LoaderBarComponent, + LoadingComponent, + ModalComponent, + TableComponent, + TableEmptyMessageComponent, + ToastComponent, + ToastContainerComponent, + SortOrderIconComponent, + NgxDatatableDefaultDirective, + NgxDatatableListDirective, + LoadingDirective, + TableSortDirective, +]; @NgModule({ imports: [CoreModule, NgxDatatableModule, NgxValidateCoreModule, NgbPaginationModule], declarations: [ - BreadcrumbComponent, - ButtonComponent, - ChartComponent, - ConfirmationComponent, + ...declarationsWithExports, HttpErrorWrapperComponent, - LoaderBarComponent, - LoadingComponent, - ModalComponent, ModalContainerComponent, - TableComponent, - TableEmptyMessageComponent, - ToastComponent, - ToastContainerComponent, - SortOrderIconComponent, - NgxDatatableDefaultDirective, - NgxDatatableListDirective, - LoadingDirective, - TableSortDirective, ], exports: [ NgxDatatableModule, - BreadcrumbComponent, - ButtonComponent, - ChartComponent, - ConfirmationComponent, - LoaderBarComponent, - LoadingComponent, - ModalComponent, - TableComponent, - TableEmptyMessageComponent, - ToastComponent, - ToastContainerComponent, - SortOrderIconComponent, - NgxDatatableDefaultDirective, - NgxDatatableListDirective, - LoadingDirective, - TableSortDirective, + ...declarationsWithExports, ], providers: [DatePipe], entryComponents: [ diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index e19192bbd5..f29235c0b7 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "anchor-js": "^4.2.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 642eec4e55..bd8cf7a3bc 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 900bccfb31..783a0752ff 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~3.2.0", - "@abp/bootstrap": "~3.2.0", - "@abp/bootstrap-datepicker": "~3.2.0", - "@abp/datatables.net-bs4": "~3.2.0", - "@abp/font-awesome": "~3.2.0", - "@abp/jquery-form": "~3.2.0", - "@abp/jquery-validation-unobtrusive": "~3.2.0", - "@abp/lodash": "~3.2.0", - "@abp/luxon": "~3.2.0", - "@abp/malihu-custom-scrollbar-plugin": "~3.2.0", - "@abp/select2": "~3.2.0", - "@abp/sweetalert": "~3.2.0", - "@abp/timeago": "~3.2.0", - "@abp/toastr": "~3.2.0" + "@abp/aspnetcore.mvc.ui": "~3.2.1", + "@abp/bootstrap": "~3.2.1", + "@abp/bootstrap-datepicker": "~3.2.1", + "@abp/datatables.net-bs4": "~3.2.1", + "@abp/font-awesome": "~3.2.1", + "@abp/jquery-form": "~3.2.1", + "@abp/jquery-validation-unobtrusive": "~3.2.1", + "@abp/lodash": "~3.2.1", + "@abp/luxon": "~3.2.1", + "@abp/malihu-custom-scrollbar-plugin": "~3.2.1", + "@abp/select2": "~3.2.1", + "@abp/sweetalert": "~3.2.1", + "@abp/timeago": "~3.2.1", + "@abp/toastr": "~3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 6bbaad44eb..ed4df8af78 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index ec72ff3331..f928308012 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.0", - "@abp/owl.carousel": "~3.2.0", - "@abp/prismjs": "~3.2.0", - "@abp/tui-editor": "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.1", + "@abp/owl.carousel": "~3.2.1", + "@abp/prismjs": "~3.2.1", + "@abp/tui-editor": "~3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index dde7632f9b..a89333720c 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index f85cb12d85..6237abde25 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "bootstrap": "^4.5.0", "bootstrap-v4-rtl": "4.4.1-2" }, diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index 7ab437b75c..32fb2e96e7 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 46c477a0c7..f37cb77a90 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "clipboard": "^2.0.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 0d2c6cbd12..ae723fdd59 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "codemirror": "^5.54.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index 2e70056ee8..ec0ecb0684 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/core", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/utils": "^3.2.0" + "@abp/utils": "^3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/core/src/abp.js b/npm/packs/core/src/abp.js index 20bd92147a..72af4bd106 100644 --- a/npm/packs/core/src/abp.js +++ b/npm/packs/core/src/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index 8730203935..657fa55023 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "cropperjs": "^1.5.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index f0ba9af1b8..254e217462 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~3.2.0", + "@abp/datatables.net": "~3.2.1", "datatables.net-bs4": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 6af41c035f..36c5558438 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "datatables.net": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 0f74d41885..dee50ebdf4 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~3.2.0", - "@abp/clipboard": "~3.2.0", - "@abp/malihu-custom-scrollbar-plugin": "~3.2.0", - "@abp/popper.js": "~3.2.0", - "@abp/prismjs": "~3.2.0" + "@abp/anchor-js": "~3.2.1", + "@abp/clipboard": "~3.2.1", + "@abp/malihu-custom-scrollbar-plugin": "~3.2.1", + "@abp/popper.js": "~3.2.1", + "@abp/prismjs": "~3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 4bbedfd30b..f6bc66e657 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index 6039de5eec..bb69611436 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "@fortawesome/fontawesome-free": "^5.13.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 11d950f58e..c8105c9be3 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0" + "@abp/core": "~3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 7f2691f24f..7a7adc6d87 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 7e1810082d..7535eb428f 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~3.2.0", + "@abp/jquery-validation": "~3.2.1", "jquery-validation-unobtrusive": "^3.2.11" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index 453ed73717..e713273ef7 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "jquery-validation": "^1.19.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 26bc94fa2c..477f8fa934 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "jquery": "~3.5.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index f617e79eb3..537e354eac 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "jstree": "^3.3.9" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 70079af1e2..3b442db7cb 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "lodash": "^4.17.15" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index c136a899ba..13be31033d 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/luxon", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "luxon": "^1.24.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index cea5d3c47f..7bd26cdf17 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 23412e06b2..1aeb73a0c8 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "markdown-it": "^11.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index bc56aa7c46..58fe075155 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 988a522538..d236b0c729 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "popper.js": "^1.16.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index b5842be17b..323e3b8fdd 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.2.0", - "@abp/core": "~3.2.0", + "@abp/clipboard": "~3.2.1", + "@abp/core": "~3.2.1", "prismjs": "^1.20.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 96ff6b4cbe..9cacd43551 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index 3bfd1169cc..07438935ff 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "@microsoft/signalr": "~3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index ca198bb5fe..02716d9b3f 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index 019edcbac6..dc4485acd5 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "sweetalert": "^2.1.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index 303c3adc76..e9247cdfad 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index bf3827df65..c6a53bf4ef 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0", + "@abp/jquery": "~3.2.1", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index b7460e54b8..2713805d05 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,14 +1,14 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~3.2.0", - "@abp/highlight.js": "~3.2.0", - "@abp/jquery": "~3.2.0", - "@abp/markdown-it": "~3.2.0", + "@abp/codemirror": "~3.2.1", + "@abp/highlight.js": "~3.2.1", + "@abp/jquery": "~3.2.1", + "@abp/markdown-it": "~3.2.1", "tui-editor": "^1.4.10" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index 7286abc02a..7784c5c891 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0", + "@abp/core": "~3.2.1", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 2e4788bed1..1d9cc2a366 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "3.2.0", + "version": "3.2.1", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index 20605a9942..564f2914a5 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "3.2.0", + "version": "3.2.1", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.2.0", - "@abp/prismjs": "~3.2.0" + "@abp/clipboard": "~3.2.1", + "@abp/prismjs": "~3.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 52fb4ef2da..a82a9c78a3 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -46,6 +46,7 @@ $projects = ( "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages", "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared", + "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo" "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets", "framework/src/Volo.Abp.AspNetCore.Serilog", "framework/src/Volo.Abp.AspNetCore.SignalR", diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 68a90c79ea..ad77d7e0d9 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.2.0", - "@abp/ng.identity": "~3.2.0", - "@abp/ng.setting-management": "~3.2.0", - "@abp/ng.tenant-management": "~3.2.0", - "@abp/ng.theme.basic": "~3.2.0", + "@abp/ng.account": "~3.2.1", + "@abp/ng.identity": "~3.2.1", + "@abp/ng.setting-management": "~3.2.1", + "@abp/ng.tenant-management": "~3.2.1", + "@abp/ng.theme.basic": "~3.2.1", "@angular/animations": "~10.1.2", "@angular/common": "~10.1.2", "@angular/compiler": "~10.1.2", @@ -30,7 +30,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~3.2.0", + "@abp/ng.schematics": "~3.2.1", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular/cli": "~10.1.2", diff --git a/templates/app/angular/yarn.lock b/templates/app/angular/yarn.lock index 06f1ac1597..49c2064d0d 100644 --- a/templates/app/angular/yarn.lock +++ b/templates/app/angular/yarn.lock @@ -2,24 +2,24 @@ # yarn lockfile v1 -"@abp/ng.account@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.1.2.tgz#42f95ad70f06586848737ad5e18461a193a51348" - integrity sha512-sFJPvak4pGbX0dDtVjBhY0slRRI0oTz8reJqcFfpUywPMJj2VsCz97W70xB33Yr/mQZDg6BjhXkrl15GdyWt2w== +"@abp/ng.account@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.2.0.tgz#95323fe873a91ed96f5604d0791dbf78b4245f31" + integrity sha512-0OKVYJ1uB33VCa+IReyz0VSb9ku4OJYG+6b1hrqCJcJCzqzbltCxCVVJ31FvrYDoEah3E1TNQIzTxvbCuoG8YA== dependencies: - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.core@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.1.2.tgz#edc2de8fa7332f4bd17ddeaee94c52aa8bb51fcc" - integrity sha512-ura5fD4ZIJhLD97WrSNILoFfwFqJJJOygeZuGpfslCbeNM1JEf4Jk4XQzfnk7u+xW7IgtBZXtisheIuY2taawA== +"@abp/ng.core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.2.0.tgz#6970a9a483c3796af7b7db2af3d5c3c6cfd7410c" + integrity sha512-AYNrWi41hFpM6zOc2K/l13r6gmLu99QUbHr1dwsp+goGXo0UZ1dLJ3HtxNnwte4Wx2U2DmkLPvVovCHxcXbXAA== dependencies: - "@abp/utils" "^3.1.1" + "@abp/utils" "^3.2.0-rc.2" "@angular/localize" "~10.0.10" - "@ngxs/router-plugin" "^3.6.2" - "@ngxs/storage-plugin" "^3.6.2" - "@ngxs/store" "^3.6.2" + "@ngxs/router-plugin" "^3.7.0" + "@ngxs/storage-plugin" "^3.7.0" + "@ngxs/store" "^3.7.0" angular-oauth2-oidc "^10.0.0" just-clone "^3.1.0" just-compare "^1.3.0" @@ -27,35 +27,35 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.1.2.tgz#91269097f925bc0772c443d688f46070fce5def9" - integrity sha512-s59KNoOY2TWuume2iAzdKz9GBFVyj3q0BmhL7hW6IgyV96Zg9FP+UKYCXvPM8HtsLmXis3Zrv7TnJDAF+5VrHw== +"@abp/ng.feature-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.2.0.tgz#0ebe620f84b206ea87d876b791359b9d97e46c92" + integrity sha512-Up7BuPmp24/zmwllHAe6AqnbgwtiV2YnMQApsEnh2Mv+d8LfvGQEeqSILIYebovHod6rkEvIWrpXQBAwOF8O6Q== dependencies: - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.identity@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.1.2.tgz#6d039a6cbb431c61a8bf9d291c1e6bf2120e478e" - integrity sha512-p+NGSuSd6OPxDZQr7iOhUIWTkpzyGUcphy6iloDgXX9YoTdIoh03ZMMJMpR6UBmPYLjPpP4U/eUFVxi2DjdCzA== +"@abp/ng.identity@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.2.0.tgz#3ab2e8d1813c6ddbceb4e7edb1de5fe28d4b1e39" + integrity sha512-7dP6Hbkr6lML1R2hjGxzZI65cjTvKPdOR2/OCYw2UxoCshQLqj0aiMxzzul+sMX2EFQCb5dLDuSJouK0CveyJg== dependencies: - "@abp/ng.permission-management" "~3.1.2" - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.permission-management" "~3.2.0" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.permission-management@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.1.2.tgz#bacc09d3e92262d111734e4ffc4344300b16f978" - integrity sha512-nqLo3VFNFeouU33qQHK0abbKCjSlT9VXJk0WYzsiS2Z7lENYqtImRCxqpHlB32ACIdMMUWbmo8OMvYzpt++kRg== +"@abp/ng.permission-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.2.0.tgz#43f7b3c2dca3c066c4ade8d137e3705a0480a55e" + integrity sha512-iPbAhYx8arAwMQ88hxTGSWFwv1UXxxrxSA0IefjCUAX2sdvIC/2WVcfo7UcS5DxM4TIu/+9TKsWC4gRR/8bHsQ== dependencies: - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.schematics@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.1.2.tgz#37a634ada068967468e68def9110ead6960bf8a4" - integrity sha512-ULvkA/smLhErHLe6TdW0CzrortAf4Rjq/eshrMqS0A7EANzlw2TBpjZmn7kJSFawLTatDy9+GyQ8Cewc9H0VXA== +"@abp/ng.schematics@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.2.0.tgz#de45bddf14639b5cc2f39cd34f3b8250620aadaf" + integrity sha512-TV6jElMI4W7P/CmLkbhjzR9BsGdSx6C1SC4rlVvbKfwrpcTQ4jv4YJNOXHyk36EnwNMRu+TkUj+45MlOfEAQkw== dependencies: "@angular-devkit/core" "~10.0.3" "@angular-devkit/schematics" "~10.0.3" @@ -63,37 +63,37 @@ jsonc-parser "^2.3.0" typescript "~3.9.2" -"@abp/ng.setting-management@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.1.2.tgz#dda39e646e79e853b090c3f4af79181a65446af2" - integrity sha512-o01Z7abV0kL4wwsOcRJZp8btev+X0qHCHfLf4u0zAwTjtXc4LzTtlU2hHLT19U42UYZlFUJvENnmTAhLnCLAVw== +"@abp/ng.setting-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.2.0.tgz#f0e4cb4deba76cbe4b49f54977bf260b6f41f4d7" + integrity sha512-cEuVjljCE9N+lLZP3ZOhhnShvRCck0yeAXELzvG/GTsAlJkw99jWUQxG+UI7Dh7lBVhFg9oF4qyr0zzM8Wf/PA== dependencies: - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.tenant-management@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.1.2.tgz#94fd626515575f8c0e361b36eb173a772ea3fc54" - integrity sha512-vdPSBYYxWUSZxhDg2FMadndj+kZ3ddPkzgBaQldncIvhHsxLQCPwj4ZhqXJ7HHqvZ30JqGiJzk4Ejx0Rv5vu+Q== +"@abp/ng.tenant-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.2.0.tgz#7402347ab45e11437838d4a1d5b4f52f908630f7" + integrity sha512-J0ma1fE/q/jDSoZpgV3eCZtd6NA9HrNHXkCi18QprfTAOCTqLipOvit60ed5rrPcZVbxdv8mnVTRtAaP/FnWLA== dependencies: - "@abp/ng.feature-management" "~3.1.2" - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.feature-management" "~3.2.0" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.theme.basic@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.1.2.tgz#e60d15db641a13eebc76d7e793efdc5cf4a6a8f7" - integrity sha512-gYS82euwyVU0D9GLXIqt8h1qtwqXtmu7KqIRyjb0IFi2iIvBGal6jMNKHk6wEI0A0/iNy6pra98bYPUZo+FKxQ== +"@abp/ng.theme.basic@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.2.0.tgz#9a1a80050e37a2d029b0ec0b070f28c7afe06484" + integrity sha512-1z277I8mamzeSzYvJIwgwKXIPreH9CqQq0l+2tGu98HaivOxpkpWeWkviT3Xu6wGHILaTXtwBQMoae2AGEDL7A== dependencies: - "@abp/ng.theme.shared" "~3.1.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.theme.shared@~3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.1.2.tgz#b86940d569a992e72e279c34f50f4e4353b6ecc8" - integrity sha512-/e0oB0azdms4QJTtw+7l95t/UmxU5CxQAB4RLIlbnuJFK4NXZObRjb2ujc6PqdaUCGh5djsWxNqVjkcsWcHX2Q== +"@abp/ng.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.2.0.tgz#0587daa9b88e274656ed7288c3280a80d90d17e0" + integrity sha512-DazYqnJGy5dfDZHQY0kfZF5hANHX+xSc25EFAkteEO4e9Y0XAM5Z3YPn/pdIkxmfBoXAeTiMOjkVeuhyHlgDew== dependencies: - "@abp/ng.core" "~3.1.2" + "@abp/ng.core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.11" @@ -102,30 +102,30 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^3.1.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.2.tgz#e9bca8f6133dc2af587c45825e734d2accabcd96" - integrity sha512-wnbHGQDGkQYazez1YSXAZ0ZDbsIZZr2ZN8V4LtOSAfzmYhPhFZ5qftoM0xoxlbmsuLLX6QtiPvxU35kEmlZPyg== +"@abp/utils@^3.2.0-rc.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" -"@angular-devkit/architect@0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.1.tgz#ec17baf535160199dd7497a931ea60b185d82bfc" - integrity sha512-2jRO7L/k9gNxHVJxPoUMVvtf/KzsSXNT7akbAbb8CkBJxjx3NC3Y9NssPD9E78kyiXogO6IvkwyalBGrWvOPBQ== +"@angular-devkit/architect@0.1001.4": + version "0.1001.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.4.tgz#a10f11ab34cd76ecb469cbc5b06a95e82c9171da" + integrity sha512-0U/w+61vWxnEe9Ln/hNOH6O27FVcU+s/sbJAuPREbP875R4bQzK2PX0eYRlISzkDtQyw16GzlsikLWOoJ3vjTA== dependencies: - "@angular-devkit/core" "10.1.1" + "@angular-devkit/core" "10.1.4" rxjs "6.6.2" -"@angular-devkit/build-angular@~0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1001.1.tgz#b896f5f32defa2750ca166c39ce28c700a21ef73" - integrity sha512-61Ix8oXAdWfu2GSoD76n2vR2HxRYBoh5QrAqmxyMi9++0VrHw6myoVBXfeJ3PzdVkWy7oNMgFPCb3XQGTD73Ow== +"@angular-devkit/build-angular@~0.1001.2": + version "0.1001.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1001.4.tgz#b942d0299121783502da962015c010e27ffbd971" + integrity sha512-R2E9AJ3e7OwFEzStShW5W9F/tGz/JxYCzBdf8e7GkfujZjCVPRE3twRooFGfMlGEruUm/nC+Y0iFRnV0BLRKfw== dependencies: - "@angular-devkit/architect" "0.1001.1" - "@angular-devkit/build-optimizer" "0.1001.1" - "@angular-devkit/build-webpack" "0.1001.1" - "@angular-devkit/core" "10.1.1" + "@angular-devkit/architect" "0.1001.4" + "@angular-devkit/build-optimizer" "0.1001.4" + "@angular-devkit/build-webpack" "0.1001.4" + "@angular-devkit/core" "10.1.4" "@babel/core" "7.11.1" "@babel/generator" "7.11.0" "@babel/plugin-transform-runtime" "7.11.0" @@ -133,7 +133,7 @@ "@babel/runtime" "7.11.2" "@babel/template" "7.10.4" "@jsdevtools/coverage-istanbul-loader" "3.0.5" - "@ngtools/webpack" "10.1.1" + "@ngtools/webpack" "10.1.4" autoprefixer "9.8.6" babel-loader "8.1.0" browserslist "^4.9.1" @@ -188,18 +188,18 @@ webpack-subresource-integrity "1.4.1" worker-plugin "5.0.0" -"@angular-devkit/build-ng-packagr@~0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1001.1.tgz#c200d780e8071ae42c481f525c4a5540bff845b5" - integrity sha512-KX5GuQvQypUpR+qF9qHzNC49GrHx6wsu+AoIily72xTU7+gri0pO2KxQ6aSQiGRENHtvfKYOxMUoeZUvlD2sBA== +"@angular-devkit/build-ng-packagr@~0.1001.2": + version "0.1001.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1001.4.tgz#f6559a4dfe93b808e1c48165e95f118a25f0eab3" + integrity sha512-Ml8FF8q0obsxVzFttDgqzku0sZoJ8i7AYvaOM20L7gFD0JYPfdLBct7TKXVgr0kCO4WO83OJ0v0dk09ywMfCpA== dependencies: - "@angular-devkit/architect" "0.1001.1" + "@angular-devkit/architect" "0.1001.4" rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1001.1.tgz#9c765189c3ce62e361be5f77f03bb6648a9597e3" - integrity sha512-ZjIK0YuE1lQ5X1YM+WAxuuJ5g/g7F97YXlDXEo8wsfIia6dAW4gI7Q8f+lgoqxBwgmxuYEyd4DFHNZZqnH3smQ== +"@angular-devkit/build-optimizer@0.1001.4": + version "0.1001.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1001.4.tgz#566dea3bfd15d851ac70ecc7ecf3e98fee40e98c" + integrity sha512-ZBJF87QFOBq1zQOXDQOEHxCGSZeIgzyddQKNVuVqlPklJHBHYSaUiCKU4Dd+ZdAHQ5FqFlgO3gnYuyy6zaJU6Q== dependencies: loader-utils "2.0.0" source-map "0.7.3" @@ -207,13 +207,13 @@ typescript "4.0.2" webpack-sources "1.4.3" -"@angular-devkit/build-webpack@0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1001.1.tgz#606e30fe170e3af29e2721b2d33c66956ec5f7b8" - integrity sha512-Qm8xhv/1WtAAwX10x6plji4cCnwX0jSmjAQUAkOlpz8iRxygqqKMHWn8BgeF3QxUuerA4kpnT0ym3c+biQIQCg== +"@angular-devkit/build-webpack@0.1001.4": + version "0.1001.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1001.4.tgz#cbdf5a97a2bbe099abeb294d20546b2c475a3d9c" + integrity sha512-4n9pcBD7JE2Cpg3zFBPEOr2r//c3EwnAqFOcDLA3rXt0AUsbnm9H8xPTwb6MHOEMyWS/fscNqYLFGHnVZiunEg== dependencies: - "@angular-devkit/architect" "0.1001.1" - "@angular-devkit/core" "10.1.1" + "@angular-devkit/architect" "0.1001.4" + "@angular-devkit/core" "10.1.4" rxjs "6.6.2" "@angular-devkit/core@10.0.8", "@angular-devkit/core@~10.0.3": @@ -227,10 +227,10 @@ rxjs "6.5.5" source-map "0.7.3" -"@angular-devkit/core@10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.1.tgz#96e4f7af4ef17810f6ff87786c83841f466b4122" - integrity sha512-0ZmknL5I177JO+iOz2gDSqHtPK3zGGwyz4ix9IIu172eFRX53sdbl1vDiMikovyvZWx5fXqU3Vazf7CUeGA28w== +"@angular-devkit/core@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.4.tgz#5db3fa603f2cff3303e687b9e7cc5346db538644" + integrity sha512-B1cwVcfChBvmEacydE2uqZ1UC2ez1G+KY0GyVnCQKpAb/DdfDgtaYjTx9JLvGQjE/BlVklEj8YCKDjVV0WPE5g== dependencies: ajv "6.12.4" fast-json-stable-stringify "2.1.0" @@ -238,12 +238,12 @@ rxjs "6.6.2" source-map "0.7.3" -"@angular-devkit/schematics@10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.1.tgz#70e3ff6c25047f4d97d3eb61912e5d1e245b022a" - integrity sha512-4UrBbDkuzGmBN1YDG3+GBJ21C+X29vxO0k2EDGrFFjQROsDeogeyWJoUP789v4JCCz9DHF2TRmdhQiEBctZXMg== +"@angular-devkit/schematics@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.4.tgz#0966e0cbbdaccc294718db9b84b46ab54c03631b" + integrity sha512-NIueJQYZ8OY3Yr3TGfxcGgP9ZGGsbtM7sa7sf9hSqxEAXdiGQdDJk5nChhtGtoGxUImterwqR8OiGmLcK5lg5g== dependencies: - "@angular-devkit/core" "10.1.1" + "@angular-devkit/core" "10.1.4" ora "5.0.0" rxjs "6.6.2" @@ -256,23 +256,23 @@ ora "4.0.4" rxjs "6.5.5" -"@angular/animations@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.1.1.tgz#5a2baa8fbf2d647f6c61d0547dd9ac266cb52ae0" - integrity sha512-acVxTTGzA5JEspFNyhZKyr/wgCTCDL13fzz9CxMdMY3vgqgy/PiqmMp54MBI37EqgEOCo+PBJSX9uXxF0HqHTw== +"@angular/animations@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.1.4.tgz#32cff0e0c73898e69c51cbdc1974d136a8ba6061" + integrity sha512-l6lSMUljph8orqZVB8Ej6qU1rk0vVCHqJBF7zobGuL47JMuY9+QaEWZ1CIgCishPo9PWq5Wvw/4QqPy9FE/gaw== dependencies: tslib "^2.0.0" -"@angular/cli@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.1.1.tgz#3d11ab26383b46af164afb05bb5c5cf0aa0df392" - integrity sha512-u1Dd2Qe4ShFFef8cehaHoEKOrWo6QONj7yJrlvIIyzcnXWUb3jQmyZoILTv759lRdYF0GrgBx5jCKxzok0jTww== +"@angular/cli@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.1.4.tgz#8aa6b677da3d7ef9661e341893d5b53a5256645d" + integrity sha512-Q61cqx3qMAtMugE28aWAtAaj+c31pRjGlq7xSH2LhQSmaGyoAq7v6qah6gqH1Ik8nlpF9T7jBIozKyqX9aXysg== dependencies: - "@angular-devkit/architect" "0.1001.1" - "@angular-devkit/core" "10.1.1" - "@angular-devkit/schematics" "10.1.1" - "@schematics/angular" "10.1.1" - "@schematics/update" "0.1001.1" + "@angular-devkit/architect" "0.1001.4" + "@angular-devkit/core" "10.1.4" + "@angular-devkit/schematics" "10.1.4" + "@schematics/angular" "10.1.4" + "@schematics/update" "0.1001.4" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.1.1" @@ -289,17 +289,17 @@ universal-analytics "0.4.23" uuid "8.3.0" -"@angular/common@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.1.1.tgz#4f0cdd97af623f58385598cb9eb0fdaa4a964a02" - integrity sha512-RqFUdDU5x6KgFfT2o1fEn2GmxehtqCt9wYfKIaXMtAEPj0LGmc5A/YllxedASnIwlDHxsKL12b0Mc+g3r00zVg== +"@angular/common@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.1.4.tgz#ca52c5ea3aca1533898c3363adc1089f18c94518" + integrity sha512-TWVv2gdbMIHQhdPdCFvBmQKI640LFGnntAceba7MLm2jNrmVglYGY+rWYiKa/+802lroZ8674qVVDqa+QASkyQ== dependencies: tslib "^2.0.0" -"@angular/compiler-cli@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.1.1.tgz#369a512553b9e0912e30b523028a40d18b18113a" - integrity sha512-xpXIt1l6i2QHIkxezkMt87caRZeAs1ls+MgW4EVx62SGzWLB164BFmJ3nshZX53aX68y0x83RS5JENxlANasPA== +"@angular/compiler-cli@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.1.4.tgz#b5aaa7de6173b83ce3ba066232b8c088f2428642" + integrity sha512-5jRL9TKSGQLlP+C3gdJmSjYv7BfzN69SuYir/o0OtBblqzsGeaA21ClPMXl/HOxjFSjnIyGgjN7Caf7VjeMJww== dependencies: canonical-path "1.0.0" chokidar "^3.0.0" @@ -320,10 +320,10 @@ resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.0.0.tgz#87e0bef4c369b6cadae07e3a4295778fc93799d5" integrity sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ== -"@angular/compiler@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.1.1.tgz#0cdb32c279993edbff85792cac7e98226d894de2" - integrity sha512-VJ5eeYBsHR6WzCIKhBsGPYd6zfPNXqD0hD2SAjHqTb/LPnhSPsHGKBzuck+CxvXwChbjKNWzdMPuMAKGahR2ow== +"@angular/compiler@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.1.4.tgz#76268332edb289b282296560e41478a2e323a39c" + integrity sha512-3vkaLE1kfyfkNoU/sf982UBMtB1bvFgBKHdP+YG7qlxVL1nLlQQvzIHKV8YGgtWnK2PMoJMI51In/64M71T0hg== dependencies: tslib "^2.0.0" @@ -332,24 +332,24 @@ resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.0.0.tgz#227dc53e1ac81824f998c6e76000b7efc522641e" integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== -"@angular/core@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.1.1.tgz#833fbfc303419e9e635ed7fe4cb21f3bc76b708e" - integrity sha512-3mvsaZJPg5Z8sGBT0OW3ak0T/UmHmlQ0nkWjwnIdPrMbyv5GoAjTR3Zh3cRK57nGV7ScLk4m4B4INzAjoCDqeA== +"@angular/core@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.1.4.tgz#1180370e335371a0c36f05c2e8142c926a362836" + integrity sha512-GEJkwHG0TPylEkcPj55Ps7f9ryXAwxCDZlv+djSHnOOPjjW8jovgUSg88SRNOJ8pKSjMd8x9yeTQz5fCWaeniw== dependencies: tslib "^2.0.0" -"@angular/forms@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.1.1.tgz#0ba182e1bddd28831a2a8b21f656612bac3691a8" - integrity sha512-p6bsRNG2ctpo6tTDKCZZcbH/lFy1+0OlS8flFoEpMVwVrCg2PtjdlP76mMcmJjvUWdC/c3ySyrODm2bu2H59FQ== +"@angular/forms@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.1.4.tgz#db81ecd854ebcfd53ee8b4ebc94ae1b4d6e5a3e6" + integrity sha512-pupOvPZAUZymjOViB25+gUp3/vK5T5XORNMASHubBZAdZ59nhFU3XMHGDl/uRfuy/CiWOOKaB4aS4MqUo+kK2w== dependencies: tslib "^2.0.0" -"@angular/language-service@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.1.1.tgz#7c027904507a875325fc0db870c809a495eb713e" - integrity sha512-Mg+GUNVPtzSupmjkzIrxzvylM7TGtVP36h61Yd0ixyo7vBcNV+NQ7PTdwfKGVWN0N6PiMuk2/4PA0hW2EokSZg== +"@angular/language-service@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.1.4.tgz#3d428a6bbf0a8ced58c7d3de226fd74123a05389" + integrity sha512-+CsL/HWlja9mxqyvTTqP/rpxjVeuICmTHyfAKxqpq0488N7KTRRLvWXDoL5uwc+lzqhMsaXDasReMO+ATUAUrg== "@angular/localize@~10.0.10": version "10.0.14" @@ -360,24 +360,24 @@ glob "7.1.2" yargs "15.3.0" -"@angular/platform-browser-dynamic@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.1.tgz#b08d329b1b1c072420977776c206ff0adf04039b" - integrity sha512-mYd5ulQ0HYRwbgALegL6W7OlkDLNOlXp3gLLAoNjRfsb4+EocDiR8A4uf1LajL3Qunq3k7XBrcdT1SEQmqu4BQ== +"@angular/platform-browser-dynamic@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.4.tgz#9e25c3c8fdc11d9efb610bd051f701581e1af512" + integrity sha512-RSG3d+rZpdLDQ5HS2QdwecVm0S1ILm42o7cdkghINoaQJocdqi/HHN/3Ow0jr3tk9YOES+Gaoa/rr74izVuysg== dependencies: tslib "^2.0.0" -"@angular/platform-browser@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.1.1.tgz#db04b3cbdfa12229da58588f7f2732ddb787eac5" - integrity sha512-rbI4fu6HRj7b+6MB8HWOdaYmV3CSjOyyrVqWAcNuXfNwZk/KE/OHvLSvQf7dMKnatJARa9bMrZdSQZqPuig1hA== +"@angular/platform-browser@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.1.4.tgz#e65e120905d9f468b39551573d15ef6832063598" + integrity sha512-iEJQCfOrGXSgf0qTdfCMiAzrdecmAzBnF/WzD5Kpy+/NBL+K574KeiV2hTadxdKLJzJojEy2kKZKbb7mnWI9bQ== dependencies: tslib "^2.0.0" -"@angular/router@~10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.1.1.tgz#a9bed93b4d6fac602c5a7fa618be2653cbc7af03" - integrity sha512-f9OI9k6OKzraBsh5/HeG8H7ubi3r+Sveu7sRIBvvzeoUj0uFHRkB2IDIxQHJWBBWUPyPmyvWCJVigUvcJyyarw== +"@angular/router@~10.1.2": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.1.4.tgz#66fd12c01353155c4f66be4972907bd2d0bd4829" + integrity sha512-WuwMAkyCz84xQDxHtTwaZUbr749VsQ5DqIIBZOgodc1hkPpIv7LUg6M5meQriDsASLNkkJWV8cq0EKHIQiBuTA== dependencies: tslib "^2.0.0" @@ -1297,12 +1297,12 @@ dependencies: tslib "^2.0.0" -"@ngtools/webpack@10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.1.1.tgz#28c907f58ec352bc983eeca97205757c8660ed65" - integrity sha512-OByWcvyJy4S4bxVcRCNVMRIyK4+j6XZPDI2K2vS6DZ6Bg/GUnabHMTCS+50RSAYvoaF2Gh0qCCXCA6QbGrSSDw== +"@ngtools/webpack@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.1.4.tgz#84ed4bb7fabbe36d6e0f2b5c82bf04a8ab328a4a" + integrity sha512-t1KFgA6XSOtp0KuE81fWgTYksjJnMcFeKSIuaUPeG3XQQj8ghlMTIsrUx+5/TfGaDO2U/bobsAsvx9qbtyuzNA== dependencies: - "@angular-devkit/core" "10.1.1" + "@angular-devkit/core" "10.1.4" enhanced-resolve "4.3.0" webpack-sources "1.4.3" @@ -1313,24 +1313,24 @@ dependencies: tslib "^1.9.0" -"@ngxs/router-plugin@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@ngxs/router-plugin/-/router-plugin-3.6.2.tgz#058b09565011203bbf52294f16f29f9337aeaa27" - integrity sha512-5J3G9+Qsy/s7iqFivzAN1S6EmaZYTb9hqz7Xjn3c0u3Y44VMP5VWiz77jZ/eowXX0slJywcMxk6oCEFPwz4lXQ== +"@ngxs/router-plugin@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@ngxs/router-plugin/-/router-plugin-3.7.0.tgz#9d0595d8ec12e6143eb9f2f726fcc7cdec8cd635" + integrity sha512-nmArryNIBLWqIKLWelOQhgxEC3evLPDNDkE+PEYvwoASC4NP5rHIqJv0borJAWBCwo10t5wPeT1417vBQex5aQ== dependencies: tslib "^1.9.0" -"@ngxs/storage-plugin@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@ngxs/storage-plugin/-/storage-plugin-3.6.2.tgz#6fe2168891382c635406df02308f67b585efc60a" - integrity sha512-x9CATYmXDH9bWmKW4uQxt5xxb51naSAmMkhvv1QHIrE9hG4uYNqiV3ERAM1wZvZbu2MJB9iXEN0cBziTgrwe2Q== +"@ngxs/storage-plugin@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@ngxs/storage-plugin/-/storage-plugin-3.7.0.tgz#3a0bc75f5dbba17a18e37b69cfde5d470cfceb45" + integrity sha512-j5rGYfhi1S+sAky956DIs+6AYP9FMBWL2Uz+omKBS/i42mjhyD26UfApORjwCOyW5PCb4Tq3B14ZPxyAaSi/OA== dependencies: tslib "^1.9.0" -"@ngxs/store@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.6.2.tgz#cfba63dc1e5bd422e89e54b3332cd69818510624" - integrity sha512-al7GU618SAuz2Ul4rFYVDgS1DM0gHReGOGvbnE7LBt4Etz3gsJERNYXPp2bSA7lZGaRPRaFfIHJN+Lm/GikFJw== +"@ngxs/store@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.0.tgz#e46387219dae610c685accc119ae42e351afcaa4" + integrity sha512-w9fG/DhKBgH1VJMKSoeNW9x9ycD9/Dzy+VkpFD8Jv0JBNX0MRgP+5KQQe3ZKwnJ+7S0UV/99JvJaWgxc/WOvPw== dependencies: tslib "^1.9.0" @@ -1403,22 +1403,22 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.1.1.tgz#96c9aefa12273795688e60f5e420b7397967620e" - integrity sha512-U+5CfLlMqgkfRWZpmA3yzr+Axj1D42k0+tkfuaBrJTJUf5j7+JyULONPvzUh4Pi1c4EZJt+RuCE+AxtUZO/hug== +"@schematics/angular@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.1.4.tgz#6143425e365afe95cbc94290d95ee852ba2d2dd0" + integrity sha512-MWxyrKEiXqNCZ0Uh3zM/iWouQTOWalGy2gFn6Fx6UBgm7nPYgeXoX7wYiCAKIryoehaOFfs/Pw3zfCGgp/gUOw== dependencies: - "@angular-devkit/core" "10.1.1" - "@angular-devkit/schematics" "10.1.1" + "@angular-devkit/core" "10.1.4" + "@angular-devkit/schematics" "10.1.4" jsonc-parser "2.3.0" -"@schematics/update@0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1001.1.tgz#2cb2c539827b550cc9dbd36098a3ecee8c8a9d95" - integrity sha512-71PyE0pTW2u3PPkNBdCXO0gH9pwTgZCfsHNNOWsIsslDDHYHGknJagN0JM/X1YAJ0nVZPgvMC0GSJ/xtIoCZmA== +"@schematics/update@0.1001.4": + version "0.1001.4" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1001.4.tgz#5c33c1a8579c72add1fe44ed3f4d6921c4dd9ac0" + integrity sha512-E2xIPWQoHgv+CRAYWV0LSNoa8JmOcgyxlrQvn44f6A80ySNDyrfcRP8VNzpk1UnGkBcjwEVhYeLuY+F0aguC3g== dependencies: - "@angular-devkit/core" "10.1.1" - "@angular-devkit/schematics" "10.1.1" + "@angular-devkit/core" "10.1.4" + "@angular-devkit/schematics" "10.1.4" "@yarnpkg/lockfile" "1.1.0" ini "1.3.5" npm-package-arg "^8.0.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor index 114be0b5e1..0f0d1935df 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor @@ -1,7 +1,6 @@ @page "/" @using Volo.Abp.Users @using Volo.Abp.MultiTenancy -@using System.Security.Claims @using Microsoft.Extensions.Localization @using MyCompanyName.MyProjectName.Localization @inject ICurrentUser CurrentUser @@ -14,16 +13,39 @@
Congratulations, MyProjectName is successfully running!
+ + + UI Message Tests + + + + + + + + + +

Welcome to the Application

@L["LongWelcomeMessage"]

- @if (!CurrentUser.IsAuthenticated) + @if ( !CurrentUser.IsAuthenticated ) { @L["Login"] - } + }
@@ -157,18 +179,4 @@ abpframework

-
- -@code -{ - private IEnumerable _claims; - - protected override async Task OnInitializedAsync() - { - var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); - if (authState.User.Identity.IsAuthenticated) - { - _claims = authState.User.Claims; - } - } -} +
\ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs new file mode 100644 index 0000000000..0724ee6c97 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Threading.Tasks; +using Blazorise; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.WebAssembly; + +namespace MyCompanyName.MyProjectName.Blazor.Pages +{ + public partial class Index + { + private IEnumerable _claims; + + protected override async Task OnInitializedAsync() + { + var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); + if ( authState.User.Identity.IsAuthenticated ) + { + _claims = authState.User.Claims; + } + } + + Task OnInfoTestClicked() + { + return UiMessageService.InfoAsync( "This is the Info message", "Info", options => + { + options.OkButtonIcon = IconName.InfoCircle; + options.OkButtonText = "Hello info"; + } ); + } + + Task OnSuccessTestClicked() + { + return UiMessageService.SuccessAsync( "This is the Success message", "Success" ); + } + + Task OnWarningTestClicked() + { + return UiMessageService.WarnAsync( "This is the Warning message", "Warning" ); + } + + Task OnErrorTestClicked() + { + return UiMessageService.ErrorAsync( "This is the Error message", "Error" ); + } + + Task OnConfirmTestClicked() + { + return UiMessageService.ConfirmAsync( "Are you sure you want to delete the item?", "Confirm", options => + { + options.CancelButtonText = "Do not delete it"; + options.ConfirmButtonText = "Yes I'm sure"; + } ) + .ContinueWith( result => + { + if ( result.Result ) + { + Console.WriteLine( "Confirmed" ); + } + else + { + Console.WriteLine( "Cancelled" ); + } + } ); + } + + [Inject] IUiMessageService UiMessageService { get; set; } + } +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor index b1ade9c628..3fcce1e0d0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor @@ -9,3 +9,5 @@ @using MyCompanyName.MyProjectName.Blazor @using Blazorise @using Blazorise.DataGrid +@using Volo.Abp.BlazoriseUI; +@using Volo.Abp.BlazoriseUI.Components; \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 14babd4642..ad116c7b98 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -35,7 +35,7 @@ namespace MyCompanyName.MyProjectName typeof(MyProjectNameApplicationModule), typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), typeof(AbpAspNetCoreSerilogModule) - )] + )] public class MyProjectNameHttpApiHostModule : AbpModule { private const string DefaultCorsPolicyName = "Default"; @@ -57,10 +57,7 @@ namespace MyCompanyName.MyProjectName private void ConfigureCache(IConfiguration configuration) { - Configure(options => - { - options.KeyPrefix = "MyProjectName:"; - }); + Configure(options => { options.KeyPrefix = "MyProjectName:"; }); } private void ConfigureVirtualFileSystem(ServiceConfigurationContext context) @@ -71,10 +68,18 @@ namespace MyCompanyName.MyProjectName { Configure(options => { - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain.Shared")); - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain")); - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application.Contracts")); - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain.Shared")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application.Contracts")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application")); }); } } @@ -93,7 +98,7 @@ namespace MyCompanyName.MyProjectName .AddJwtBearer(options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = true; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = "MyProjectName"; }); } @@ -191,14 +196,11 @@ namespace MyCompanyName.MyProjectName app.UseAuthorization(); app.UseSwagger(); - app.UseSwaggerUI(options => - { - options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); - }); + app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); app.UseAuditing(); app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } } -} +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs index c8dc3d4740..94c39716dd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs @@ -17,6 +17,7 @@ namespace MyCompanyName.MyProjectName .MinimumLevel.Information() #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() .WriteTo.Async(c => c.File("Logs/logs.txt")) #if DEBUG diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json index 9303043128..2cb4b81ab9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json @@ -9,7 +9,8 @@ "Configuration": "127.0.0.1" }, "AuthServer": { - "Authority": "https://localhost:44301" + "Authority": "https://localhost:44301", + "RequireHttpsMetadata": "true" }, "Settings": { "Abp.Mailing.Smtp.Host": "127.0.0.1", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 405867b7fe..8992c7c555 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -36,7 +36,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAccountWebIdentityServerModule), typeof(AbpAspNetCoreSerilogModule) - )] + )] public class MyProjectNameHttpApiHostModule : AbpModule { private const string DefaultCorsPolicyName = "Default"; @@ -71,10 +71,18 @@ namespace MyCompanyName.MyProjectName { Configure(options => { - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain.Shared")); - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain")); - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application.Contracts")); - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain.Shared")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application.Contracts")); + options.FileSets.ReplaceEmbeddedByPhysical( + Path.Combine(hostingEnvironment.ContentRootPath, + $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Application")); }); } } @@ -93,11 +101,12 @@ namespace MyCompanyName.MyProjectName .AddJwtBearer(options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = false; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = "MyProjectName"; - options.BackchannelHttpHandler = new HttpClientHandler() + options.BackchannelHttpHandler = new HttpClientHandler { - ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + ServerCertificateCustomValidationCallback = + HttpClientHandler.DangerousAcceptAnyServerCertificateValidator }; }); } @@ -183,14 +192,11 @@ namespace MyCompanyName.MyProjectName app.UseAuthorization(); app.UseSwagger(); - app.UseSwaggerUI(options => - { - options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); - }); + app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); app.UseAuditing(); app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } } -} +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs index c8dc3d4740..94c39716dd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs @@ -17,6 +17,7 @@ namespace MyCompanyName.MyProjectName .MinimumLevel.Information() #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() .WriteTo.Async(c => c.File("Logs/logs.txt")) #if DEBUG diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json index d71ef4ef79..9b456d26b9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json @@ -7,7 +7,8 @@ "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" }, "AuthServer": { - "Authority": "https://localhost:44305" + "Authority": "https://localhost:44305", + "RequireHttpsMetadata": "false" }, "Settings": { "Abp.Mailing.Smtp.Host": "127.0.0.1", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 9b79ab6170..64a770f40e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/abp/core/abp.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/abp/core/abp.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index 523197e919..bcfe258976 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs index a159ca7aed..ec99b96d37 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs @@ -17,6 +17,7 @@ namespace MyCompanyName.MyProjectName .MinimumLevel.Information() #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() .WriteTo.Async(c => c.File("Logs/logs.txt")) #if DEBUG diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index fba2dab1f7..3c54abaaa7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 72a5d2df3d..b8e6718657 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index 7939bf80d0..23423673e0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -130,7 +130,7 @@ namespace MyCompanyName.MyProjectName.Web .AddAbpOpenIdConnect("oidc", options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = true; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.ResponseType = OpenIdConnectResponseType.CodeIdToken; options.ClientId = configuration["AuthServer:ClientId"]; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/appsettings.json index e9330b776e..f1a6421610 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/appsettings.json @@ -12,6 +12,7 @@ }, "AuthServer": { "Authority": "https://localhost:44301", + "RequireHttpsMetadata": "true", "ClientId": "MyProjectName_Web", "ClientSecret": "1q2w3e*" } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 9b79ab6170..64a770f40e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 72a5d2df3d..b8e6718657 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 8437aed2d6..582ac8c2c2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -97,7 +97,7 @@ namespace MyCompanyName.MyProjectName.Web .AddJwtBearer(options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = false; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = "MyProjectName"; }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json index 6cfe8948fa..18dc17e87a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json @@ -6,7 +6,8 @@ "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" }, "AuthServer": { - "Authority": "https://localhost:44303" + "Authority": "https://localhost:44303", + "RequireHttpsMetadata": "false" }, "IdentityServer": { "Clients": { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 9b79ab6170..64a770f40e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/abp/core/abp.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/abp/core/abp.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 523197e919..bcfe258976 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 328dd7f8e0..951d97daf9 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.2.0", - "@abp/ng.identity": "~3.2.0", - "@abp/ng.setting-management": "~3.2.0", - "@abp/ng.tenant-management": "~3.2.0", - "@abp/ng.theme.basic": "~3.2.0", + "@abp/ng.account": "~3.2.1", + "@abp/ng.identity": "~3.2.1", + "@abp/ng.setting-management": "~3.2.1", + "@abp/ng.tenant-management": "~3.2.1", + "@abp/ng.theme.basic": "~3.2.1", "@angular/animations": "~10.1.2", "@angular/common": "~10.1.2", "@angular/compiler": "~10.1.2", @@ -33,7 +33,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~3.2.0", + "@abp/ng.schematics": "~3.2.1", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular/cli": "~10.1.2", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 5393668be9..4133790528 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.2.0", - "@abp/ng.theme.shared": ">=3.2.0" + "@abp/ng.core": ">=3.2.1", + "@abp/ng.theme.shared": ">=3.2.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index e810932935..12324b9f3c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -109,7 +109,7 @@ namespace MyCompanyName.MyProjectName .AddJwtBearer(options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = false; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = "MyProjectName"; }); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json index d05f571054..d04f8779b8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json @@ -10,6 +10,7 @@ "Configuration": "127.0.0.1" }, "AuthServer": { - "Authority": "https://localhost:44301/" + "Authority": "https://localhost:44301/", + "RequireHttpsMetadata": "false" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index f257857d18..a3bbb4220a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -125,7 +125,7 @@ namespace MyCompanyName.MyProjectName .AddJwtBearer(options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = false; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = configuration["AuthServer:ApiName"]; }); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json index bee76cb9a1..efb325fd37 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json @@ -12,6 +12,7 @@ }, "AuthServer": { "Authority": "https://localhost:44301/", + "RequireHttpsMetadata": "false", "ApiName": "MyProjectName" }, "IdentityServer": { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index fba2dab1f7..3c54abaaa7 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 72a5d2df3d..b8e6718657 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index be3b55d793..dae455f1a9 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -144,7 +144,7 @@ namespace MyCompanyName.MyProjectName .AddAbpOpenIdConnect("oidc", options => { options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = false; + options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.ResponseType = OpenIdConnectResponseType.CodeIdToken; options.ClientId = configuration["AuthServer:ClientId"]; diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/appsettings.json index 22405a15b6..eb949080df 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/appsettings.json @@ -15,6 +15,7 @@ }, "AuthServer": { "Authority": "https://localhost:44301/", + "RequireHttpsMetadata": "false", "ClientId": "MyProjectName_Web", "ClientSecret": "1q2w3e*" } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 9b79ab6170..64a770f40e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 72a5d2df3d..b8e6718657 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 9b79ab6170..64a770f40e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/abp/core/abp.js b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/abp/core/abp.js index 20bd92147a..72af4bd106 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/abp/core/abp.js +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/wwwroot/libs/abp/core/abp.js @@ -689,7 +689,7 @@ var abp = abp || {}; abp.security.antiForgery = abp.security.antiForgery || {}; abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; - abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'RequestVerificationToken'; abp.security.antiForgery.getToken = function () { return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index 1a8ccc322d..f89fd42bb2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" - integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.1.tgz#d8f9af85b6114d35bba5942e303b3a4b89c8cd75" + integrity sha512-utHlyw/xbtDqqA0ETrYTxZ8ZO49tI6FP3BAvRdevbhozdG8/el6BWpifZysKJv2VIm6d5P7DXD3uymCd5iX6EA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" - integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0" - "@abp/bootstrap" "~3.2.0" - "@abp/bootstrap-datepicker" "~3.2.0" - "@abp/datatables.net-bs4" "~3.2.0" - "@abp/font-awesome" "~3.2.0" - "@abp/jquery-form" "~3.2.0" - "@abp/jquery-validation-unobtrusive" "~3.2.0" - "@abp/lodash" "~3.2.0" - "@abp/luxon" "~3.2.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" - "@abp/select2" "~3.2.0" - "@abp/sweetalert" "~3.2.0" - "@abp/timeago" "~3.2.0" - "@abp/toastr" "~3.2.0" - -"@abp/aspnetcore.mvc.ui@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" - integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.1.tgz#b628602dca8d1809e32f423962cff56379a790b0" + integrity sha512-aWZAaFnN9Ncyzy84wPTfUVtcyh98Sxu4m+fsGY5XtwA/nwDTDVtLMq81ueJWyFgN9GNk8+lT6VXfPDpA/MJo/A== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.1" + "@abp/bootstrap" "~3.2.1" + "@abp/bootstrap-datepicker" "~3.2.1" + "@abp/datatables.net-bs4" "~3.2.1" + "@abp/font-awesome" "~3.2.1" + "@abp/jquery-form" "~3.2.1" + "@abp/jquery-validation-unobtrusive" "~3.2.1" + "@abp/lodash" "~3.2.1" + "@abp/luxon" "~3.2.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.1" + "@abp/select2" "~3.2.1" + "@abp/sweetalert" "~3.2.1" + "@abp/timeago" "~3.2.1" + "@abp/toastr" "~3.2.1" + +"@abp/aspnetcore.mvc.ui@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.1.tgz#dc0d2c331bf09ef0f79cec739e0f64edb1105084" + integrity sha512-Fpn16MeK71Uhw6636nlXCQaSwN9lN6QFUIGIICcWU+2eMA8fK4ZtavaYGG4mWqjkd4wzUHCz2AZbmbxK7bVnng== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" - integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== +"@abp/bootstrap-datepicker@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.1.tgz#5cb75bc53fab86f7b28bfc5fbfcbf233432d75ca" + integrity sha512-KzTDZTMd/TBaTDNuPF4+T+0zsmEimD2Uq8TlNw7knEEyo7a/lsfBNkBF9Xc8bjZcbC76BqajytsTzI1yftM4Uw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" - integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== +"@abp/bootstrap@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.1.tgz#9574414f1e170240dacdf78408af34830264db97" + integrity sha512-gLIr4d5xfw5TSpSHIKr7oKznkdIbGhS+gtBitP1BFVLOU2h7/d6uTZoopC+JQU16DGvn8njo8W4DL7Amh9FOqQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" - integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== +"@abp/core@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.1.tgz#3c133f67394d716df3e49f1eeb934c586df755e5" + integrity sha512-GbjrFO+oKl4JuZkYdeWtE+N837XRQr0hoX8O3pI1eAnuMku48QhGec2ZpSJuqG+c3wX6PHTZPIyHse4X+y6QgA== dependencies: - "@abp/utils" "^3.2.0" + "@abp/utils" "^3.2.1" -"@abp/datatables.net-bs4@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" - integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== +"@abp/datatables.net-bs4@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.1.tgz#b008b2964472fd8c8286a7c4b1e903d93a52e760" + integrity sha512-C/MmA6URugDD1tdUS6zS413ycHCjefeIG7nnJrtJmCZix7mfbdrp/Km/vKbE1KMSEYWis0w/SxIEy0kbkIW4OQ== dependencies: - "@abp/datatables.net" "~3.2.0" + "@abp/datatables.net" "~3.2.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" - integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== +"@abp/datatables.net@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.1.tgz#ba7d4c875ad2bc126687bc5d8e627f3c4d7fb2f4" + integrity sha512-o8/K6RGnPkQUe5ClAxyHNBOevVBnb8qSM4NXRXR2AUtEvjal+4UL9QOf1LZ0zPv4OAjaaAiOAp9Pmbv4FWuZ8Q== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" - integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== +"@abp/font-awesome@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.1.tgz#d54a6d9627fdfeb6c615550f09241d0c805e3d39" + integrity sha512-5BlAuIX4qFdf/mvycUAREmVQ8jg0tRtDnVXt0E8kUtzghhEGG91NfcZIaB4zaWAwuJSyqqjS/VJ/URy1g50NZQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" - integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== +"@abp/jquery-form@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.1.tgz#9280b28e2103fc80b9124e3a53f2f0e03ac4bb46" + integrity sha512-Dy0wTCcmWgygrru59VPnlVw7qLu8aLTZOTpMPbSva502O19O+H7FljF9r0J7eYgoO6pcTO4R1tE/Yib3DwIBFg== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" - integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== +"@abp/jquery-validation-unobtrusive@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.1.tgz#8f0b54f0d39b00ab93638fe1537ae7bd77e3e78e" + integrity sha512-mr/jZVm8QuYO1vWcNo3ytuQEeMBvjnMiTrvoUzY1OXX+HUFR6oi8FohXgxFUypElAqQ8jelV9K0qonX1zTQhcg== dependencies: - "@abp/jquery-validation" "~3.2.0" + "@abp/jquery-validation" "~3.2.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" - integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== +"@abp/jquery-validation@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.1.tgz#b5330eb404f357936d16f3dd81752076bfee963d" + integrity sha512-nmubyFyA8TbLdsJt8MAspSRN4St8Xn8ICB8ancdiyxbS/6u9oeKlvP4++ZZ881NlFkPsyo7GkHjfl29pNzzzJA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" - integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== +"@abp/jquery@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.1.tgz#c7ee0bbff0b480b8ed01f46d1ce07ebc8c35e4a2" + integrity sha512-AvfQ9rnnb+pQUDuGnuhpCB+FzWz3EqDptoeiCDQjPXxGql3Wk5GWw6QzvuREOXcU4CoUyzigyDgnO5WaSlx8kQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" jquery "~3.5.1" -"@abp/lodash@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" - integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== +"@abp/lodash@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.1.tgz#7abfe7d572eaa628c033a6d50520b8510ecce79a" + integrity sha512-ZDte0vUfM1fBrs/mRq7yCuugtYZKoP/6pOEebDOMdM1GztAEKicq8s7EXxwbqE4+kjxqeHzReh7ZwCtFAf/Zew== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" lodash "^4.17.15" -"@abp/luxon@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" - integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== +"@abp/luxon@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.1.tgz#ad3473f24dbacd4d1bc15a07ee75cc1db7f1df6c" + integrity sha512-WZgAMHNx1beQSA48ZJ2x2g408iBXBUvKwBwAFJqbhNhEsO95tutO80j1LNHYvXCbrAatoz6K6IDRXDXV1U3zyg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" - integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.1.tgz#f4a19c6de14c7193eaf6c55c429580dcbcfe3965" + integrity sha512-pu8Tuh67ruG1fLEud1eves/eiBCiuowL+LVLyW+iX1bByfVlOB40nMQ7UCMQ6Jvv31pTEK2dfQ/n8K3W/pFiWQ== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" - integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== +"@abp/select2@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.1.tgz#8a04a6f5f10cc4a48a3da37bbc38ff655e626ddf" + integrity sha512-i/euJ+kTHakwCI3Hf9+NhiQG+MYlU0iwp6GRmS2uHqgkMd2gVjnBq+elA2jsi50PXpxowv4vdBCNHcicI58W2w== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" - integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== +"@abp/sweetalert@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.1.tgz#be99820491499fea06259fbc584e799a51cbabf3" + integrity sha512-If5UJQVJ05aEbxPHrwRpuEzCT5ygOHmPzpBblpzSo5XxNNDGGlumnwYmtbXBSXutXrIR0b5//Bo1EgBVtmJHOg== dependencies: - "@abp/core" "~3.2.0" + "@abp/core" "~3.2.1" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" - integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== +"@abp/timeago@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.1.tgz#4e5e6c76d5440de65646a076ce1a9d7225882243" + integrity sha512-4WLWoCYiSg5zYPcogV47TXA+YomDHHY0YfHHWmr6TP2bHd5ghsnMqnnkt58nUN9Psd77teo+Mo9jgR0h2IxRwQ== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" timeago "^1.6.7" -"@abp/toastr@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" - integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== +"@abp/toastr@~3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.1.tgz#d35b44234ca6cbd5da6cc5f65d15e827bd7970dc" + integrity sha512-nBmWGL49psSF2tcNnR6PGBcfFAxo2u5HHNRzv2c2z46ZEGFa5DjuY46KZC24jMWY+yprINQewhKTmQUqJvaHqA== dependencies: - "@abp/jquery" "~3.2.0" + "@abp/jquery" "~3.2.1" toastr "^2.1.4" -"@abp/utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" - integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== +"@abp/utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.1.tgz#960a0bbdfb781bbd6fb05e80bba2b9d95f2ae44c" + integrity sha512-bqYa1VIi1tZXCUbP2Z1WlcgPD4/wjhDVM1jiAN9UzDls1K3u+e2LyR4gLoN39WW1ULjCIhyzEAw/JgTcMmpUBw== dependencies: just-compare "^1.3.0"