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'); 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..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 @@ -56,6 +56,21 @@ +
+ + 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..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 @@ -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 = this.formDataService.getAvailableDigestAlgorithmSet(); + 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,19 @@ 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.isMavenLayout()) { + repository.repositoryConfiguration = null; + } + else if (!this.overrideAlgorithmConfig) { + repository.repositoryConfiguration['digestAlgorithmSet'] = []; + } + this.service .saveRepository(this.storageId$.getValue(), repository) .pipe(catchError(err => handleFormError(err, this.form, this.loading$))) @@ -289,6 +320,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 +345,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(); 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() {