From 224f37a379d6dca48eab96034cbe12e4c9f6c567 Mon Sep 17 00:00:00 2001 From: sainalshah Date: Thu, 31 Dec 2020 22:31:01 +0800 Subject: [PATCH 1/6] Issue 1818: Add support for digest algorithm configuration for maven repos --- .../manage-repository.component.html | 13 ++++++ .../manage-repository.component.ts | 46 ++++++++++++++++++- .../storage-management/repository.model.ts | 1 + 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html index 90ef49e..6ccbd0d 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html @@ -56,6 +56,19 @@ +
+ + Override checksum digest algorithms + + + + + {{ algorithm }} + + + +
+
Enable trash diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts index c404f8b..37fb6fb 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts @@ -12,6 +12,7 @@ import {CdkDragDrop, moveItemInArray, transferArrayItem} from '@angular/cdk/drag import {Breadcrumb} from '../../../../shared/layout/components/breadcrumb/breadcrumb.model'; import {StorageManagerService} from '../../services/storage-manager.service'; import { + CustomRepositoryConfiguration, RemoteRepositoryChecksumPolicyEnum, RemoteRepositoryConfiguration, Repository, @@ -42,6 +43,8 @@ export class ManageRepositoryComponent implements OnInit { activeGroupRepositories: string[] = []; availableGroupRepositories: string[] = []; + availableDigestAlgorithmSet: string[] = ['MD5', 'SHA-1', 'SHA-256', 'SHA-512']; + overrideAlgorithmConfig = false; form: FormGroup; @@ -54,6 +57,12 @@ export class ManageRepositoryComponent implements OnInit { } generateCommonFormFields(type: RepositoryTypeEnum, repo: Repository) { + let repositoryConfiguration; + if (repo.layout === RepositoryLayoutEnum.MAVEN2) { + repositoryConfiguration = new FormGroup({...this.generateMavenRepositoryFormFields(repo.repositoryConfiguration)}); + } else { + repositoryConfiguration = new FormControl(null); + } let fields = { type: new FormControl(type, [Validators.required]), id: new FormControl(repo.id), @@ -74,7 +83,7 @@ export class ManageRepositoryComponent implements OnInit { proxyConfiguration: new FormControl(null), remoteRepository: new FormControl(null), httpConnectionPool: new FormControl(null), - repositoryConfiguration: new FormControl(null), + repositoryConfiguration: repositoryConfiguration, groupRepositories: new FormControl(null), artifactCoordinateValidators: new FormControl(null), }; @@ -89,6 +98,22 @@ export class ManageRepositoryComponent implements OnInit { return fields; } + generateMavenRepositoryFormFields(repositoryConfiguration: CustomRepositoryConfiguration) { + if (repositoryConfiguration['digestAlgorithmSet'] + && repositoryConfiguration['digestAlgorithmSet'].length > 0) { + this.overrideAlgorithmConfig = true; + } + return { + layout: new FormControl(RepositoryLayoutEnum.MAVEN2), + indexingEnabled: new FormControl(repositoryConfiguration['indexingEnabled']), + indexingClassNamesEnabled: new FormControl(repositoryConfiguration['indexingClassNamesEnabled']), + cronExpression: new FormControl(repositoryConfiguration['cronExpression']), + metadataExpirationStrategy: new FormControl(repositoryConfiguration['metadataExpirationStrategy']), + digestAlgorithmSet: new FormControl(repositoryConfiguration['digestAlgorithmSet'], + this.overrideAlgorithmConfig ? Validators.required : null) + }; + } + isHostedRepository() { return this.type$.getValue() === RepositoryTypeEnum.HOSTED; } @@ -186,13 +211,16 @@ export class ManageRepositoryComponent implements OnInit { submit() { if (this.form.valid) { this.loading$.next(true); - const repository: Repository = plainToClass(Repository, this.form.getRawValue(), {groups: ['submit']}) as any; if (this.isGroupRepository()) { repository.groupRepositories = this.activeGroupRepositories; } + if (!this.overrideAlgorithmConfig) { + repository.repositoryConfiguration['digestAlgorithmSet'] = []; + } + this.service .saveRepository(this.storageId$.getValue(), repository) .pipe(catchError(err => handleFormError(err, this.form, this.loading$))) @@ -289,6 +317,16 @@ export class ManageRepositoryComponent implements OnInit { }); } + onOverrideAlgorithmConfigChange() { + this.overrideAlgorithmConfig = !this.overrideAlgorithmConfig; + if (this.overrideAlgorithmConfig) { + this.form.get('repositoryConfiguration.digestAlgorithmSet').setValidators([Validators.required]); + } else { + this.form.get('repositoryConfiguration.digestAlgorithmSet').clearValidators(); + } + this.form.get('repositoryConfiguration.digestAlgorithmSet').updateValueAndValidity(); + } + getRepositoryEnumType(repository: Repository | string): RepositoryTypeEnum { if (repository instanceof Repository) { return RepositoryTypeEnum[repository.type.toLocaleUpperCase()]; @@ -304,4 +342,8 @@ export class ManageRepositoryComponent implements OnInit { && Object.values(RepositoryTypeEnum).map(v => v.toLocaleUpperCase()).includes(repositoryType.toLocaleUpperCase()); } + isMavenLayout() { + return this.form.get('layout').value === RepositoryLayoutEnum.MAVEN2; + } + } diff --git a/src/app/modules/storage-management/repository.model.ts b/src/app/modules/storage-management/repository.model.ts index fdd1161..0032632 100644 --- a/src/app/modules/storage-management/repository.model.ts +++ b/src/app/modules/storage-management/repository.model.ts @@ -116,6 +116,7 @@ export class Repository { constructor(type: RepositoryTypeEnum = null) { this.type = type; + this.repositoryConfiguration = new CustomRepositoryConfiguration(); if (type === RepositoryTypeEnum.PROXY) { this.proxyConfiguration = new ProxyConfiguration(); From bcce264f2302c6ed97618b7cb9ff8b0b8a8e6f08 Mon Sep 17 00:00:00 2001 From: sainalshah Date: Thu, 31 Dec 2020 23:58:19 +0800 Subject: [PATCH 2/6] Issue 1818: Add support for global digest algorithm configuration --- .../manage-settings.component.html | 18 ++++++++++++++++++ .../manage-settings.component.ts | 6 +++++- .../manage-repository.component.ts | 2 +- .../shared/form/services/form-data.service.ts | 4 ++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html index 8052827..77106bf 100644 --- a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html +++ b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html @@ -203,6 +203,24 @@ + + + + Repository configuration + + +
+
+ + + + {{ algorithm }} + + + +
+
+
diff --git a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts index ba2a62a..256fbbf 100644 --- a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts +++ b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts @@ -8,6 +8,7 @@ import {ToastrService} from 'ngx-toastr'; import {Breadcrumb} from '../../../../shared/layout/components/breadcrumb/breadcrumb.model'; import {ServerSettingsService} from '../../services/server-settings.service'; import {ApiResponse, handleFormError} from '../../../core/core.model'; +import {FormDataService} from '../../../../shared/form/services/form-data.service'; @Component({ selector: 'app-manage-settings', @@ -19,6 +20,7 @@ export class ManageSettingsComponent implements OnInit, OnDestroy { loading$: BehaviorSubject = new BehaviorSubject(false); settingsForm: FormGroup; + availableDigestAlgorithmSet = this.formDataService.getAvailableDigestAlgorithmSet(); breadcrumbs: Breadcrumb[] = [ {label: 'Global settings', url: ['/admin/server-settings']} @@ -30,7 +32,8 @@ export class ManageSettingsComponent implements OnInit, OnDestroy { private cdr: ChangeDetectorRef, private service: ServerSettingsService, private store: Store, - private notify: ToastrService) { + private notify: ToastrService, + private formDataService: FormDataService) { } ngOnInit() { @@ -55,6 +58,7 @@ export class ManageSettingsComponent implements OnInit, OnDestroy { return null; } ]), + digestAlgorithmSet: new FormControl(), corsConfigurationForm: new FormGroup({ allowedOrigins: new FormControl(), corsAllowAll: new FormControl(), diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts index 37fb6fb..7971e44 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts @@ -43,7 +43,7 @@ export class ManageRepositoryComponent implements OnInit { activeGroupRepositories: string[] = []; availableGroupRepositories: string[] = []; - availableDigestAlgorithmSet: string[] = ['MD5', 'SHA-1', 'SHA-256', 'SHA-512']; + availableDigestAlgorithmSet = this.formDataService.getAvailableDigestAlgorithmSet(); overrideAlgorithmConfig = false; form: FormGroup; diff --git a/src/app/shared/form/services/form-data.service.ts b/src/app/shared/form/services/form-data.service.ts index 74a549f..0952dcc 100644 --- a/src/app/shared/form/services/form-data.service.ts +++ b/src/app/shared/form/services/form-data.service.ts @@ -119,6 +119,10 @@ export class FormDataService { private sanitize(str) { return str === null || str === '' ? '' : str; } + + getAvailableDigestAlgorithmSet(): string[] { + return ['MD5', 'SHA-1', 'SHA-256', 'SHA-512']; + } } export function mapFormValueData() { From 1e12d41bebaad127df8908cb794df70b01968144 Mon Sep 17 00:00:00 2001 From: sainalshah Date: Fri, 1 Jan 2021 10:14:52 +0800 Subject: [PATCH 3/6] Issue 1818: Fix digest algorithm config --- .../pages/manage-repository/manage-repository.component.html | 2 +- .../pages/manage-repository/manage-repository.component.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html index 6ccbd0d..23d76c4 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html @@ -57,7 +57,7 @@
- + Override checksum digest algorithms diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts index 7971e44..ef096a2 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts @@ -217,7 +217,10 @@ export class ManageRepositoryComponent implements OnInit { repository.groupRepositories = this.activeGroupRepositories; } - if (!this.overrideAlgorithmConfig) { + if (!this.isMavenLayout()) { + repository.repositoryConfiguration = null; + } + else if (!this.overrideAlgorithmConfig) { repository.repositoryConfiguration['digestAlgorithmSet'] = []; } From 31aabab3f565a987e340ce302cfd8aa5d463f6dc Mon Sep 17 00:00:00 2001 From: sainalshah Date: Fri, 1 Jan 2021 15:56:56 +0800 Subject: [PATCH 4/6] Issue 1818: Code refactoring --- .../manage-settings.component.html | 29 ++++++++++--------- .../manage-repository.component.html | 22 +++++++------- .../manage-repository.component.ts | 8 ++--- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html index 77106bf..b904708 100644 --- a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html +++ b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html @@ -205,21 +205,22 @@ - - Repository configuration - - -
-
- - - - {{ algorithm }} - - - + + Repository configuration + + +
+
+ + + + {{ algorithm }} + + + +
-
diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html index 23d76c4..87db357 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.html @@ -57,16 +57,18 @@
- - Override checksum digest algorithms - - - - - {{ algorithm }} - - - + + Override checksum digest algorithms + + + + + {{ algorithm }} + + +
diff --git a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts index ef096a2..5249647 100644 --- a/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts +++ b/src/app/modules/storage-management/pages/manage-repository/manage-repository.component.ts @@ -59,7 +59,7 @@ export class ManageRepositoryComponent implements OnInit { generateCommonFormFields(type: RepositoryTypeEnum, repo: Repository) { let repositoryConfiguration; if (repo.layout === RepositoryLayoutEnum.MAVEN2) { - repositoryConfiguration = new FormGroup({...this.generateMavenRepositoryFormFields(repo.repositoryConfiguration)}); + repositoryConfiguration = new FormGroup({ ...this.generateMavenRepositoryFormFields(repo.repositoryConfiguration) }); } else { repositoryConfiguration = new FormControl(null); } @@ -100,7 +100,7 @@ export class ManageRepositoryComponent implements OnInit { generateMavenRepositoryFormFields(repositoryConfiguration: CustomRepositoryConfiguration) { if (repositoryConfiguration['digestAlgorithmSet'] - && repositoryConfiguration['digestAlgorithmSet'].length > 0) { + && repositoryConfiguration['digestAlgorithmSet'].length > 0) { this.overrideAlgorithmConfig = true; } return { @@ -110,7 +110,7 @@ export class ManageRepositoryComponent implements OnInit { cronExpression: new FormControl(repositoryConfiguration['cronExpression']), metadataExpirationStrategy: new FormControl(repositoryConfiguration['metadataExpirationStrategy']), digestAlgorithmSet: new FormControl(repositoryConfiguration['digestAlgorithmSet'], - this.overrideAlgorithmConfig ? Validators.required : null) + this.overrideAlgorithmConfig ? Validators.required : null) }; } @@ -346,7 +346,7 @@ export class ManageRepositoryComponent implements OnInit { } isMavenLayout() { - return this.form.get('layout').value === RepositoryLayoutEnum.MAVEN2; + return this.form.get('layout').value === RepositoryLayoutEnum.MAVEN2; } } From f8a4f092771ead2e6f2865ef2b3a49b62b592f4c Mon Sep 17 00:00:00 2001 From: sainalshah Date: Sat, 2 Jan 2021 13:32:31 +0800 Subject: [PATCH 5/6] Issue 1818: Disable waiting for angular for e2e test --- e2e/src/app.e2e-spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts index 85dd5a6..9dd4972 100644 --- a/e2e/src/app.e2e-spec.ts +++ b/e2e/src/app.e2e-spec.ts @@ -9,6 +9,7 @@ describe('Strongbox', () => { }); it('should display boot splash screen', () => { + browser.waitForAngularEnabled(false); page.navigateTo('/'); browser.sleep(2000); expect(page.getBootsplashScreen().getText()).toBe('Strongbox'); From a26329af06ab7040a34e1bf65a32f75382dce7b5 Mon Sep 17 00:00:00 2001 From: sainalshah Date: Sat, 9 Jan 2021 09:36:28 +0800 Subject: [PATCH 6/6] Issue 1818: remove changes for global repository config --- .../manage-settings.component.html | 19 ------------------- .../manage-settings.component.ts | 6 +----- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html index b904708..8052827 100644 --- a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html +++ b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.html @@ -203,25 +203,6 @@
- - - - Repository configuration - - -
-
- - - - {{ algorithm }} - - - -
-
-
diff --git a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts index 256fbbf..ba2a62a 100644 --- a/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts +++ b/src/app/modules/server-settings/pages/manage-settings/manage-settings.component.ts @@ -8,7 +8,6 @@ import {ToastrService} from 'ngx-toastr'; import {Breadcrumb} from '../../../../shared/layout/components/breadcrumb/breadcrumb.model'; import {ServerSettingsService} from '../../services/server-settings.service'; import {ApiResponse, handleFormError} from '../../../core/core.model'; -import {FormDataService} from '../../../../shared/form/services/form-data.service'; @Component({ selector: 'app-manage-settings', @@ -20,7 +19,6 @@ export class ManageSettingsComponent implements OnInit, OnDestroy { loading$: BehaviorSubject = new BehaviorSubject(false); settingsForm: FormGroup; - availableDigestAlgorithmSet = this.formDataService.getAvailableDigestAlgorithmSet(); breadcrumbs: Breadcrumb[] = [ {label: 'Global settings', url: ['/admin/server-settings']} @@ -32,8 +30,7 @@ export class ManageSettingsComponent implements OnInit, OnDestroy { private cdr: ChangeDetectorRef, private service: ServerSettingsService, private store: Store, - private notify: ToastrService, - private formDataService: FormDataService) { + private notify: ToastrService) { } ngOnInit() { @@ -58,7 +55,6 @@ export class ManageSettingsComponent implements OnInit, OnDestroy { return null; } ]), - digestAlgorithmSet: new FormControl(), corsConfigurationForm: new FormGroup({ allowedOrigins: new FormControl(), corsAllowAll: new FormControl(),