diff --git a/deploy/_run_all.ps1 b/deploy/_run_all.ps1 new file mode 100644 index 0000000000..fa2596925e --- /dev/null +++ b/deploy/_run_all.ps1 @@ -0,0 +1,7 @@ +./1-fetch-and-build.ps1 +./2-nuget-pack.ps1 +./3-nuget-push.ps1 +./4-npm-publish-mvc.ps1 +./5-npm-publish-angular.ps1 +./6-git-commit.ps1 +echo "Create a new release on GitHub manually and run the step 8..." \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs index 40478d109b..2ade6dbd77 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs @@ -121,7 +121,6 @@ public class NpmPackagesUpdater : ITransientDependency { var fileName = Path.Combine(directoryName, ".npmrc"); var abpRegistry = "@abp:registry=https://www.myget.org/F/abp-nightly/npm"; - var voloRegistry = await GetVoloRegistryAsync(); if (await NpmrcFileExistAsync(directoryName)) { @@ -132,11 +131,6 @@ public class NpmPackagesUpdater : ITransientDependency fileContent += Environment.NewLine + abpRegistry; } - if (!fileContent.Contains(voloRegistry)) - { - fileContent += Environment.NewLine + voloRegistry; - } - File.WriteAllText(fileName, fileContent); return; @@ -145,42 +139,10 @@ public class NpmPackagesUpdater : ITransientDependency using var fs = File.Create(fileName); var content = new UTF8Encoding(true) - .GetBytes(abpRegistry + Environment.NewLine + voloRegistry); + .GetBytes(abpRegistry); fs.Write(content, 0, content.Length); } - private async Task GetVoloRegistryAsync() - { - var apikey = await GetApiKeyAsync(); - - if (string.IsNullOrWhiteSpace(apikey)) - { - return ""; - } - - return "@volo:registry=https://www.myget.org/F/abp-commercial/auth/" + apikey + "/npm/"; - } - - public async Task GetApiKeyAsync() - { - try - { - var client = _cliHttpClientFactory.CreateClient(); - using (var response = await client.GetHttpResponseMessageWithRetryAsync( - url: $"{CliUrls.WwwAbpIo}api/myget/apikey/", - cancellationToken: CancellationTokenProvider.Token, - logger: Logger - )) - { - return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); - } - } - catch (Exception) - { - return string.Empty; - } - } - private static bool IsAngularProject(string fileDirectory) { return File.Exists(Path.Combine(fileDirectory, "angular.json")); diff --git a/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts index b6c4cce653..056c355b1c 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts @@ -21,3 +21,10 @@ export function interpolate(text: string, params: string[]) { .replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => params[digit] ?? match) .replace(/\s+/g, ' '); } + +export function escapeHtmlChars(value: string) { + return ( + value && + value.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"') + ); +} diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts index d71487e611..c26124c531 100644 --- a/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts @@ -1,4 +1,4 @@ -import { LocalizationService } from '@abp/ng.core'; +import { escapeHtmlChars, LocalizationService } from '@abp/ng.core'; import { IdentityRoleDto } from '@abp/ng.identity/proxy'; import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; import { of } from 'rxjs'; @@ -15,7 +15,7 @@ export const DEFAULT_ROLES_ENTITY_PROPS = EntityProp.createMany const { isDefault, isPublic, name } = data.record; return of( - name + + escapeHtmlChars(name) + (isDefault ? `${t( 'AbpIdentity::DisplayName:IsDefault', diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts index cfd9d57c5b..407d92662b 100644 --- a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts @@ -1,4 +1,4 @@ -import { LocalizationService } from '@abp/ng.core'; +import { escapeHtmlChars, LocalizationService } from '@abp/ng.core'; import { IdentityUserDto } from '@abp/ng.identity/proxy'; import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; import { of } from 'rxjs'; @@ -21,7 +21,9 @@ export const DEFAULT_USERS_ENTITY_PROPS = EntityProp.createMany return of( ` ${!data.record.isActive ? inactiveIcon : ''} - ${data.record.userName}`, + ${escapeHtmlChars( + data.record.userName, + )}`, ); }, }, diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-props.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-props.ts index fad8c29ade..dcbd56c07f 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-props.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-props.ts @@ -1,7 +1,7 @@ +import { ABP, escapeHtmlChars } from '@abp/ng.core'; import { Type } from '@angular/core'; import { Observable, of } from 'rxjs'; import { O } from 'ts-toolbelt'; -import { ABP } from '@abp/ng.core'; import { ActionCallback } from './actions'; import { Prop, @@ -43,7 +43,8 @@ export class EntityProp extends Prop { this.columnWidth = options.columnWidth; this.sortable = options.sortable || false; - this.valueResolver = options.valueResolver || (data => of(data.record[this.name])); + this.valueResolver = + options.valueResolver || (data => of(escapeHtmlChars(data.record[this.name]))); this.action = options.action; this.component = options.component; this.enumList = options.enumList;