diff --git a/smp-angular/src/app/app.component.ts b/smp-angular/src/app/app.component.ts index 9a0c6b9de14ed0fcbe2cd921ba1f98391262f3bf..ab418788042f568627c52e47f627906e162e2756 100644 --- a/smp-angular/src/app/app.component.ts +++ b/smp-angular/src/app/app.component.ts @@ -5,7 +5,6 @@ import {Authority} from "./security/authority.model"; import {AlertMessageService} from "./common/alert-message/alert-message.service"; import {MatDialog} from "@angular/material/dialog"; import {GlobalLookups} from "./common/global-lookups"; -import {UserController} from "./system-settings/user/user-controller"; import {HttpClient} from "@angular/common/http"; import {SidenavComponent} from "./window/sidenav/sidenav.component"; import {ToolbarComponent} from "./window/toolbar/toolbar.component"; @@ -15,6 +14,7 @@ import 'codemirror/mode/javascript/javascript'; import 'codemirror/mode/markdown/markdown'; import 'codemirror/mode/xml/xml'; import 'codemirror/mode/properties/properties'; +import {UserController} from "./common/services/user-controller"; @Component({ diff --git a/smp-angular/src/app/app.module.ts b/smp-angular/src/app/app.module.ts index 698e5b497649775b8c62691fd307451eba791b1a..924bcd2959bc76f81bf2e15f73bbb66ca6262b84 100644 --- a/smp-angular/src/app/app.module.ts +++ b/smp-angular/src/app/app.module.ts @@ -20,7 +20,6 @@ import {CancelDialogComponent} from './common/dialogs/cancel-dialog/cancel-dialo import {CapitalizeFirstPipe} from './common/capitalize-first.pipe'; import {CertificateDialogComponent} from "./common/dialogs/certificate-dialog/certificate-dialog.component"; import {CertificatePanelComponent} from "./common/panels/certificate-panel/certificate-panel.component"; -import {CertificateService} from './system-settings/user/certificate.service'; import {ClearInvalidDirective} from './custom-date/clear-invalid.directive'; import {ColumnPickerComponent} from './common/column-picker/column-picker.component'; import {ConfirmationDialogComponent} from './common/dialogs/confirmation-dialog/confirmation-dialog.component'; @@ -30,8 +29,6 @@ import {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule} fro import {DatePipe} from './custom-date/date.pipe'; import {DefaultPasswordDialogComponent} from './security/default-password-dialog/default-password-dialog.component'; import {DialogComponent} from './common/dialogs/dialog/dialog.component'; -import {DomainComponent} from './system-settings/domain/domain.component'; -import {DomainDetailsDialogComponent} from './system-settings/domain/domain-details-dialog/domain-details-dialog.component'; import {DomainPanelComponent} from "./system-settings/admin-domain/domain-panel/domain-panel.component"; import {DomainResourceTypePanelComponent} from "./system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component"; import {DomainSelectorComponent} from './common/domain-selector/domain-selector.component'; @@ -51,9 +48,7 @@ import {HttpClient, HttpClientModule, HttpClientXsrfModule} from '@angular/commo import {HttpEventService} from './http/http-event.service'; import {InformationDialogComponent} from "./common/dialogs/information-dialog/information-dialog.component"; import {IsAuthorized} from './security/is-authorized.directive'; -import {KeystoreEditDialogComponent} from "./system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component"; import {KeystoreImportDialogComponent} from "./system-settings/admin-keystore/keystore-import-dialog/keystore-import-dialog.component"; -import {KeystoreService} from "./system-settings/domain/keystore.service"; import {LoginComponent} from './login/login.component'; import {MatButtonModule} from "@angular/material/button"; import {MatCardModule} from "@angular/material/card"; @@ -82,17 +77,13 @@ import {NgModule} from '@angular/core'; import {NgxDatatableModule} from '@swimlane/ngx-datatable'; import {ObjectPropertiesDialogComponent} from "./common/dialogs/object-properties-dialog/object-properties-dialog.component"; import {PasswordChangeDialogComponent} from "./common/dialogs/password-change-dialog/password-change-dialog.component"; -import {PropertyComponent} from "./system-settings/property/property.component"; -import {PropertyDetailsDialogComponent} from "./system-settings/property/property-details-dialog/property-details-dialog.component"; import {ResourceDetailsDialogComponent} from "./system-settings/admin-extension/resource-details-dialog/resource-details-dialog.component"; import {RowLimiterComponent} from './common/row-limiter/row-limiter.component'; import {SaveDialogComponent} from './common/dialogs/save-dialog/save-dialog.component'; import {SearchTableComponent} from './common/search-table/search-table.component'; import {SecurityEventService} from './security/security-event.service'; import {SecurityService} from './security/security.service'; -import {ServiceMetadataWizardDialogComponent} from './service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component'; import {SidenavComponent} from './window/sidenav/sidenav.component'; -import {SmlIntegrationService} from "./system-settings/domain/sml-integration.service"; import {SmpInfoService} from './app-info/smp-info.service'; import {SpacerComponent} from "./common/components/spacer/spacer.component"; import {SpinnerComponent} from './common/components/spinner/spinner.component'; @@ -101,9 +92,7 @@ import {ToolbarComponent} from "./window/toolbar/toolbar.component"; import {UserAccessTokensComponent} from "./user-settings/user-access-tokens/user-access-tokens.component"; import {UserCertificatePanelComponent} from "./user-settings/user-certificates/user-certificate-panel/user-certificate-panel.component"; import {UserCertificatesComponent} from "./user-settings/user-certificates/user-certificates.component"; -import {UserDetailsService} from './system-settings/user/user-details.service'; import {UserProfileComponent} from "./user-settings/user-profile/user-profile.component"; -import {UserService} from './system-settings/user/user.service'; import {routing} from './app.routes'; import {MAT_MOMENT_DATE_FORMATS, MatMomentDateModule, MomentDateAdapter} from "@angular/material-moment-adapter"; import {NGX_MAT_DATE_FORMATS,NgxMatDateAdapter,NgxMatDatetimePickerModule} from "@angular-material-components/datetime-picker"; @@ -142,6 +131,14 @@ import {SmpTitledLabelComponent} from "./common/components/smp-titled-label/smp- import {ServiceGroupSearchComponent} from "./service-group-search/service-group-search.component"; import {EditResourceController} from "./edit/edit-resources/edit-resource.controller"; import { ClipboardModule } from '@angular/cdk/clipboard'; +import {CertificateService} from "./common/services/certificate.service"; +import {UserDetailsService} from "./common/services/user-details.service"; +import {UserService} from "./common/services/user.service"; +import {SmlIntegrationService} from "./common/services/sml-integration.service"; +import {PropertyComponent} from "./system-settings/admin-properties/property.component"; +import { + PropertyDetailsDialogComponent +} from "./system-settings/admin-properties/property-details-dialog/property-details-dialog.component"; @NgModule({ declarations: [ @@ -169,8 +166,6 @@ import { ClipboardModule } from '@angular/cdk/clipboard'; DefaultPasswordDialogComponent, DialogComponent, DocumentWizardDialogComponent, - DomainComponent, - DomainDetailsDialogComponent, DomainGroupComponent, DomainPanelComponent, DomainResourceTypePanelComponent, @@ -187,7 +182,6 @@ import { ClipboardModule } from '@angular/cdk/clipboard'; GroupResourcePanelComponent, InformationDialogComponent, IsAuthorized, - KeystoreEditDialogComponent, KeystoreImportDialogComponent, LoginComponent, ManageMembersDialogComponent, @@ -207,7 +201,6 @@ import { ClipboardModule } from '@angular/cdk/clipboard'; SaveDialogComponent, SearchTableComponent, ServiceGroupSearchComponent, - ServiceMetadataWizardDialogComponent, SidenavComponent, SmpFieldErrorComponent, SmpLabelComponent, @@ -287,7 +280,6 @@ import { ClipboardModule } from '@angular/cdk/clipboard'; ExtensionService, GlobalLookups, HttpEventService, - KeystoreService, NavigationService, SecurityEventService, SecurityService, diff --git a/smp-angular/src/app/app.routes.ts b/smp-angular/src/app/app.routes.ts index 698dd2eabee4e85b1c368c5139517970b597b990..3988ad6cb41f71fa70d724be66dd3babea1cf6b1 100644 --- a/smp-angular/src/app/app.routes.ts +++ b/smp-angular/src/app/app.routes.ts @@ -2,7 +2,7 @@ import {RouterModule, Routes} from '@angular/router'; import {LoginComponent} from './login/login.component'; import {ServiceGroupSearchComponent} from './service-group-search/service-group-search.component'; import {AlertComponent} from "./alert/alert.component"; -import {PropertyComponent} from "./system-settings/property/property.component"; +import {PropertyComponent} from "./system-settings/admin-properties/property.component"; import {UserProfileComponent} from "./user-settings/user-profile/user-profile.component"; import {authenticationGuard} from "./guards/authentication.guard"; import {UserAccessTokensComponent} from "./user-settings/user-access-tokens/user-access-tokens.component"; diff --git a/smp-angular/src/app/common/dialogs/certificate-dialog/certificate-dialog.component.ts b/smp-angular/src/app/common/dialogs/certificate-dialog/certificate-dialog.component.ts index 2ac6bd6dcecf3ac955d6f7e8a685b6ddb7478627..200f39c8be6bd4462f8adbf76eddd0d26be5aa4e 100644 --- a/smp-angular/src/app/common/dialogs/certificate-dialog/certificate-dialog.component.ts +++ b/smp-angular/src/app/common/dialogs/certificate-dialog/certificate-dialog.component.ts @@ -1,8 +1,8 @@ import {Component, Inject} from '@angular/core'; import {MAT_DIALOG_DATA} from '@angular/material/dialog'; import {UntypedFormBuilder} from "@angular/forms"; -import {CertificateRo} from "../../../system-settings/user/certificate-ro.model"; import {SmpConstants} from "../../../smp.constants"; +import {CertificateRo} from "../../model/certificate-ro.model"; @Component({ selector: 'keystore-certificate-dialog', diff --git a/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts b/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts index 9b7cb1b35a012b4f668f48daab7a00c7b93b9157..ba246116234d088452f277ce64fc006308ea5ec1 100644 --- a/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts +++ b/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts @@ -3,11 +3,11 @@ import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; import {FormBuilder, FormControl, FormGroup} from "@angular/forms"; import {SmpConstants} from "../../../smp.constants"; import {AccessTokenRo} from "../../model/access-token-ro.model"; -import {UserService} from "../../../system-settings/user/user.service"; import {CredentialRo} from "../../../security/credential.model"; -import {CertificateRo} from "../../../system-settings/user/certificate-ro.model"; -import {CertificateService} from "../../../system-settings/user/certificate.service"; import {HttpErrorHandlerService} from "../../error/http-error-handler.service"; +import {CertificateService} from "../../services/certificate.service"; +import {CertificateRo} from "../../model/certificate-ro.model"; +import {UserService} from "../../services/user.service"; @Component({ templateUrl: './credential-dialog.component.html', diff --git a/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.ts b/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.ts index 1881fc5f1bb8c8937d46b23e2dff52d57924a763..4ab31db27cfa06b898a158843700b070f406e5ab 100644 --- a/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.ts +++ b/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.ts @@ -3,11 +3,10 @@ import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material/dialog import {AbstractControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators} from "@angular/forms"; import {User} from "../../../security/user.model"; import {GlobalLookups} from "../../global-lookups"; -import {UserDetailsService} from "../../../system-settings/user/user-details.service"; -import {AlertMessageService} from "../../alert-message/alert-message.service"; import {SecurityService} from "../../../security/security.service"; import {InformationDialogComponent} from "../information-dialog/information-dialog.component"; -import {UserRo} from "../../../system-settings/user/user-ro.model"; +import {UserDetailsService} from "../../services/user-details.service"; +import {UserRo} from "../../model/user-ro.model"; @Component({ selector: 'smp-password-change-dialog', @@ -32,7 +31,6 @@ export class PasswordChangeDialogComponent { @Inject(MAT_DIALOG_DATA) public data: any, private lookups: GlobalLookups, private userDetailsService: UserDetailsService, - private alertService: AlertMessageService, private securityService: SecurityService, public dialog: MatDialog, private fb: UntypedFormBuilder diff --git a/smp-angular/src/app/system-settings/user/certificate-ro.model.ts b/smp-angular/src/app/common/model/certificate-ro.model.ts similarity index 87% rename from smp-angular/src/app/system-settings/user/certificate-ro.model.ts rename to smp-angular/src/app/common/model/certificate-ro.model.ts index f5002ed38ed0f2ecae96560758773d02af2c0c07..4830ffd4f8a6f78ac83ac192848e70bd4d2722c8 100644 --- a/smp-angular/src/app/system-settings/user/certificate-ro.model.ts +++ b/smp-angular/src/app/common/model/certificate-ro.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from "../../common/enums/entity-status.enum"; +import {EntityStatus} from "../enums/entity-status.enum"; export interface CertificateRo { certificateId: string; diff --git a/smp-angular/src/app/system-settings/domain/keystore-result.model.ts b/smp-angular/src/app/common/model/keystore-result.model.ts similarity index 63% rename from smp-angular/src/app/system-settings/domain/keystore-result.model.ts rename to smp-angular/src/app/common/model/keystore-result.model.ts index d4203352616579eae92ec7da39e462a54cba96ec..352592c4fd44c3bb9ddc8741367d8722a29549e5 100644 --- a/smp-angular/src/app/system-settings/domain/keystore-result.model.ts +++ b/smp-angular/src/app/common/model/keystore-result.model.ts @@ -1,4 +1,4 @@ -import {CertificateRo} from "../user/certificate-ro.model"; +import {CertificateRo} from "./certificate-ro.model"; export interface KeystoreResult { diff --git a/smp-angular/src/app/system-settings/domain/sml-result.model.ts b/smp-angular/src/app/common/model/sml-result.model.ts similarity index 100% rename from smp-angular/src/app/system-settings/domain/sml-result.model.ts rename to smp-angular/src/app/common/model/sml-result.model.ts diff --git a/smp-angular/src/app/system-settings/user/user-ro.model.ts b/smp-angular/src/app/common/model/user-ro.model.ts similarity index 74% rename from smp-angular/src/app/system-settings/user/user-ro.model.ts rename to smp-angular/src/app/common/model/user-ro.model.ts index 71b1bc722010a26f1b3fa78c29e43d0fe1c34345..fb9ec28f1ff7f1477138c66625782c9dee3d5170 100644 --- a/smp-angular/src/app/system-settings/user/user-ro.model.ts +++ b/smp-angular/src/app/common/model/user-ro.model.ts @@ -1,6 +1,6 @@ -import {SearchTableEntity} from '../../common/search-table/search-table-entity.model'; -import {CertificateRo} from './certificate-ro.model'; -import {ApplicationRoleEnum} from "../../common/enums/application-role.enum"; +import {SearchTableEntity} from "../search-table/search-table-entity.model"; +import {ApplicationRoleEnum} from "../enums/application-role.enum"; +import {CertificateRo} from "./certificate-ro.model"; export interface UserRo extends SearchTableEntity { userId?: string diff --git a/smp-angular/src/app/common/panels/certificate-panel/certificate-panel.component.ts b/smp-angular/src/app/common/panels/certificate-panel/certificate-panel.component.ts index be5d716f5d30861a281a9bcc376e208481315a8f..eee9be31f79c54e538f5960365fca09b987d38ed 100644 --- a/smp-angular/src/app/common/panels/certificate-panel/certificate-panel.component.ts +++ b/smp-angular/src/app/common/panels/certificate-panel/certificate-panel.component.ts @@ -1,5 +1,5 @@ import {Component, Input} from '@angular/core'; -import {CertificateRo} from "../../../system-settings/user/certificate-ro.model"; +import {CertificateRo} from "../../model/certificate-ro.model"; @Component({ selector: 'certificate-panel', diff --git a/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.ts b/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.ts index 1d522754d4c12c01603a9550333bfc99e1276e4b..97d61c98926ccd041c2dbd1d72d54ccc37ba5fd4 100644 --- a/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.ts +++ b/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.ts @@ -1,19 +1,16 @@ import {Component, ElementRef, EventEmitter, Input, Output, ViewChild,} from '@angular/core'; import {SmpConstants} from "../../../smp.constants"; import {FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms"; -import {CredentialRo} from "../../../security/credential.model"; -import {UserController} from "../../../system-settings/user/user-controller"; import {SecurityService} from "../../../security/security.service"; import {ThemeService} from "../../theme-service/theme.service"; -import {AlertMessageService} from "../../alert-message/alert-message.service"; -import {UserService} from "../../../system-settings/user/user.service"; import {MatDialog} from "@angular/material/dialog"; import {HttpClient} from "@angular/common/http"; import {GlobalLookups} from "../../global-lookups"; import {DateAdapter} from "@angular/material/core"; import {NgxMatDateAdapter} from "@angular-material-components/datetime-picker"; -import {UserRo} from "../../../system-settings/user/user-ro.model"; import {ApplicationRoleEnum} from "../../enums/application-role.enum"; +import {UserRo} from "../../model/user-ro.model"; +import {UserController} from "../../services/user-controller"; @Component({ @@ -53,9 +50,7 @@ export class UserProfilePanelComponent { constructor( private securityService: SecurityService, private themeService: ThemeService, - private alertService: AlertMessageService, private formBuilder: FormBuilder, - private userService: UserService, private dialog: MatDialog, private http: HttpClient, private lookups: GlobalLookups, @@ -65,7 +60,7 @@ export class UserProfilePanelComponent { this.userController = new UserController(this.http, this.lookups, this.dialog); // set empty form ! do not bind it to current object ! - this.userForm = formBuilder.group({ + this.userForm = this.formBuilder.group({ // common values 'username': new FormControl({value: '', disabled: true}), 'role': new FormControl({value: '', disabled: true}), diff --git a/smp-angular/src/app/system-settings/user/certificate.service.ts b/smp-angular/src/app/common/services/certificate.service.ts similarity index 95% rename from smp-angular/src/app/system-settings/user/certificate.service.ts rename to smp-angular/src/app/common/services/certificate.service.ts index ac74ab261d65e795a909b84583346ea9079dbec6..df5a9fed315c7f76268acd0511688f993b936ff6 100644 --- a/smp-angular/src/app/system-settings/user/certificate.service.ts +++ b/smp-angular/src/app/common/services/certificate.service.ts @@ -1,10 +1,10 @@ import {Injectable} from '@angular/core'; import {Observable} from 'rxjs'; -import {CertificateRo} from './certificate-ro.model'; import {HttpClient, HttpHeaders} from '@angular/common/http'; import {SmpConstants} from "../../smp.constants"; import {SecurityService} from "../../security/security.service"; import {User} from "../../security/user.model"; +import {CertificateRo} from "../model/certificate-ro.model"; @Injectable() export class CertificateService { diff --git a/smp-angular/src/app/system-settings/domain/sml-integration.service.ts b/smp-angular/src/app/common/services/sml-integration.service.ts similarity index 95% rename from smp-angular/src/app/system-settings/domain/sml-integration.service.ts rename to smp-angular/src/app/common/services/sml-integration.service.ts index 2238c7bc0f0583cec172577199b6a6bbdee6f6f0..2f3e36067206c234d3a92ba498bfb291e26d12ad 100644 --- a/smp-angular/src/app/system-settings/domain/sml-integration.service.ts +++ b/smp-angular/src/app/common/services/sml-integration.service.ts @@ -5,7 +5,7 @@ import {HttpClient} from '@angular/common/http'; import {SmpConstants} from "../../smp.constants"; import {SecurityService} from "../../security/security.service"; import {User} from "../../security/user.model"; -import {SMLResult} from "./sml-result.model"; +import {SMLResult} from "../model/sml-result.model"; @Injectable() export class SmlIntegrationService { diff --git a/smp-angular/src/app/system-settings/user/user-controller.ts b/smp-angular/src/app/common/services/user-controller.ts similarity index 78% rename from smp-angular/src/app/system-settings/user/user-controller.ts rename to smp-angular/src/app/common/services/user-controller.ts index 5871567f18fa4a7ef0401230fa6308b4d921e254..6876c1ddd0408d54a21e43ea3bbbeb6b03c7f771 100644 --- a/smp-angular/src/app/system-settings/user/user-controller.ts +++ b/smp-angular/src/app/common/services/user-controller.ts @@ -1,15 +1,16 @@ -import {SearchTableController} from '../../common/search-table/search-table-controller'; +import {SearchTableController} from '../search-table/search-table-controller'; import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog'; -import {UserRo} from './user-ro.model'; -import {EntityStatus} from '../../common/enums/entity-status.enum'; -import {GlobalLookups} from "../../common/global-lookups"; -import {SearchTableEntity} from "../../common/search-table/search-table-entity.model"; -import {SearchTableValidationResult} from "../../common/search-table/search-table-validation-result.model"; +import {UserRo} from '../model/user-ro.model'; +import {EntityStatus} from '../enums/entity-status.enum'; +import {GlobalLookups} from "../global-lookups"; +import {SearchTableEntity} from "../search-table/search-table-entity.model"; +import {SearchTableValidationResult} from "../search-table/search-table-validation-result.model"; import {SmpConstants} from "../../smp.constants"; import {HttpClient} from "@angular/common/http"; -import {CertificateRo} from "./certificate-ro.model"; -import {PasswordChangeDialogComponent} from "../../common/dialogs/password-change-dialog/password-change-dialog.component"; -import {ApplicationRoleEnum} from "../../common/enums/application-role.enum"; + +import {PasswordChangeDialogComponent} from "../dialogs/password-change-dialog/password-change-dialog.component"; +import {ApplicationRoleEnum} from "../enums/application-role.enum"; +import {CertificateRo} from "../model/certificate-ro.model"; export class UserController implements SearchTableController { @@ -24,11 +25,6 @@ export class UserController implements SearchTableController { } public showDetails(row: any) { - /*let dialogRef: MatDialogRef<UserDetailsDialogComponent> = this.dialog.open(UserDetailsDialogComponent); - dialogRef.afterClosed().subscribe(result => { - //Todo: - }); - */ } public edit(row: any) { @@ -38,7 +34,6 @@ export class UserController implements SearchTableController { } public newDialog(config?: MatDialogConfig): MatDialogRef<any> { - //return this.dialog.open(UserDetailsDialogComponent, this.convertWithMode(config)); return null; } diff --git a/smp-angular/src/app/system-settings/user/user-details.service.ts b/smp-angular/src/app/common/services/user-details.service.ts similarity index 87% rename from smp-angular/src/app/system-settings/user/user-details.service.ts rename to smp-angular/src/app/common/services/user-details.service.ts index 509dc1b027268da2fa24c0a3efbc1462312167ea..b73f9a288beac4b1f73e9733e1cc9fa88efe6744 100644 --- a/smp-angular/src/app/system-settings/user/user-details.service.ts +++ b/smp-angular/src/app/common/services/user-details.service.ts @@ -2,8 +2,8 @@ import {Injectable} from "@angular/core"; import {HttpClient} from "@angular/common/http"; import {SmpConstants} from "../../smp.constants"; import {Observable} from "rxjs"; -import {AccessTokenRo} from "../../common/model/access-token-ro.model"; -import {UserRo} from "./user-ro.model"; +import {AccessTokenRo} from "../model/access-token-ro.model"; +import {UserRo} from "../model/user-ro.model"; @Injectable() export class UserDetailsService { @@ -15,8 +15,9 @@ export class UserDetailsService { /** * Submits password to validate password - * @param userId - * @param password + * @param userId - user id to validate password + * @param newPassword - new password to set for the user + * @param currentPassword - current password to validate */ changePassword(userId: string, newPassword: string, currentPassword: string): Observable<boolean> { return this.http.put<boolean>(SmpConstants.REST_PUBLIC_USER_CHANGE_PASSWORD diff --git a/smp-angular/src/app/system-settings/user/user.service.ts b/smp-angular/src/app/common/services/user.service.ts similarity index 97% rename from smp-angular/src/app/system-settings/user/user.service.ts rename to smp-angular/src/app/common/services/user.service.ts index 92deab57948fb3bff5e8e1db49370f43ad836f48..f5ac67dd54190a7752ef3e45e97f2039a0a6443d 100644 --- a/smp-angular/src/app/system-settings/user/user.service.ts +++ b/smp-angular/src/app/common/services/user.service.ts @@ -2,12 +2,12 @@ import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {SmpConstants} from "../../smp.constants"; import {User} from "../../security/user.model"; -import {AlertMessageService} from "../../common/alert-message/alert-message.service"; +import {AlertMessageService} from "../alert-message/alert-message.service"; import {SecurityService} from "../../security/security.service"; import {Observable, Subject} from "rxjs"; import {CredentialRo} from "../../security/credential.model"; -import {AccessTokenRo} from "../../common/model/access-token-ro.model"; -import {HttpErrorHandlerService} from "../../common/error/http-error-handler.service"; +import {AccessTokenRo} from "../model/access-token-ro.model"; +import {HttpErrorHandlerService} from "../error/http-error-handler.service"; /** * Class handle current user settings such-as profile, credentials, DomiSMP settings... , diff --git a/smp-angular/src/app/edit/edit-resources/subresource-document-panel/subresource-document-panel.component.ts b/smp-angular/src/app/edit/edit-resources/subresource-document-panel/subresource-document-panel.component.ts index 69c35fb56748d9c1eb32d3b5b808e56fdd9cf7aa..8220a271b5bb1f067f9bd3850fdbceb19761b517 100644 --- a/smp-angular/src/app/edit/edit-resources/subresource-document-panel/subresource-document-panel.component.ts +++ b/smp-angular/src/app/edit/edit-resources/subresource-document-panel/subresource-document-panel.component.ts @@ -17,7 +17,7 @@ import { } from "../subresource-document-wizard-dialog/subresource-document-wizard.component"; import { ServiceMetadataWizardRo -} from "../../../service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-edit-ro.model"; +} from "../subresource-document-wizard-dialog/service-metadata-wizard-edit-ro.model"; import {ConfirmationDialogComponent} from "../../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; @Component({ @@ -329,9 +329,3 @@ export class SubresourceDocumentPanelComponent implements AfterViewInit, BeforeL return this._subresource?.subresourceTypeIdentifier === 'edelivery-oasis-smp-1.0-servicemetadata'; } } - - - - - - diff --git a/smp-angular/src/app/edit/edit-resources/subresource-document-wizard-dialog/subresource-document-wizard.component.ts b/smp-angular/src/app/edit/edit-resources/subresource-document-wizard-dialog/subresource-document-wizard.component.ts index 8e25ded14f47873e4f4bd23b2d48097fe4743cea..7e3c86ed68dae57627d9f5e7541ecb6ca70860f9 100644 --- a/smp-angular/src/app/edit/edit-resources/subresource-document-wizard-dialog/subresource-document-wizard.component.ts +++ b/smp-angular/src/app/edit/edit-resources/subresource-document-wizard-dialog/subresource-document-wizard.component.ts @@ -4,9 +4,9 @@ import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} fr import {HttpClient} from "@angular/common/http"; import {ServiceMetadataWizardRo} from "./service-metadata-wizard-edit-ro.model"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; -import {CertificateService} from "../../../system-settings/user/certificate.service"; import {GlobalLookups} from "../../../common/global-lookups"; -import {CertificateRo} from "../../../system-settings/user/certificate-ro.model"; +import {CertificateService} from "../../../common/services/certificate.service"; +import {CertificateRo} from "../../../common/model/certificate-ro.model"; @Component({ diff --git a/smp-angular/src/app/security/credential.model.ts b/smp-angular/src/app/security/credential.model.ts index 9e0d8cade73bd28e9b7a30e82111d4061e750121..1219d2262e06251635569156c14b2f919f0892ee 100644 --- a/smp-angular/src/app/security/credential.model.ts +++ b/smp-angular/src/app/security/credential.model.ts @@ -1,5 +1,5 @@ import {EntityStatus} from "../common/enums/entity-status.enum"; -import {CertificateRo} from "../system-settings/user/certificate-ro.model"; +import {CertificateRo} from "../common/model/certificate-ro.model"; export interface CredentialRo { diff --git a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.css b/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.css deleted file mode 100644 index 1f31b33470b3382a562a909474c93dccd7b30620..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.css +++ /dev/null @@ -1,23 +0,0 @@ -.flex-dialog-content{ - display: flex; justify-content: space-around; - flex-flow: row; - align-items: stretch;height:510px;min-width:950px -} - -#extensionTextArea { - border: none; - width: 610px; - height:340px; - -webkit-box-sizing: border-box; /* <=iOS4, <= Android 2.3 */ - -moz-box-sizing: border-box; /* FF1+ */ - box-sizing: border-box; /* Chrome, IE8, Opera, Safari 5.1*/ -} - -#certificate-file-upload { - display: none; -} - -.custom-file-upload { - display: inline-block; - cursor: pointer; -} diff --git a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.html b/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.html deleted file mode 100644 index 9a34471ff57ef08490714871c90902e64192d858..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.html +++ /dev/null @@ -1,126 +0,0 @@ -<h2 mat-dialog-title>Service Metadata Wizard</h2> - -<mat-dialog-content class="flex-dialog-content"> - <form [formGroup]="dialogForm"> - <mat-card> - <mat-card-content> - <div class="panel"> - - <!-- Document --> - <mat-form-field style="width:35%"> - <input matInput placeholder="Document identifier scheme" name="documentIdentifierScheme" - id="documentIdentifierScheme_id" - [formControl]="dialogForm.controls['documentIdentifierScheme']" - maxlength="255"> - </mat-form-field> - - <mat-form-field style="width:60%"> - <input matInput placeholder="Document identifier" name="documentIdentifier" id="documentIdentifier_id" - maxlength="255" - [formControl]="dialogForm.controls['documentIdentifier']" - required> - <div - *ngIf="dialogForm.controls['documentIdentifier'].touched && dialogForm.controls['documentIdentifier'].hasError('required')" - style="color:red; font-size: 70%">Document identifier is required! - </div> - </mat-form-field> - <!-- Process --> - <mat-form-field style="width:35%"> - <input matInput placeholder="Process scheme" name="processSchema" id="processSchema_id" - maxlength="255" - [formControl]="dialogForm.controls['processScheme']" - > - </mat-form-field> - - <mat-form-field style="width:60%"> - <input matInput placeholder="Process identifier" name="processidentifier" id="processidentifier_id" - maxlength="255" - [formControl]="dialogForm.controls['processIdentifier']" - required> - <div - *ngIf="dialogForm.controls['processIdentifier'].touched && dialogForm.controls['processIdentifier'].hasError('required')" - style="color:red; font-size: 70%">Process identifier is required! - </div> - </mat-form-field> -<!-- transport --> - <mat-form-field style="width:35%"> - <input matInput placeholder="Transport profile" name="transportProfile" id="transportProfiler_id" - maxlength="255" - [formControl]="dialogForm.controls['transportProfile']" - required> - <div - *ngIf="dialogForm.controls['transportProfile'].touched && dialogForm.controls['transportProfile'].hasError('required')" - style="color:red; font-size: 70%">Transport profile (as example: bdxr-transport-ebms3-as4-v1p0) is required! - </div> - </mat-form-field> - - <mat-form-field style="width:60%"> - <input matInput placeholder="Endpoint Url" name="endpointUrl" id="endpointUrl_id" - maxlength="255" - [formControl]="dialogForm.controls['endpointUrl']" - type="url" - required> - <div - *ngIf="dialogForm.controls['endpointUrl'].touched && dialogForm.controls['endpointUrl'].hasError('required')" - style="color:red; font-size: 70%">Access point URL is required! - </div> - </mat-form-field> - - <div style="display: block;" style="border:1px; solid: #999999;margin:5px 0; padding:3px;"> - <label class="custom-file-upload"> - <input #fileInput type="file" style="display: inline-block;cursor: pointer; display: none;" - id="certificate-file-upload" accept=".cer,.crt,.pem,.der" - (change)="uploadCertificate($event)"> - <button mat-flat-button color="primary" - (click)="fileInput.click()" >Upload certificate</button> - </label> - <div *ngIf="certificateValidationMessage" - [ngClass]="{ 'alert-message': certificateValidationMessage, 'alert-message-success': !certificateValidationMessage, 'alert-message-error':!!certificateValidationMessage }" - id="alertmessage_id"> - <span class="alert-message-close-button" (click)="clearAlert()">×</span> - {{certificateValidationMessage}} - </div> - <textarea matInput style="width:100%;border: #03A9F4 1px solid" cols="2" rows="10" - resizeable="false" - id="metadatacertificate_id" - placeholder="X509Certificate*" name="certificate" - [formControl]="dialogForm.controls['endpointCertificate']" - ></textarea> - </div> - <div - *ngIf="dialogForm.controls['endpointCertificate'].touched && dialogForm.controls['endpointCertificate'].hasError('required')" - style="color:red; font-size: 70%">Valid x509 Certificate is required! - </div> - - </div> - - -<!-- ServiceDescription --> - <mat-form-field style="width:100%"> - <input matInput placeholder="Service description" name="serviceDescription" id="serviceDescription_id" - [formControl]="dialogForm.controls['serviceDescription']" maxlength="255" > - </mat-form-field> - <mat-form-field style="width:100%"> - <input matInput placeholder="Technical Contact Url" name="technicalContactUrl" id="technicalContactUrl_id" - [formControl]="dialogForm.controls['technicalContactUrl']" maxlength="255" type="url" > - </mat-form-field> - - </mat-card-content> - </mat-card> - </form> - <div class="required-fields">* required fields</div> -</mat-dialog-content> - - -<mat-dialog-actions> - <button mat-raised-button color="primary" [mat-dialog-close]="true" - [disabled]="!dialogForm.valid"> - <mat-icon>check_circle</mat-icon> - <span>OK</span> - </button> - - <button mat-raised-button color="primary" mat-dialog-close> - <mat-icon>cancel</mat-icon> - <span>Cancel</span> - </button> -</mat-dialog-actions> diff --git a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.ts b/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.ts deleted file mode 100644 index 8e593ffebe8461f16febffb73a1d379409939902..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-dialog.component.ts +++ /dev/null @@ -1,186 +0,0 @@ -import {Component, Inject} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms"; -import {HttpClient} from "@angular/common/http"; -import {CertificateService} from "../../system-settings/user/certificate.service"; -import {CertificateRo} from "../../system-settings/user/certificate-ro.model"; -import {AlertMessageService} from "../../common/alert-message/alert-message.service"; -import {ServiceMetadataWizardRo} from "./service-metadata-wizard-edit-ro.model"; -import {GlobalLookups} from "../../common/global-lookups"; - -@Component({ - selector: 'service-metadata-wizard-dialog', - templateUrl: './service-metadata-wizard-dialog.component.html', - styleUrls: ['./service-metadata-wizard-dialog.component.css'] -}) -export class ServiceMetadataWizardDialogComponent { - - static readonly NEW_MODE = 'New ServiceMetadata XML'; - static readonly EDIT_MODE = 'Edit ServiceMetadata XML'; - static readonly EBCORE_IDENTIFIER_PREFIX = "urn:oasis:names:tc:ebcore:partyid-type:"; - - isNewServiceMetadata: boolean; - current: ServiceMetadataWizardRo - & { confirmation?: string }; - dialogForm: UntypedFormGroup; - certificateValidationMessage: string; - isCertificateValid: string; - selectedFile: File; - - constructor( - @Inject(MAT_DIALOG_DATA) public data: any, - private http: HttpClient, - private dialogRef: MatDialogRef<ServiceMetadataWizardDialogComponent>, - private alertService: AlertMessageService, - private dialogFormBuilder: UntypedFormBuilder, - private certificateService: CertificateService, - private lookups: GlobalLookups, - ) { - this.isNewServiceMetadata = this.data.isNewServiceMetadata; - - this.current = {...this.data} - - this.dialogForm = dialogFormBuilder.group({ - 'participantIdentifier': new UntypedFormControl({value: '', disabled: true}, null), - 'participantScheme': new UntypedFormControl({value: '', disabled: true}, null), - - 'documentIdentifier': new UntypedFormControl({value: '', disabled: !this.isNewServiceMetadata}, [Validators.required]), - 'documentIdentifierScheme': new UntypedFormControl({value: '', disabled: !this.isNewServiceMetadata}, null), - 'processScheme': new UntypedFormControl({value: ''}, null), - 'processIdentifier': new UntypedFormControl({value: ''}, [Validators.required]), - - 'transportProfile': new UntypedFormControl({value: ''}, [Validators.required]), - 'endpointUrl': new UntypedFormControl({value: ''}, [Validators.required]), - 'endpointCertificate': new UntypedFormControl({value: ''}, [Validators.required]), - - 'serviceDescription': new UntypedFormControl({value: ''}, null), - 'technicalContactUrl': new UntypedFormControl({value: ''}, null), - }); - - this.dialogForm.controls['participantIdentifier'].setValue(this.current.participantIdentifier); - this.dialogForm.controls['participantScheme'].setValue(this.current.participantScheme); - - this.dialogForm.controls['documentIdentifier'].setValue(this.current.documentIdentifier); - this.dialogForm.controls['documentIdentifierScheme'].setValue(this.current.documentIdentifierScheme); - this.dialogForm.controls['transportProfile'].setValue(this.current.transportProfile); - - this.dialogForm.controls['processScheme'].setValue(this.current.processScheme); - this.dialogForm.controls['processIdentifier'].setValue(this.current.processIdentifier); - this.dialogForm.controls['endpointUrl'].setValue(this.current.endpointUrl); - this.dialogForm.controls['endpointCertificate'].setValue(this.current.endpointCertificate); - this.dialogForm.controls['serviceDescription'].setValue(this.current.serviceDescription); - this.dialogForm.controls['technicalContactUrl'].setValue(this.current.technicalContactUrl); - - } - - - uploadCertificate(event) { - const file = event.target.files[0]; - this.certificateValidationMessage = null; - this.certificateService.validateCertificate(file).subscribe((res: CertificateRo) => { - if (res && res.certificateId) { - - this.dialogForm.patchValue({ - 'endpointCertificate': res.encodedValue - }); - } else { - this.certificateValidationMessage = 'Error occurred while reading certificate. Check if uploaded file has valid certificate type'; - } - }, - err => { - this.certificateValidationMessage = 'Error uploading certificate file [' + file.name + '] ' + err.error?.errorDescription; - } - ); - } - - clearAlert() { - this.certificateValidationMessage = null; - } - - - onFileChanged(event) { - this.selectedFile = event.target.files[0] - } - - onUpload() { - // this.http is the injected HttpClient - this.certificateService.validateCertificate(this.selectedFile) - .subscribe(event => { - console.log(event); // handle event here - }); - } - - public getCurrent(): ServiceMetadataWizardRo { - - this.current.participantIdentifier = this.dialogForm.controls['participantIdentifier'].value; - this.current.participantScheme = this.dialogForm.controls['participantScheme'].value; - this.current.documentIdentifier = this.dialogForm.controls['documentIdentifier'].value; - this.current.documentIdentifierScheme = this.dialogForm.controls['documentIdentifierScheme'].value; - this.current.transportProfile = this.dialogForm.controls['transportProfile'].value; - - this.current.endpointUrl = this.dialogForm.controls['endpointUrl'].value; - this.current.endpointCertificate = this.dialogForm.controls['endpointCertificate'].value; - this.current.serviceDescription = this.dialogForm.controls['serviceDescription'].value; - this.current.technicalContactUrl = this.dialogForm.controls['technicalContactUrl'].value; - this.current.contentXML = this.getServiceMetadataXML(); - - - return this.current; - } - - getParticipantElementXML(): string { - let schema = this.dialogForm.controls['participantScheme'].value; - let value = this.dialogForm.controls['participantIdentifier'].value; - if (!!schema && this.lookups.cachedApplicationConfig.concatEBCorePartyId && - schema.startsWith(ServiceMetadataWizardDialogComponent.EBCORE_IDENTIFIER_PREFIX)) { - value = schema + ":" + value; - schema = null; - } - - return '<ParticipantIdentifier ' + - (!schema ? '' : 'scheme="' + this.xmlSpecialChars(schema) + '"') + '>' - + this.xmlSpecialChars(value) + '</ParticipantIdentifier>'; - } - - getDocumentElementXML(): string { - return ' <DocumentIdentifier ' + - (!this.dialogForm.controls['documentIdentifierScheme'].value ? '' : 'scheme="' - + this.xmlSpecialChars(this.dialogForm.controls['documentIdentifierScheme'].value) + '"') + - '>' + this.xmlSpecialChars(this.dialogForm.controls['documentIdentifier'].value) + '</DocumentIdentifier>'; - } - - getServiceMetadataXML() { - - let exampleXML = '<ServiceMetadata xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">' + - '\n <ServiceInformation>' + - '\n ' + this.getParticipantElementXML() + - '\n ' + this.getDocumentElementXML() + - '\n <ProcessList>' + - '\n <Process>' + - '\n <ProcessIdentifier ' + - (!this.dialogForm.controls['processScheme'].value ? '' : 'scheme="' + this.xmlSpecialChars(this.dialogForm.controls['processScheme'].value) + '"') + - '>' + this.xmlSpecialChars(this.dialogForm.controls['processIdentifier'].value) + '</ProcessIdentifier>' + - '\n <ServiceEndpointList>' + - '\n <Endpoint transportProfile="' + this.xmlSpecialChars(this.dialogForm.controls['transportProfile'].value) + '">' + - '\n <EndpointURI>' + this.xmlSpecialChars(this.dialogForm.controls['endpointUrl'].value) + '</EndpointURI>' + - '\n <Certificate>' + this.xmlSpecialChars(this.dialogForm.controls['endpointCertificate'].value) + '</Certificate>' + - '\n <ServiceDescription>' + this.xmlSpecialChars(this.dialogForm.controls['serviceDescription'].value) + '</ServiceDescription>' + - '\n <TechnicalContactUrl>' + this.xmlSpecialChars(this.dialogForm.controls['technicalContactUrl'].value) + '</TechnicalContactUrl>' + - '\n </Endpoint>' + - '\n </ServiceEndpointList>' + - '\n </Process>' + - '\n </ProcessList>' + - '\n </ServiceInformation>' + - '\n</ServiceMetadata>'; - - return exampleXML; - } - - xmlSpecialChars(unsafe) { - return unsafe - .replace(/&/g, "&") - .replace(/</g, "<") - .replace(/>/g, ">") - .replace(/"/g, """); - } -} diff --git a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-edit-ro.model.ts b/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-edit-ro.model.ts deleted file mode 100644 index a60e758479f70b4796b3626ec59796d0cd1c1d69..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/service-group-edit/service-metadata-wizard-dialog/service-metadata-wizard-edit-ro.model.ts +++ /dev/null @@ -1,17 +0,0 @@ - -export interface ServiceMetadataWizardRo { - isNewServiceMetadata: boolean; - participantScheme: string; - participantIdentifier: string; - documentIdentifierScheme: string; - documentIdentifier: string; - processScheme: string; - processIdentifier: string; - transportProfile: string; - endpointUrl: string; - endpointCertificate: string; - serviceDescription: string; - technicalContactUrl: string; - contentXML?: string - errorMessage?: string -} diff --git a/smp-angular/src/app/smp.constants.ts b/smp-angular/src/app/smp.constants.ts index 7d860932c33786a2071b43d76a7cfff1aeed1443..c23e64af1511270ee3482e96b91e144ce8ad2f9f 100644 --- a/smp-angular/src/app/smp.constants.ts +++ b/smp-angular/src/app/smp.constants.ts @@ -107,8 +107,6 @@ export class SmpConstants { public static readonly REST_EDIT_RESOURCE_MEMBER_DELETE = SmpConstants.REST_EDIT_RESOURCE_MEMBER + '/' + SmpConstants.PATH_PARAM_ENC_MEMBER_ID + '/' + SmpConstants.PATH_ACTION_DELETE; - - // legacy public static readonly REST_PUBLIC_GROUP_EDIT = SmpConstants.REST_PUBLIC + SmpConstants.PATH_RESOURCE_TYPE_GROUP + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID; public static readonly REST_PUBLIC_GROUP_DOMAIN = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' + @@ -152,7 +150,6 @@ export class SmpConstants { public static readonly REST_PUBLIC_SECURITY_AUTHENTICATION = SmpConstants.REST_PUBLIC_SECURITY + 'authentication'; public static readonly REST_PUBLIC_SECURITY_USER = SmpConstants.REST_PUBLIC_SECURITY + 'user'; - public static readonly REST_PUBLIC_RESOURCE = SmpConstants.REST_PUBLIC + SmpConstants.PATH_RESOURCE_TYPE_RESOURCE; public static readonly REST_PUBLIC_RESOURCE_EDIT = SmpConstants.REST_PUBLIC_RESOURCE + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_RESOURCE_TYPE_GROUP + '/' + SmpConstants.PATH_PARAM_ENC_GROUP_ID; @@ -189,11 +186,9 @@ export class SmpConstants { public static readonly REST_INTERNAL_DOMAIN_MANAGE_CREATE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_ACTION_CREATE; - public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE_SML_INTEGRATION = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE_SML_INTEGRATION; - public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE_RESOURCE_TYPES = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE_RESOURCE_TYPES; @@ -253,5 +248,4 @@ export class SmpConstants { + 'certificate-credential' + '/' + SmpConstants.PATH_PARAM_ENC_CREDENTIAL_ID - } diff --git a/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts b/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts index 50e33b37674887ab8cb5b043b7910ee7110639d7..2de482ea5e26563a0c2f1308fdd50a7171d80719 100644 --- a/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts +++ b/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts @@ -9,7 +9,6 @@ import {MatDialog} from "@angular/material/dialog"; import {EntityStatus} from "../../common/enums/entity-status.enum"; import {DomainRo} from "../../common/model/domain-ro.model"; import {AdminKeystoreService} from "../admin-keystore/admin-keystore.service"; -import {CertificateRo} from "../user/certificate-ro.model"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {ResourceDefinitionRo} from "../admin-extension/resource-definition-ro.model"; import {ExtensionService} from "../admin-extension/extension.service"; @@ -22,6 +21,7 @@ import {DomainSmlIntegrationPanelComponent} from "./domain-sml-panel/domain-sml- import {MemberTypeEnum} from "../../common/enums/member-type.enum"; import {firstValueFrom, Subscription} from "rxjs"; import {VisibilityEnum} from "../../common/enums/visibility.enum"; +import {CertificateRo} from "../../common/model/certificate-ro.model"; @Component({ diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts b/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts index 8eb5f56d15b0096f6197713892f21992721f4eeb..857708ae764956d64cdb89084a4c9b23234ef3ee 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts +++ b/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts @@ -4,10 +4,10 @@ import {AbstractControl, FormBuilder, FormControl, FormGroup, Validators} from " import {AdminDomainService} from "../admin-domain.service"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; import {MatDialog} from "@angular/material/dialog"; -import {CertificateRo} from "../../user/certificate-ro.model"; import {VisibilityEnum} from "../../../common/enums/visibility.enum"; import {ResourceDefinitionRo} from "../../admin-extension/resource-definition-ro.model"; import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard"; +import {CertificateRo} from "../../../common/model/certificate-ro.model"; @Component({ selector: 'domain-panel', diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts b/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts index 01cade8965470021dee123c0c15bca28ba8f765b..573766816cb77d58f296f205caa6c0013dfe8292 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts +++ b/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts @@ -4,13 +4,13 @@ import {AbstractControl, FormBuilder, FormControl, FormGroup, Validators} from " import {AdminDomainService} from "../admin-domain.service"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; import {MatDialog} from "@angular/material/dialog"; -import {CertificateRo} from "../../user/certificate-ro.model"; import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard"; import {ConfirmationDialogComponent} from "../../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; -import {SMLResult} from "../../domain/sml-result.model"; -import {SmlIntegrationService} from "../../domain/sml-integration.service"; import {GlobalLookups} from "../../../common/global-lookups"; import {HttpErrorHandlerService} from "../../../common/error/http-error-handler.service"; +import {CertificateRo} from "../../../common/model/certificate-ro.model"; +import {SmlIntegrationService} from "../../../common/services/sml-integration.service"; +import {SMLResult} from "../../../common/model/sml-result.model"; @Component({ diff --git a/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts b/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts index 34ee6544a4315c6af197189a6295cf51201e18ea..2ea296b076176a60073d1d09b68cd1013c252650 100644 --- a/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts +++ b/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts @@ -2,7 +2,6 @@ import {AfterViewInit, Component, OnDestroy, OnInit, ViewChild} from '@angular/c import {MatTableDataSource} from "@angular/material/table"; import {MatPaginator} from "@angular/material/paginator"; import {MatSort} from "@angular/material/sort"; -import {CertificateRo} from "../user/certificate-ro.model"; import {AdminKeystoreService} from "./admin-keystore.service"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; @@ -11,6 +10,7 @@ import {EntityStatus} from "../../common/enums/entity-status.enum"; import {KeystoreImportDialogComponent} from "./keystore-import-dialog/keystore-import-dialog.component"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {Subscription} from "rxjs"; +import {CertificateRo} from "../../common/model/certificate-ro.model"; @Component({ diff --git a/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.service.ts b/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.service.ts index 676d0caec607de552ca88d292d3025fbba47f894..6c3e6f3add6d3d11b472f3158daea0132f2bf5b5 100644 --- a/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.service.ts +++ b/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.service.ts @@ -5,9 +5,9 @@ import {HttpClient, HttpHeaders} from '@angular/common/http'; import {SmpConstants} from "../../smp.constants"; import {SecurityService} from "../../security/security.service"; import {User} from "../../security/user.model"; -import {CertificateRo} from "../user/certificate-ro.model"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; -import {KeystoreResult} from "../domain/keystore-result.model"; +import {CertificateRo} from "../../common/model/certificate-ro.model"; +import {KeystoreResult} from "../../common/model/keystore-result.model"; @Injectable() export class AdminKeystoreService { diff --git a/smp-angular/src/app/system-settings/admin-keystore/keystore-import-dialog/keystore-import-dialog.component.ts b/smp-angular/src/app/system-settings/admin-keystore/keystore-import-dialog/keystore-import-dialog.component.ts index 75a13db58e0b774c00725f7b2434d623a5362cf3..9e872cb6b6b471ffe7c60ecd1e463f2eaaba1000 100644 --- a/smp-angular/src/app/system-settings/admin-keystore/keystore-import-dialog/keystore-import-dialog.component.ts +++ b/smp-angular/src/app/system-settings/admin-keystore/keystore-import-dialog/keystore-import-dialog.component.ts @@ -4,8 +4,8 @@ import {FormControl, FormGroup, UntypedFormBuilder, Validators} from "@angular/f import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; import {HttpClient} from "@angular/common/http"; import {SecurityService} from "../../../security/security.service"; -import {KeystoreResult} from "../../domain/keystore-result.model"; import {AdminKeystoreService} from "../admin-keystore.service"; +import {KeystoreResult} from "../../../common/model/keystore-result.model"; @Component({ selector: 'keystore-import-dialog', diff --git a/smp-angular/src/app/system-settings/property/property-controller.ts b/smp-angular/src/app/system-settings/admin-properties/property-controller.ts similarity index 94% rename from smp-angular/src/app/system-settings/property/property-controller.ts rename to smp-angular/src/app/system-settings/admin-properties/property-controller.ts index e6bceb1bb0572eed583214b095bdb504e82f0f29..48832952ddadd6307be8cebed377ecf4819c9ec5 100644 --- a/smp-angular/src/app/system-settings/property/property-controller.ts +++ b/smp-angular/src/app/system-settings/admin-properties/property-controller.ts @@ -3,7 +3,6 @@ import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog import {GlobalLookups} from "../../common/global-lookups"; import {SearchTableEntity} from "../../common/search-table/search-table-entity.model"; import {HttpClient} from "@angular/common/http"; -import {DomainDetailsDialogComponent} from "../domain/domain-details-dialog/domain-details-dialog.component"; import {PropertyDetailsDialogComponent} from "./property-details-dialog/property-details-dialog.component"; import {PropertyRo} from "./property-ro.model"; diff --git a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.css b/smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.css similarity index 100% rename from smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.css rename to smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.css diff --git a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.html b/smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.html similarity index 100% rename from smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.html rename to smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.html diff --git a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.spec.ts b/smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.spec.ts similarity index 100% rename from smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.spec.ts rename to smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.spec.ts diff --git a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts b/smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.ts similarity index 100% rename from smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts rename to smp-angular/src/app/system-settings/admin-properties/property-details-dialog/property-details-dialog.component.ts diff --git a/smp-angular/src/app/system-settings/property/property-result.model.ts b/smp-angular/src/app/system-settings/admin-properties/property-result.model.ts similarity index 100% rename from smp-angular/src/app/system-settings/property/property-result.model.ts rename to smp-angular/src/app/system-settings/admin-properties/property-result.model.ts diff --git a/smp-angular/src/app/system-settings/property/property-ro.model.ts b/smp-angular/src/app/system-settings/admin-properties/property-ro.model.ts similarity index 100% rename from smp-angular/src/app/system-settings/property/property-ro.model.ts rename to smp-angular/src/app/system-settings/admin-properties/property-ro.model.ts diff --git a/smp-angular/src/app/system-settings/property/property-validate-ro.model.ts b/smp-angular/src/app/system-settings/admin-properties/property-validate-ro.model.ts similarity index 60% rename from smp-angular/src/app/system-settings/property/property-validate-ro.model.ts rename to smp-angular/src/app/system-settings/admin-properties/property-validate-ro.model.ts index 9b731ef2652f74da151eee914409a6f123443fe0..54e2eb0c55fc24ea3797414c012357ed99b19c9a 100644 --- a/smp-angular/src/app/system-settings/property/property-validate-ro.model.ts +++ b/smp-angular/src/app/system-settings/admin-properties/property-validate-ro.model.ts @@ -1,5 +1,3 @@ -import {SearchTableEntity} from '../../common/search-table/search-table-entity.model'; - export interface PropertyValidationRo { property: string; value?: string; diff --git a/smp-angular/src/app/system-settings/property/property.component.css b/smp-angular/src/app/system-settings/admin-properties/property.component.css similarity index 100% rename from smp-angular/src/app/system-settings/property/property.component.css rename to smp-angular/src/app/system-settings/admin-properties/property.component.css diff --git a/smp-angular/src/app/system-settings/property/property.component.html b/smp-angular/src/app/system-settings/admin-properties/property.component.html similarity index 98% rename from smp-angular/src/app/system-settings/property/property.component.html rename to smp-angular/src/app/system-settings/admin-properties/property.component.html index cfe76ef663c7428d78770620d75062d83cc500d4..61c9f4d12aaf0d5f90239bdd935affbaaba5a01d 100644 --- a/smp-angular/src/app/system-settings/property/property.component.html +++ b/smp-angular/src/app/system-settings/admin-properties/property.component.html @@ -1,6 +1,5 @@ <smp-search-table #searchTable - page_id='property_id' [title]="'Properties'" [columnPicker]="columnPicker" [url]="baseUrl" diff --git a/smp-angular/src/app/system-settings/property/property.component.ts b/smp-angular/src/app/system-settings/admin-properties/property.component.ts similarity index 100% rename from smp-angular/src/app/system-settings/property/property.component.ts rename to smp-angular/src/app/system-settings/admin-properties/property.component.ts diff --git a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts index eae20097175d1aae816918fd4b67ae0efef8741f..7416ef707cbc638169afa25e8ea4b47853590395 100644 --- a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts +++ b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts @@ -2,7 +2,6 @@ import {AfterViewInit, Component, OnDestroy, OnInit, ViewChild} from '@angular/c import {MatTableDataSource} from "@angular/material/table"; import {MatPaginator} from "@angular/material/paginator"; import {MatSort} from "@angular/material/sort"; -import {CertificateRo} from "../user/certificate-ro.model"; import {AdminTruststoreService} from "./admin-truststore.service"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; @@ -10,6 +9,7 @@ import {MatDialog} from "@angular/material/dialog"; import {EntityStatus} from "../../common/enums/entity-status.enum"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {Subscription} from "rxjs"; +import {CertificateRo} from "../../common/model/certificate-ro.model"; @Component({ diff --git a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.service.ts b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.service.ts index 251dfcffcb451e961fb59cbfc0bfecb1a9101469..2b5a258be26dd0af191a396e514dd92e97826eee 100644 --- a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.service.ts +++ b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.service.ts @@ -5,8 +5,8 @@ import {HttpClient, HttpHeaders} from '@angular/common/http'; import {SmpConstants} from "../../smp.constants"; import {SecurityService} from "../../security/security.service"; import {User} from "../../security/user.model"; -import {CertificateRo} from "../user/certificate-ro.model"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; +import {CertificateRo} from "../../common/model/certificate-ro.model"; @Injectable() export class AdminTruststoreService { diff --git a/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts b/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts index 3e79d123f2e1fba6897fa2b317ff3dda19e147f0..6ce375a4469384430e38d72a363c5a5ba9ee64dc 100644 --- a/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts +++ b/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts @@ -9,7 +9,6 @@ import {SearchUserRo} from "../../common/model/search-user-ro.model"; import {AdminUserService} from "./admin-user.service"; import {TableResult} from "../../common/model/table-result.model"; import {finalize} from "rxjs/operators"; -import {UserRo} from "../user/user-ro.model"; import {SecurityService} from "../../security/security.service"; import { PasswordChangeDialogComponent @@ -18,6 +17,7 @@ import {ApplicationRoleEnum} from "../../common/enums/application-role.enum"; import {HttpErrorHandlerService} from "../../common/error/http-error-handler.service"; import {EntityStatus} from "../../common/enums/entity-status.enum"; import {firstValueFrom} from "rxjs"; +import {UserRo} from "../../common/model/user-ro.model"; @Component({ diff --git a/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts b/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts index 557935fcfbebf274cccd1576365497d5dfa35db9..e678dcafc13b2085b12eb1ba7c727facd436f1e0 100644 --- a/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts +++ b/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts @@ -7,7 +7,7 @@ import {User} from "../../security/user.model"; import {TableResult} from "../../common/model/table-result.model"; import {MemberRo} from "../../common/model/member-ro.model"; import {SmpConstants} from "../../smp.constants"; -import {UserRo} from "../user/user-ro.model"; +import {UserRo} from "../../common/model/user-ro.model"; @Injectable() diff --git a/smp-angular/src/app/system-settings/domain/domain-controller.ts b/smp-angular/src/app/system-settings/domain/domain-controller.ts deleted file mode 100644 index 7f333c67e9f43d205ed88d377f27f06ded9f2b4d..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain-controller.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {SearchTableController} from '../../common/search-table/search-table-controller'; -import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog'; -import {DomainDetailsDialogComponent} from './domain-details-dialog/domain-details-dialog.component'; -import {DomainRo} from '../../common/model/domain-ro.model'; -import {EntityStatus} from '../../common/enums/entity-status.enum'; -import {GlobalLookups} from "../../common/global-lookups"; -import {SearchTableValidationResult} from "../../common/search-table/search-table-validation-result.model"; -import {SearchTableEntity} from "../../common/search-table/search-table-entity.model"; -import {SmpConstants} from "../../smp.constants"; -import {HttpClient} from "@angular/common/http"; - -export class DomainController implements SearchTableController { - - constructor(protected http: HttpClient, protected lookups: GlobalLookups, public dialog: MatDialog) { - } - - public showDetails( row: any) { - - let dialogRef: MatDialogRef<DomainDetailsDialogComponent> = this.dialog.open(DomainDetailsDialogComponent); - dialogRef.afterClosed().subscribe(result => { - console.log("Domain dialog is closed!"); - }); - } - - public edit(row: any) { - } - - public delete(row: any) { - } - - public newDialog(config?: MatDialogConfig): MatDialogRef<DomainDetailsDialogComponent> { - return this.dialog.open(DomainDetailsDialogComponent, config); - } - - public newRow(): DomainRo { - return { - index: null, - domainCode: '', - smlSubdomain: '', - smlSmpId: '', - smlParticipantIdentifierRegExp: '', - smlClientKeyAlias: '', - signatureKeyAlias: '', - status: EntityStatus.NEW, - smlRegistered: false, - smlClientCertAuth: false, - } - } - public dataSaved() { - this.lookups.refreshDomainLookupForLoggedUser(); - } - - validateDeleteOperation(rows: Array<SearchTableEntity>){ - var deleteRowIds = rows.map(rows => rows.id); - return this.http.put<SearchTableValidationResult>(SmpConstants.REST_INTERNAL_DOMAIN_VALIDATE_DELETE, deleteRowIds); - } - - public newValidationResult(result: boolean, message: string): SearchTableValidationResult { - return { - validOperation: result, - stringMessage: '', - } - } - - isRowExpanderDisabled(row: SearchTableEntity): boolean { - return false; - } - - isRecordChanged(oldModel, newModel): boolean { - for (let property in oldModel) { - let isEqual = this.isEqual(newModel[property],oldModel[property]); - console.log("Property: "+property+" new: " +newModel[property] + "old: " +oldModel[property] + " val: " + isEqual ); - if (!isEqual) { - return true; // Property has changed - } - } - return false; - } - - isEqual(val1, val2): boolean { - return (this.isEmpty(val1) && this.isEmpty(val2) - || val1 === val2); - } - - isEmpty(str): boolean { - return (!str || 0 === str.length); - } -} diff --git a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.html b/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.html deleted file mode 100644 index e153d55edf3838da2c9afde5e71dadaf6f8cc638..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.html +++ /dev/null @@ -1,156 +0,0 @@ -<h2 mat-dialog-title>{{formTitle}}</h2> -<mat-dialog-content > - <form [formGroup]="domainForm"> - <mat-card> - <mat-card-title>Domain properties</mat-card-title> - <mat-card-content> - <fieldset style="border: none;"> - <mat-form-field style="width:100%"> - <input matInput placeholder="Domain Code" name="domainCode" - id="domainCode_id" #domainCode - matTooltip="The SMP's domain code. The code is used in HTTP header 'Domain' when adding service group using the webservice API" - (keypress)="onFieldKeyPressed(domainCode.value, 'domainCodeTimeout')" - [formControl]="domainForm.controls['domainCode']" maxlength="63" required> - <mat-hint align="end">For WS API integration: the Domain property</mat-hint> - <div - *ngIf="(!editMode && domainForm.controls['domainCode'].touched || editMode) && domainForm.controls['domainCode'].hasError('pattern')" - style="color:red; font-size: 70%"> - Domain code must contain only chars and numbers and must be less than 63 chars long. - </div> - <div - *ngIf="!!fieldWarningTimeoutMap.domainCodeTimeout" - style="color:darkorange; font-size: 70%"> - Domain code must contain only chars and numbers and must be less than 63 chars long. - </div> - <div - *ngIf="(!editMode && domainForm.controls['domainCode'].touched || editMode) && domainForm.controls['domainCode'].hasError('notInList')" - style="color:red; font-size: 70%"> - The Domain code already exists! - </div> - </mat-form-field> - <mat-form-field style="width:100%"> - <input matInput placeholder="SML domain" - matTooltip="The domain-specific part of the SML DNS zone (e.g., ‘mydomain’ for mydomain.sml.dns.zone or leave empty for sml.dns.zone). Note: has informative value only, SML DNS zone used for publishing is based on SML configuration." - name="smlSubdomain" - id="smldomain_id" #smldomain - (keypress)="onFieldKeyPressed(smldomain.value, 'smlDomainCodeTimeout')" - [formControl]="domainForm.controls['smlSubdomain']" maxlength="63"> - <mat-hint align="end">The domain-specific part of the SML DNS zone (e.g., ‘mydomain’ for - mydomain.sml.dns.zone). - </mat-hint> - <div - *ngIf="(!editMode && domainForm.controls['smlSubdomain'].touched || editMode) - && domainForm.controls['smlSubdomain'].hasError('pattern')" - style="color:red; font-size: 70%"> - SML domain should be up to 63 characters long, should only contain alphanumeric and hyphen characters, - should not start with a digit nor a hyphen and should not end with a hyphen. - </div> - <div - *ngIf="!!fieldWarningTimeoutMap.smlDomainCodeTimeout" - style="color:darkorange; font-size: 70%"> - SML domain should be up to 63 characters long, should only contain alphanumeric and hyphen characters, - should not start with a digit nor a hyphen and should not end with a hyphen. - </div> - <div - *ngIf="(!editMode && domainForm.controls['smlSubdomain'].touched || editMode) && domainForm.controls['smlSubdomain'].hasError('notInList')" - style="color:red; font-size: 70%"> - The SML subdomain is already defined! - </div> - <div - *ngIf="(!editMode && domainForm.controls['smlSubdomain'].hasError('blankDomainError'))" - style="color:red; font-size: 70%"> - Domain with empty sml subdomain already exists! - </div> - </mat-form-field> - <mat-form-field style="width:100%"> - <mat-select placeholder="Response signature Certificate (Signature CertAlias)" - [formControl]="domainForm.controls['signatureKeyAlias']" name="cert" - matTooltip="Certificate is used for signing REST responses for the domain." - id="signatureKeyAlias_id"> - <mat-option [value]="''">Choose certificate for signing soap response</mat-option> - <mat-option *ngFor="let cert of lookups.cachedCertificateList" [value]="cert.alias"> - {{cert.alias}} ({{cert.certificateId}}) - </mat-option> - </mat-select> - <mat-hint align="end">Empty value will cause that ServiceMetadata response will not be signed by SMP! - </mat-hint> - </mat-form-field> - </fieldset> - </mat-card-content> - </mat-card> - <mat-card> - <mat-card-title>SML integration data</mat-card-title> - <mat-card-content> - <fieldset style="border: none;"> - <mat-form-field style="width:100%"> - <input matInput placeholder="SML SMP identifier" name="smlSmpId" - id="smlSMPId_id" #smlSMPId - (keypress)="onFieldKeyPressed(smlSMPId.value, 'smlsmpid')" - [formControl]="domainForm.controls['smlSmpId']" maxlength="63"> - <mat-hint align="end">SMP ID used for SML</mat-hint> - <div - *ngIf="(!editMode && domainForm.controls['smlSmpId'].touched || editMode) && domainForm.controls['smlSmpId'].hasError('pattern')" - style="color:red; font-size: 70%"> - SML SMP ID should be up to 63 characters long, should only contain alphanumeric and hyphen characters, - should not start with a digit nor a hyphen and should not end with a hyphen. - </div> - <div - *ngIf="!!fieldWarningTimeoutMap.smlsmpid" - style="color:darkorange; font-size: 70%"> - SML SMP ID should be up to 63 characters long, should only contain alphanumeric and hyphen characters, - should not start with a digit nor a hyphen and should not end with a hyphen. - </div> - <div - *ngIf="(!editMode && domainForm.controls['smlSmpId'].touched || editMode) && domainForm.controls['smlSmpId'].hasError('notInList')" - style="color:red; font-size: 70%"> - SML SMP ID already exists! - </div> - </mat-form-field> - - <mat-form-field style="width:100%" - matTooltip="Client Certificate used for SML authentication. The SML Client-Cert http Header is also generated from the certificate"> - - <mat-select [(value)]="selectedSMLCert" - placeholder="SML ClientCert Alias" - [formControl]="domainForm.controls['smlClientKeyCertificate']" - name="cert" - id="smlClientKeyAlias_id"> - <mat-option [value]="''">Choose certificate for SML integration</mat-option> - <mat-option *ngFor="let cert of lookups.cachedCertificateList" [value]="cert"> - {{cert.alias}} ({{cert.certificateId}}) - </mat-option> - </mat-select> - </mat-form-field> - - <mat-form-field style="width:100%" - matTooltip="SML Client-Cert http Header used for SML authentication. The header is generated from chosen SML ClientCert Alias"> - <input matInput placeholder="SML ClientCert Header" name="Client certificate" id="smlClientHeader_id" - [value]="selectedSMLCert?.clientCertHeader" maxlength="2000" readonly="true"> - </mat-form-field> - - <mat-slide-toggle style="width:100%" - mat-no-ink class="mat-primary" [formControl]="domainForm.controls['smlClientCertAuth']" - id="smlClientCertHeaderAuth_id"> - Use ClientCert http header authentication. - </mat-slide-toggle> - - </fieldset> - - </mat-card-content> - </mat-card> - </form> - <div class="required-fields">* required fields</div> -</mat-dialog-content> - - -<mat-dialog-actions> - <button mat-raised-button color="primary" (click)="submitForm()" [disabled]="!domainForm.valid"> - <mat-icon>check_circle</mat-icon> - <span>OK</span> - </button> - <button mat-raised-button color="primary" mat-dialog-close> - <mat-icon>cancel</mat-icon> - <span>Cancel</span> - </button> -</mat-dialog-actions> - diff --git a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.spec.ts b/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.spec.ts deleted file mode 100644 index 93b56953d46ba5c6a00dcff42cb9ff37707ad2a6..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DomainDetailsDialogComponent } from './domain-details-dialog.component'; - -describe('DomainDetailsDialogComponent', () => { - let component: DomainDetailsDialogComponent; - let fixture: ComponentFixture<DomainDetailsDialogComponent>; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ DomainDetailsDialogComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DomainDetailsDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts b/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts deleted file mode 100644 index 8af1638bde7855604aefe4a2b144d162871f150e..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts +++ /dev/null @@ -1,206 +0,0 @@ -import {Component, Inject} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material/dialog'; -import {AbstractControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms"; -import {DomainRo} from "../../../common/model/domain-ro.model"; -import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; -import {EntityStatus} from "../../../common/enums/entity-status.enum"; -import {GlobalLookups} from "../../../common/global-lookups"; -import {CertificateRo} from "../../user/certificate-ro.model"; -import {BreakpointObserver} from "@angular/cdk/layout"; - -@Component({ - selector: 'domain-details-dialog', - templateUrl: './domain-details-dialog.component.html' -}) -export class DomainDetailsDialogComponent { - - static readonly NEW_MODE = 'New Domain'; - static readonly EDIT_MODE = 'Domain Edit'; - // Request from test team can not automate test if this is less than 10 seconds :(. Initialy it was 2s - readonly warningTimeout : number = 10000; - readonly dnsDomainPattern = '^([a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){0,63}$'; - readonly subDomainPattern = this.dnsDomainPattern; - readonly smpIdDomainPattern = this.dnsDomainPattern; - // is part of domain - readonly domainCodePattern = '^[a-zA-Z0-9]{1,63}$'; - - fieldWarningTimeoutMap = { - domainCodeTimeout: null, - smlDomainCodeTimeout: null, - smlsmpid: null, - }; - - editMode: boolean; - formTitle: string; - current: DomainRo & { confirmation?: string }; - domainForm: UntypedFormGroup; - domain; - selectedSMLCert: CertificateRo = null; - - - notInList(list: string[], exception: string) { - return (c: AbstractControl): { [key: string]: any } => { - if (c.value && c.value !== exception && list.includes(c.value)) - return {'notInList': {valid: false}}; - return null; - } - } - - - constructor( - public dialog: MatDialog, - public lookups: GlobalLookups, - private responsive: BreakpointObserver, - private dialogRef: MatDialogRef<DomainDetailsDialogComponent>, - private alertService: AlertMessageService, - @Inject(MAT_DIALOG_DATA) public data: any, - private fb: UntypedFormBuilder) { - - this.editMode = data.edit; - this.formTitle = this.editMode ? DomainDetailsDialogComponent.EDIT_MODE : DomainDetailsDialogComponent.NEW_MODE; - this.current = !!data.row - ? { - ...data.row, - } - : { - domainCode: '', - smlSubdomain: '', - smlSmpId: '', - smlClientKeyAlias: '', - signatureKeyAlias: '', - status: EntityStatus.NEW, - }; - - this.domainForm = fb.group({ - 'domainCode': new UntypedFormControl({value: '', disabled: this.editMode}, [Validators.pattern(this.domainCodePattern), - this.notInList(this.lookups.cachedDomainList.map(a => a.domainCode), this.current.domainCode)]), - 'smlSubdomain': new UntypedFormControl({ - value: '', - disabled: this.editMode - }, [Validators.pattern(this.subDomainPattern), - this.notInList(this.lookups.cachedDomainList.map(a => a.smlSubdomain), this.current.smlSubdomain)]), - 'smlSmpId': new UntypedFormControl({value: ''}, [Validators.pattern(this.smpIdDomainPattern), - this.notInList(this.lookups.cachedDomainList.map(a => a.smlSmpId), this.current.smlSmpId)]), - 'smlClientKeyAlias': new UntypedFormControl({value: ''}, null), - 'smlClientKeyCertificate': new UntypedFormControl({value: this.selectedSMLCert}, null), - 'signatureKeyAlias': new UntypedFormControl({value: ''}, null), - - 'smlRegistered': new UntypedFormControl({value: ''}, null), - 'smlClientCertAuth': new UntypedFormControl({value: ''}, null), - }); - - this.domainForm.controls['domainCode'].setValue(this.current.domainCode); - this.domainForm.controls['smlSubdomain'].setValue(this.current.smlSubdomain); - this.domainForm.controls['smlSmpId'].setValue(this.current.smlSmpId); - - this.domainForm.controls['smlClientKeyAlias'].setValue(this.current.smlClientKeyAlias); - this.domainForm.controls['signatureKeyAlias'].setValue(this.current.signatureKeyAlias); - - this.domainForm.controls['smlRegistered'].setValue(this.current.smlRegistered); - this.domainForm.controls['smlClientCertAuth'].setValue(this.current.smlClientCertAuth); - - if (this.current.smlClientKeyAlias) { - this.selectedSMLCert = this.lookups.cachedCertificateList.find(crt => crt.alias === this.current.smlClientKeyAlias); - this.domainForm.controls['smlClientKeyCertificate'].setValue(this.selectedSMLCert); - } - } - - - /** - * Show warning if domain code exceed the maxlength. - * @param value - */ - onFieldKeyPressed(value: string, showTheWarningReference:string) { - if (!!value && value.length >= 63 && !this.fieldWarningTimeoutMap[showTheWarningReference]) { - this.fieldWarningTimeoutMap[showTheWarningReference] = setTimeout(() => { - this.fieldWarningTimeoutMap[showTheWarningReference] = null; - }, this.warningTimeout); - } - } - - submitForm() { - this.checkValidity(this.domainForm) - - // check if empty domain already exists - if (this.current.status === EntityStatus.NEW - && !this.domainForm.value['smlSubdomain']) { - - let domainWithNullSML = this.lookups.cachedDomainList.filter(function (dmn) { - return !dmn.smlSubdomain; - })[0]; - - if (!domainWithNullSML) { - this.dialogRef.close(true); - } else { - this.domainForm.controls['smlSubdomain'].setErrors({'blankDomainError': true}); - } - - } else { - this.dialogRef.close(true); - } - } - - checkValidity(g: UntypedFormGroup) { - Object.keys(g.controls).forEach(key => { - g.get(key).markAsDirty(); - }); - Object.keys(g.controls).forEach(key => { - g.get(key).markAsTouched(); - }); - //!!! updateValueAndValidity - else some filed did no update current / on blur never happened - Object.keys(g.controls).forEach(key => { - g.get(key).updateValueAndValidity(); - }); - - - } - - public getCurrent(): DomainRo { - - if (!this.editMode) { - this.current.domainCode = this.domainForm.value['domainCode']; - this.current.smlSubdomain = this.domainForm.value['smlSubdomain']; - } - this.current.smlSmpId = this.domainForm.value['smlSmpId']; - if (this.domainForm.value['smlClientKeyCertificate']) { - this.current.smlClientKeyAlias = this.domainForm.value['smlClientKeyCertificate'].alias; - } else { - this.current.smlClientKeyAlias = ''; - } - this.current.signatureKeyAlias = this.domainForm.value['signatureKeyAlias']; - this.current.smlClientCertAuth = this.domainForm.value['smlClientCertAuth']; - - return this.current; - - } - - updateDomainCode(event) { - this.current.domainCode = event.target.value; - } - - updateSmlDomain(event) { - this.current.smlSubdomain = event.target.value; - } - - updateSmlSmpId(event) { - this.current.smlSmpId = event.target.value; - } - - updateSmlClientKeyAlias(event) { - this.current.smlClientKeyAlias = event.target.value; - } - - updateSignatureKeyAlias(event) { - this.current.signatureKeyAlias = event.target.value; - } - - - compareCertByAlias(cert, alias): boolean { - return cert.alias === alias; - } - - compareCertificate(certificate: CertificateRo, alias: string): boolean { - return certificate.alias === alias; - } - -} diff --git a/smp-angular/src/app/system-settings/domain/domain-result.model.ts b/smp-angular/src/app/system-settings/domain/domain-result.model.ts deleted file mode 100644 index 50cc6686d4766b101f4ec2ab8f39e140374c5898..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain-result.model.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {DomainRo} from '../../common/model/domain-ro.model'; - -export interface DomainResult { - serviceEntities: Array<DomainRo>; - pageSize: number; - count: number; - filter: any; -} diff --git a/smp-angular/src/app/system-settings/domain/domain.component.css b/smp-angular/src/app/system-settings/domain/domain.component.css deleted file mode 100644 index d222a471f320e3b0964b02cce0d3de7775cfcaf6..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain.component.css +++ /dev/null @@ -1,41 +0,0 @@ -/* --- Select ---*/ -.mat-select{ - padding:20px 0; -} - -/* --- Button ---*/ -.group-btn { - margin-top:20px; - } - -#hiddenButtonId { - position: fixed; -} - -::ng-deep .missingKey { - text-decoration: line-through !important; - font-weight: bold; - color:red; -} - -::ng-deep .domainWarning { - text-decoration: line-through !important; - font-weight: bold; - color:#c6c639; -} - -::ng-deep .deleted { - text-decoration: line-through !important; - font-weight: bold; -} -::ng-deep .table-row-new { - - color: darkgreen !important; - font-weight: bold; -} -::ng-deep .table-row-updated { - font-weight: bold; -} -::ng-deep .table-row { - font-weight: normal; -} diff --git a/smp-angular/src/app/system-settings/domain/domain.component.html b/smp-angular/src/app/system-settings/domain/domain.component.html deleted file mode 100644 index 4a16a422da202086f2a88a9f533035a6d43e1ada..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain.component.html +++ /dev/null @@ -1,43 +0,0 @@ -<smp-search-table - #searchTable - page_id= 'domain_id' - [title]= "'Domains'" - [columnPicker] = "columnPicker" - [url]="baseUrl" - [additionalToolButtons]="additionalToolButtons" - [searchTableController]="domainController" - [showSearchPanel]="false" - [filter]="filter" - [allowNewItems]="securityService.isCurrentUserSystemAdmin()" - [allowDeleteItems]="securityService.isCurrentUserSystemAdmin()" -> - - <ng-template #domainCodeColumnTemplate let-row="row" let-value="value" ngx-datatable-cell-template> - <span [class]='aliasCssForDomainCodeClass(row)' [matTooltip]='getDomainConfigurationWarning(row)' >{{value}}</span> - </ng-template> - - <ng-template #certificateAliasTemplate let-row="row" let-value="value" ngx-datatable-cell-template> - <span [class]='aliasCssClass(value, row)'>{{value}}</span> - </ng-template> - - <ng-template #additionalToolButtons > - <tool-button-spacer></tool-button-spacer> - - <button id="registerButton" mat-raised-button (click)="smlRegisterSelectedDomain()" - [disabled]="!enableSMLRegister()" color="primary"> - <mat-icon>link</mat-icon> - <span>Register</span> - </button> - <button id="unregisterButton" mat-raised-button (click)="smlUnregisterSelectedDomain()" - [disabled]="!enableSMLUnregister()" color="primary"> - <mat-icon>link_off</mat-icon> - <span>Unregister</span> - </button> - <tool-button-spacer></tool-button-spacer> - - <button id="openEditKeystoreDialogButton" mat-raised-button color="primary" (click)="openEditKeystoreDialog()"> - <mat-icon>vpn_key</mat-icon> - <span> Edit keystore</span> - </button> - </ng-template> -</smp-search-table> diff --git a/smp-angular/src/app/system-settings/domain/domain.component.ts b/smp-angular/src/app/system-settings/domain/domain.component.ts deleted file mode 100644 index 2ab9878fe63455ff9c6ae2b5b1f026d703b49973..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/domain.component.ts +++ /dev/null @@ -1,320 +0,0 @@ -import { - AfterViewChecked, - AfterViewInit, - ChangeDetectorRef, - Component, - OnInit, - TemplateRef, - ViewChild -} from '@angular/core'; -import {ColumnPicker} from '../../common/column-picker/column-picker.model'; -import {MatDialog, MatDialogRef} from '@angular/material/dialog'; - -import {AlertMessageService} from '../../common/alert-message/alert-message.service'; -import {DomainController} from './domain-controller'; -import {HttpClient} from '@angular/common/http'; -import {SmpConstants} from "../../smp.constants"; -import {GlobalLookups} from "../../common/global-lookups"; -import {SearchTableComponent} from "../../common/search-table/search-table.component"; -import {SecurityService} from "../../security/security.service"; -import {DomainRo} from "../../common/model/domain-ro.model"; -import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; -import {EntityStatus} from "../../common/enums/entity-status.enum"; -import {KeystoreEditDialogComponent} from "./keystore-edit-dialog/keystore-edit-dialog.component"; -import {SmpInfoService} from "../../app-info/smp-info.service"; -import {SmlIntegrationService} from "./sml-integration.service"; -import {SMLResult} from "./sml-result.model"; - -@Component({ - templateUrl: './domain.component.html', - styleUrls: ['./domain.component.css'] -}) -export class DomainComponent implements OnInit, AfterViewInit, AfterViewChecked { - - @ViewChild('rowMetadataAction') rowMetadataAction: TemplateRef<any>; - @ViewChild('certificateAliasTemplate') certificateAliasColumn: TemplateRef<any>; - @ViewChild('domainCodeColumnTemplate') domainCodeColumnTemplate: TemplateRef<any>; - @ViewChild('rowActions') rowActions: TemplateRef<any>; - @ViewChild('searchTable') searchTable: SearchTableComponent; - - - baseUrl = SmpConstants.REST_INTERNAL_DOMAIN_MANAGE_DEPRECATED; - columnPicker: ColumnPicker = new ColumnPicker(); - domainController: DomainController; - filter: any = {}; - - constructor(public securityService: SecurityService, - protected smpInfoService: SmpInfoService, - protected smlIntegrationService: SmlIntegrationService, - protected lookups: GlobalLookups, - protected http: HttpClient, - protected alertService: AlertMessageService, - public dialog: MatDialog, - private changeDetector: ChangeDetectorRef) { - - // check application settings - - - } - - ngOnInit() { - this.domainController = new DomainController(this.http, this.lookups, this.dialog); - } - - initColumns() { - this.columnPicker.allColumns = [ - { - name: 'Domain code', - title: "Unique domain code.", - prop: 'domainCode', - showInitially: true, - cellTemplate: this.domainCodeColumnTemplate, - width: 250 - - }, - { - name: 'SML Domain', - title: "Informative: SML domain name.", - prop: 'smlSubdomain', - showInitially: true, - }, - { - name: 'Signature CertAlias', - title: "Certificate for signing REST responses", - prop: 'signatureKeyAlias', - showInitially: true, - cellTemplate: this.certificateAliasColumn, - width: 150 - }, - { - name: 'SML SMP Id', - title: "SMP identifier for SML integration", - prop: 'smlSmpId', - showInitially: true, - width: 150 - }, - { - name: 'SML ClientCert Alias', - prop: 'smlClientKeyAlias', - showInitially: true, - cellTemplate: this.certificateAliasColumn, - width: 150 - }, - { - name: 'Is SML Registered', - prop: 'smlRegistered', - showInitially: true, - width: 120 - }, - { - name: 'SML ClientCert Auth.', - prop: 'smlClientCertAuth', - showInitially: true, - width: 130 - }, - ]; - this.searchTable.tableColumnInit(); - } - - ngAfterViewChecked() { - this.changeDetector.detectChanges(); - } - - ngAfterViewInit() { - this.initColumns(); - - } - - certificateAliasExists(alias: string): boolean { - if (alias) { - return this.lookups.cachedCertificateAliasList.includes(alias); - } else { - return false; - } - } - - aliasCssClass(alias: string, row) { - if (!this.certificateAliasExists(alias)) { - return 'missingKey'; - } else if (row.status === EntityStatus.NEW) { - return 'table-row-new'; - } else if (row.status === EntityStatus.UPDATED) { - return 'table-row-updated'; - } else if (row.status === EntityStatus.REMOVED) { - return 'deleted'; - } - } - - aliasCssForDomainCodeClass(domain) { - let domainWarning = this.getDomainConfigurationWarning(domain) - if (!!domainWarning) { - return 'domainWarning'; - } else if (domain.status === EntityStatus.NEW) { - return 'table-row-new'; - } else if (domain.status === EntityStatus.UPDATED) { - return 'table-row-updated'; - } else if (domain.status === EntityStatus.REMOVED) { - return 'deleted'; - } - } - - getDomainConfigurationWarning(domain: DomainRo) { - let msg = null; - if (!domain.signatureKeyAlias) { - msg = "The domain should have a defined signature CertAlias." - } - if (this.lookups.cachedApplicationConfig.smlIntegrationOn) { - if (!domain.smlSmpId || !domain.smlClientKeyAlias) { - msg = (!msg ? "" : msg + " ") + "For SML integration the SMP SMP ID and SML client certificate must be defined!" - } - } - return msg; - } - - details(row: any) { - this.domainController.showDetails(row); - } - - // for dirty guard... - isDirty(): boolean { - return this.searchTable.isDirty(); - } - - get isSMPIntegrationOn() { - return this.lookups.cachedApplicationConfig?.smlIntegrationOn - } - - enableSMLRegister(): boolean { - if (!this.selectedOneRow || !this.isSMPIntegrationOn) { - return false; - } - let domainRo = (this.searchTable.selected[0] as DomainRo); - - if (!domainRo.smlClientKeyAlias && !domainRo.smlClientCertAuth) { - return false; - } - - if (domainRo.status != EntityStatus.PERSISTED) { - return false; - } - // entity must be first persisted in order to be enabled to registering to SML - return !domainRo.smlRegistered; - } - - enableSMLUnregister(): boolean { - if (!this.selectedOneRow || !this.isSMPIntegrationOn) { - return false; - } - let domainRo = (this.searchTable.selected[0] as DomainRo); - - if (!domainRo.smlClientKeyAlias && !domainRo.smlClientCertAuth) { - return false; - } - - if (domainRo.status != EntityStatus.PERSISTED) { - return false; - } - - // entity must be first persisted in order to be enabled to registering to SML - return domainRo.smlRegistered; - } - - get selectedOneRow(): boolean { - return this.searchTable?.selected.length === 1 - } - - smlUnregisterSelectedDomain() { - if (!this.selectedOneRow) { - return false; - } - - let domainRo = (this.searchTable.selected[0] as DomainRo); - - this.dialog.open(ConfirmationDialogComponent, { - data: { - title: "Unregister domain to SML", - description: "Action will unregister domain: " + domainRo.domainCode + " and all its service groups from SML.<br/><br/>Do you wish to continue?" - } - }).afterClosed().subscribe(result => { - if (result) { - this.smlUnregisterDomain(domainRo); - } - }) - } - - smlRegisterSelectedDomain() { - if (this.searchTable.selected.length !== 1) { - return false; - } - - let domainRo = (this.searchTable.selected[0] as DomainRo); - - this.dialog.open(ConfirmationDialogComponent, { - data: { - title: "Register domain to SML", - description: "Action will register domain: " + domainRo.domainCode + " and all its service groups to SML. <br/><br/>Do you wish to continue?" - } - }).afterClosed().subscribe(result => { - if (result) { - this.smlRegisterDomain(domainRo); - } - }) - } - - smlRegisterDomain(domain: DomainRo) { - this.searchTable.showSpinner = true; - this.smlIntegrationService.registerDomainToSML$(domain.domainCode).toPromise().then((res: SMLResult) => { - this.searchTable.showSpinner = false; - if (res) { - if (res.success) { - this.alertService.success("Domain " + domain.domainCode + " registered to sml!"); - this.lookups.refreshDomainLookupForLoggedUser(); - domain.smlRegistered = true; - } else { - this.alertService.exception('Error occurred while registering domain:' + domain.domainCode, res.errorMessage); - } - } else { - this.alertService.exception('Error occurred while registering domain:' + domain.domainCode, "Unknown error. Check logs."); - } - }, - err => { - this.searchTable.showSpinner = false; - this.alertService.exception('Error occurred while registering domain:' + domain.domainCode, err); - } - ) - } - - smlUnregisterDomain(domain: DomainRo) { - this.searchTable.showSpinner = true; - this.smlIntegrationService.unregisterDomainToSML$(domain.domainCode).toPromise().then((res: SMLResult) => { - this.searchTable.showSpinner = false; - if (res) { - if (res.success) { - this.alertService.success("Domain " + domain.domainCode + " unregistered from sml!"); - this.lookups.refreshDomainLookupForLoggedUser(); - domain.smlRegistered = false; - } else { - this.alertService.exception('Error occurred while unregistering domain:' + domain.domainCode, res.errorMessage); - } - } else { - this.alertService.exception('Error occurred while registering domain:' + domain.domainCode, "Unknown error. Check logs."); - } - } - , - err => { - this.searchTable.showSpinner = false; - this.alertService.exception('Error occurred while unregistering domain:' + domain.domainCode, err); - } - ) - - } - - openEditKeystoreDialog() { - const formRef: MatDialogRef<any> = this.dialog.open(KeystoreEditDialogComponent); - formRef.afterClosed().subscribe(result => { - if (result) { - // close - } - }); - } -} diff --git a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.css b/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.css deleted file mode 100644 index aaf6e06f5744b5904dadc3e990f19b4c9d0498c8..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.css +++ /dev/null @@ -1,8 +0,0 @@ -.scroller-div { - padding: 4px; - width: 100%; - height: 308px; - overflow-x: hidden; - overflow-y: auto; - text-align: justify; -} diff --git a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.html b/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.html deleted file mode 100644 index f6532f03e1230a6ddd41fe9435c5bf90363118bf..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.html +++ /dev/null @@ -1,54 +0,0 @@ -<h2 mat-dialog-title>{{formTitle}}</h2> -<mat-dialog-content style="height:400px;width:850px"> - <mat-card> - <mat-card-content > - <div class="scroller-div"> - <ngx-datatable - id='keystoreTable_id' - class='material' - style="min-height: 300px" - [reorderable]="true" - [selectionType]='"single"' - [rows]='lookups.cachedCertificateList' - [columnMode]='"force"' - [headerHeight]='50' - [footerHeight]='0' - [rowHeight]='40' - (activate)='onActivate($event)' - [count]='lookups.cachedCertificateList.length' - > - <ngx-datatable-column prop="alias" name="Alias" maxWidth="250"></ngx-datatable-column> - <ngx-datatable-column prop="certificateId" minWidth="300" name="Certificate id"></ngx-datatable-column> - <ngx-datatable-column [cellTemplate]="certificateRowActions" name="Actions" - minWidth="100" maxWidth="180" > </ngx-datatable-column> - - <ng-template #certificateRowActions let-row="row" ngx-datatable-cell-template> - <div> - <button id="showCertificateDataButton" mat-icon-button color="primary" - matTooltip="Certificate details" - (click)="onShowCertificateDataRow(row)" > - <mat-icon>details</mat-icon> - </button> - <button id="deleteCertificateButton" mat-icon-button color="primary" - matTooltip="Delete certificate" - (click)="onDeleteCertificateRowActionClicked(row)"> - <mat-icon>delete</mat-icon> - </button> - </div> - </ng-template> - </ngx-datatable> - </div> - <button id="importKeystoreButton" mat-raised-button color="primary" (click)="openImportKeystoreDialog()"> - <mat-icon>vpn_key</mat-icon> - <span>Import keystore</span> - </button> - </mat-card-content> - </mat-card> -</mat-dialog-content> - -<mat-dialog-actions> - <button id="closeDialogButton" mat-raised-button color="primary" mat-dialog-close> - <mat-icon>close</mat-icon> - <span>Close</span> - </button> -</mat-dialog-actions> diff --git a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.spec.ts b/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.spec.ts deleted file mode 100644 index 845e3149007e633823464e4804f4c5222c2677d5..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import {KeystoreEditDialogComponent} from "./keystore-edit-dialog.component"; - -describe('KeystoreEditDialogComponent', () => { - let component: KeystoreEditDialogComponent; - let fixture: ComponentFixture<KeystoreEditDialogComponent>; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ KeystoreEditDialogComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(KeystoreEditDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.ts b/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.ts deleted file mode 100644 index b3f9be0e2ce6a8c0ccad3bc9674f57046dd4ae8f..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/keystore-edit-dialog/keystore-edit-dialog.component.ts +++ /dev/null @@ -1,125 +0,0 @@ -import {AfterViewChecked, ChangeDetectorRef, Component, Inject} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material/dialog'; -import {UntypedFormBuilder} from "@angular/forms"; -import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; -import {GlobalLookups} from "../../../common/global-lookups"; -import {HttpClient} from "@angular/common/http"; -import {SecurityService} from "../../../security/security.service"; -import {CertificateDialogComponent} from "../../../common/dialogs/certificate-dialog/certificate-dialog.component"; -import {ConfirmationDialogComponent} from "../../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; -import { - KeystoreImportDialogComponent -} from "../../admin-keystore/keystore-import-dialog/keystore-import-dialog.component"; -import {InformationDialogComponent} from "../../../common/dialogs/information-dialog/information-dialog.component"; -import {KeystoreService} from "../keystore.service"; -import {KeystoreResult} from "../keystore-result.model"; - -@Component({ - selector: 'keystore-edit-dialog', - templateUrl: './keystore-edit-dialog.component.html', - styleUrls: ['keystore-edit-dialog.component.css'] -}) -export class KeystoreEditDialogComponent implements AfterViewChecked { - formTitle: string; - - displayedColumns = ['alias', 'certificateId']; - - - constructor(private keystoreService: KeystoreService, - private securityService: SecurityService, - private http: HttpClient, - public lookups: GlobalLookups, - public dialog: MatDialog, - private dialogRef: MatDialogRef<KeystoreEditDialogComponent>, - private alertService: AlertMessageService, - @Inject(MAT_DIALOG_DATA) public data: any, - private fb: UntypedFormBuilder, - private changeDetector: ChangeDetectorRef) { - this.formTitle = "Keystore edit dialog"; - } - - ngAfterViewChecked(): void { - // fix bug updating the columns - //https://github.com/swimlane/ngx-datatable/issues/1266 - window.dispatchEvent(new Event('resize')); - this.changeDetector.detectChanges(); - - } - - onDeleteCertificateRowActionClicked(row) { - - let listDomains = this.lookups.cachedDomainList.filter(domain => domain.smlClientKeyAlias === row.alias || domain.signatureKeyAlias === row.alias); - let listSignatureKeys = listDomains.map(domain => domain.domainCode); - - if (listSignatureKeys.length > 0) { - this.dialog.open(InformationDialogComponent, { - data: { - title: "Delete key/certificate " + row.alias + " from keystore", - description: "Key/certificate is in use by domains: " + listSignatureKeys + ". First replace/remove certificate from domains!" - } - }).afterClosed().subscribe(result => { - if (result) { - // - } - }) - } else { - this.dialog.open(ConfirmationDialogComponent, { - data: { - title: "Delete key/certificate " + row.alias + " from keystore", - description: "Action will permanently delete key/certificate from keystore! <br/><br/>Do you wish to continue?" - } - }).afterClosed().subscribe(result => { - if (result) { - this.deleteCertificateFromKeystore(row.alias); - } - }) - } - } - - deleteCertificateFromKeystore(alias: string) { - this.keystoreService.deleteCertificateFromKeystore$(alias).subscribe((res: KeystoreResult) => { - if (res) { - if (res.errorMessage) { - this.alertService.exception("Error occurred while deleting certificate:" + alias, res.errorMessage, false); - } else { - this.alertService.success("Certificate " + alias + " deleted!"); - - - } - } else { - this.alertService.exception("Error occurred while deleting certificate:" + alias, "Unknown Error", false); - } - }, - err => { - this.alertService.exception('Error occurred while deleting certificate:' + alias, err); - } - ) - - } - - openImportKeystoreDialog() { - const formRef: MatDialogRef<any> = this.dialog.open(KeystoreImportDialogComponent); - formRef.afterClosed().subscribe(result => { - if (result) { - // import - } - }); - } - - onActivate(event) { - if ("dblclick" === event.type) { - this.onShowCertificateDataRow(event.row); - } - } - - onShowCertificateDataRow(row) { - const formRef: MatDialogRef<any> = this.dialog.open(CertificateDialogComponent, { - data: {row} - }); - formRef.afterClosed().subscribe(result => { - if (result) { - // import - } - }); - } -} diff --git a/smp-angular/src/app/system-settings/domain/keystore.service.ts b/smp-angular/src/app/system-settings/domain/keystore.service.ts deleted file mode 100644 index 088fca304c3b6a488181fbc0d0a135d9dba29506..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/domain/keystore.service.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable} from 'rxjs'; - -import {HttpClient, HttpHeaders} from '@angular/common/http'; -import {SmpConstants} from "../../smp.constants"; -import {SecurityService} from "../../security/security.service"; -import {User} from "../../security/user.model"; -import {KeystoreResult} from "./keystore-result.model"; - -@Injectable() -export class KeystoreService { - - constructor( - private http: HttpClient, - private securityService: SecurityService) { - } - - uploadKeystore(selectedFile, keystoreType, password): Observable<KeystoreResult> { - - // upload file as binary file - const headers = new HttpHeaders() - .set("Content-Type", "application/octet-stream"); - - // encode password - let passwordEncoded = encodeURIComponent(password); - - const currentUser: User = this.securityService.getCurrentUser(); - return this.http.post<KeystoreResult>(SmpConstants.REST_INTERNAL_KEYSTORE_UPLOAD - .replace(SmpConstants.PATH_PARAM_ENC_USER_ID, currentUser.userId) - .replace(SmpConstants.PATH_PARAM_KEYSTORE_TYPE, keystoreType) - .replace(SmpConstants.PATH_PARAM_KEYSTORE_PWD, passwordEncoded), selectedFile, { - headers - }); - } - - deleteCertificateFromKeystore$(certificateAlias): Observable<KeystoreResult> { - - // encode password - let certificateAliasEncoded = encodeURIComponent(certificateAlias); - - const currentUser: User = this.securityService.getCurrentUser(); - return this.http.delete<KeystoreResult>(`${SmpConstants.REST_INTERNAL_KEYSTORE_DEPRECATED}/${currentUser.userId}/delete/${certificateAliasEncoded}`); - } -} diff --git a/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts b/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts index 7995edeb08b405364266149addf986a64d92bc2d..f125fdcd30eba5611c718e6a1fe38b97d535d9ac 100644 --- a/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts +++ b/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts @@ -1,5 +1,4 @@ import {AfterViewInit, Component, QueryList, ViewChild, ViewChildren,} from '@angular/core'; -import {UserService} from "../../system-settings/user/user.service"; import {CredentialRo} from "../../security/credential.model"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; import {MatDialog} from "@angular/material/dialog"; @@ -9,6 +8,7 @@ import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {AccessTokenPanelComponent} from "./access-token-panel/access-token-panel.component"; import {MatPaginator} from "@angular/material/paginator"; import {MatTableDataSource} from "@angular/material/table"; +import {UserService} from "../../common/services/user.service"; @Component({ templateUrl: './user-access-tokens.component.html', diff --git a/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts b/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts index 5fcaa9436408ae28093da110d2fb5c7433967fde..5b86f4ea85ca7929d91e8fb4b83fb11d2837f0d3 100644 --- a/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts +++ b/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts @@ -1,6 +1,5 @@ import {Component, QueryList, ViewChildren,} from '@angular/core'; import {SecurityService} from "../../security/security.service"; -import {UserService} from "../../system-settings/user/user.service"; import {CredentialRo} from "../../security/credential.model"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; import {MatDialog} from "@angular/material/dialog"; @@ -10,6 +9,7 @@ import {CredentialDialogComponent} from "../../common/dialogs/credential-dialog/ import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {UserCertificatePanelComponent} from "./user-certificate-panel/user-certificate-panel.component"; import {HttpErrorHandlerService} from "../../common/error/http-error-handler.service"; +import {UserService} from "../../common/services/user.service"; @Component({ diff --git a/smp-angular/src/app/user-settings/user-profile/user-profile.component.ts b/smp-angular/src/app/user-settings/user-profile/user-profile.component.ts index c2b6aee50703e2fbc3aa077f1a3ede7116701d48..8706ca476bdef7bed4b9ae56c06989b31b1fcb97 100644 --- a/smp-angular/src/app/user-settings/user-profile/user-profile.component.ts +++ b/smp-angular/src/app/user-settings/user-profile/user-profile.component.ts @@ -1,9 +1,7 @@ import {Component, OnDestroy, OnInit, ViewChild,} from '@angular/core'; import {SecurityService} from "../../security/security.service"; import {User} from "../../security/user.model"; -import {UserService} from "../../system-settings/user/user.service"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; -import {UserRo} from "../../system-settings/user/user-ro.model"; import {UserProfilePanelComponent} from "../../common/panels/user-settings-panel/user-profile-panel.component"; import {MatDialog, MatDialogConfig, MatDialogRef} from "@angular/material/dialog"; import { @@ -12,6 +10,8 @@ import { import {SecurityEventService} from "../../security/security-event.service"; import {Subscription} from "rxjs"; import {EntityStatus} from "../../common/enums/entity-status.enum"; +import {UserRo} from "../../common/model/user-ro.model"; +import {UserService} from "../../common/services/user.service"; @Component({ diff --git a/smp-angular/src/app/window/toolbar/toolbar.component.ts b/smp-angular/src/app/window/toolbar/toolbar.component.ts index 1bad501f5796bdbdab4fcf37260b4153e756d105..0fd33932a2e308ad86848efbb8ae46999cec8077 100644 --- a/smp-angular/src/app/window/toolbar/toolbar.component.ts +++ b/smp-angular/src/app/window/toolbar/toolbar.component.ts @@ -4,11 +4,10 @@ import {SecurityService} from '../../security/security.service'; import {Authority} from "../../security/authority.model"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {MatDialog} from "@angular/material/dialog"; -import {UserService} from "../../system-settings/user/user.service"; -import {UserController} from "../../system-settings/user/user-controller"; import {HttpClient} from "@angular/common/http"; import {GlobalLookups} from "../../common/global-lookups"; import {NavigationService} from "../sidenav/navigation-model.service"; +import {UserController} from "../../common/services/user-controller"; /** * Expanded side navigation panel of the DomiSMP. The component shows all tools/pages according to user role and permissions @@ -30,7 +29,6 @@ export class ToolbarComponent { constructor(private alertService: AlertMessageService, private securityService: SecurityService, - private userService: UserService, private navigation: NavigationService, private http: HttpClient, private dialog: MatDialog, diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java index 9cc0a750baaf6d7119a64815c94715da2ac2a68a..d972175a2a2c9a587209b234a88151fc8e6072bb 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java @@ -58,7 +58,6 @@ public class ResourceConstants { public static final String PATH_PARAM_CERT_ALIAS = "cert-alias"; public static final String PATH_PARAM_ENC_CREDENTIAL_ID = "credential-id"; public static final String PATH_PARAM_ENC_MANAGED_USER_ID = "managed-user-id"; - public static final String PATH_PARAM_SRV_GROUP_ID = "service-group-id"; public static final String PATH_PARAM_KEYSTORE_TOKEN = "keystore-token"; public static final String PATH_PARAM_KEYSTORE_TYPE = "keystore-type"; @@ -133,8 +132,6 @@ public class ResourceConstants { public static final String CONTEXT_PATH_PUBLIC_USER = CONTEXT_PATH_PUBLIC + "user"; public static final String CONTEXT_PATH_PUBLIC_TRUSTSTORE = CONTEXT_PATH_PUBLIC + "truststore"; - public static final String CONTEXT_PATH_PUBLIC_SERVICE_GROUP = CONTEXT_PATH_PUBLIC + "service-group"; - public static final String CONTEXT_PATH_PUBLIC_SERVICE_METADATA = CONTEXT_PATH_PUBLIC + "service-metadata"; public static final String CONTEXT_PATH_PUBLIC_SECURITY = CONTEXT_PATH_PUBLIC + "security"; public static final String CONTEXT_PATH_PUBLIC_SECURITY_AUTHENTICATION = CONTEXT_PATH_PUBLIC_SECURITY + "/authentication"; public static final String CONTEXT_PATH_PUBLIC_SECURITY_USER = CONTEXT_PATH_PUBLIC_SECURITY + "/user"; @@ -157,13 +154,9 @@ public class ResourceConstants { public static final String PARAM_PAGINATION_FILTER = "filter"; public static final String PARAM_PAGINATION_ORDER_BY = "orderBy"; public static final String PARAM_PAGINATION_ORDER_TYPE = "orderType"; - public static final String PARAM_NAME_TYPE = "type"; public static final String PARAM_NAME_VERSION = "version"; - - public static final String PARAM_ROLE = "role"; - public static final String PARAM_QUERY_PARTC_ID = "participantIdentifier"; public static final String PARAM_QUERY_PARTC_SCHEME = "participantScheme"; public static final String PARAM_QUERY_DOMAIN_CODE = "domainCode"; diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/TruststoreController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/TruststoreController.java index c574d1a3d0f98fdc5a9f2512fc75f59e0469583e..3039753f7b0552c6b33c8d7810767c932da782ed 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/TruststoreController.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/TruststoreController.java @@ -23,19 +23,20 @@ import eu.europa.ec.edelivery.smp.logging.SMPLogger; import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; import eu.europa.ec.edelivery.smp.services.PayloadValidatorService; import eu.europa.ec.edelivery.smp.services.ui.UITruststoreService; -import eu.europa.ec.edelivery.smp.ui.ResourceConstants; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.MimeTypeUtils; import org.springframework.web.bind.annotation.*; import java.io.ByteArrayInputStream; +import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*; + /** * @author Joze Rihtarsic * @since 4.1 */ @RestController -@RequestMapping(value = ResourceConstants.CONTEXT_PATH_PUBLIC_TRUSTSTORE) +@RequestMapping(value = CONTEXT_PATH_PUBLIC_TRUSTSTORE) public class TruststoreController { private static final SMPLogger LOG = SMPLoggerFactory.getLogger(TruststoreController.class); @@ -50,7 +51,7 @@ public class TruststoreController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId)") @PostMapping(path = "/{user-id}/validate-certificate", consumes = MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) - public CertificateRO validateCertificate(@PathVariable("user-id") String userId, @RequestBody byte[] data) { + public CertificateRO validateCertificate(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @RequestBody byte[] data) { LOG.info("Got certificate data size: {}", data.length); // validate uploaded content payloadValidatorService.validateUploadedContent(new ByteArrayInputStream(data), MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE); diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserController.java index f38cec9eea683aa641303c05eb7176d934bd556d..82bd92d6c7297df86a6fe1ec05968a8201402bc3 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserController.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserController.java @@ -36,8 +36,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; -import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.CONTEXT_PATH_PUBLIC_USER; -import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.PARAM_PAGINATION_FILTER; +import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*; import static eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils.decryptEntityId; /** @@ -61,7 +60,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId)") @PutMapping(path = "/{user-id}/change-password", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) - public boolean changePassword(@PathVariable("user-id") String userId, @RequestBody PasswordChangeRO newPassword, HttpServletRequest request, HttpServletResponse response) { + public boolean changePassword(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @RequestBody PasswordChangeRO newPassword, HttpServletRequest request, HttpServletResponse response) { Long entityId = decryptEntityId(userId); LOG.info("Validating the password of the currently logged in user:[{}] with id:[{}] ", userId, entityId); // when user changing password the current password must be verified even if cas authenticated @@ -75,7 +74,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId)") @GetMapping(path = "/{user-id}/search", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) - public List<SearchUserRO> lookupUsers(@PathVariable("user-id") String userId, + public List<SearchUserRO> lookupUsers(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @RequestParam(value = PARAM_PAGINATION_FILTER, defaultValue = "", required = false) String filter) { Long entityId = decryptEntityId(userId); LOG.info("Validating the password of the currently logged in user:[{}] with id:[{}] ", userId, entityId); @@ -93,7 +92,7 @@ public class UserController { */ @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId)") @PutMapping(path = "/{user-id}") - public UserRO updateCurrentUserProfile(@PathVariable("user-id") String userId, @RequestBody UserRO user) { + public UserRO updateCurrentUserProfile(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @RequestBody UserRO user) { LOG.info("Update current user: {}", user); Long entityId = decryptEntityId(userId); // Update the user and mark the password as changed at this very instant of time @@ -112,7 +111,7 @@ public class UserController { */ @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId)") @GetMapping(path = "/{user-id}/navigation-tree") - public NavigationTreeNodeRO getUserNavigationTree(@PathVariable("user-id") String userId) { + public NavigationTreeNodeRO getUserNavigationTree(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId) { LOG.info("get User Navigation tree for user ID: {}", userId); Long entityId = decryptEntityId(userId); DBUser user = uiUserService.findUser(entityId); @@ -132,7 +131,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId)") @GetMapping(path = "/{user-id}/username-credential-status") - public CredentialRO getUsernameCredentialStatus(@PathVariable("user-id") String userId) { + public CredentialRO getUsernameCredentialStatus(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId) { LOG.debug("Get user credential status for user: [{}]", userId); Long entityId = decryptEntityId(userId); // Update the user and mark the password as changed at this very instant of time @@ -144,7 +143,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @GetMapping(path = "/{user-id}/access-token-credentials") - public List<CredentialRO> getAccessTokenCredentials(@PathVariable("user-id") String encUserId) { + public List<CredentialRO> getAccessTokenCredentials(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId) { LOG.debug("Get access token credential status for user:: [{}]", encUserId); Long userId = decryptEntityId(encUserId); // Update the user and mark the password as changed at this very instant of time @@ -154,7 +153,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @DeleteMapping(path = "/{user-id}/access-token-credential/{credential-id}") - public CredentialRO deleteAccessTokenCredentials(@PathVariable("user-id") String encUserId, + public CredentialRO deleteAccessTokenCredentials(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String encAccessTokenId) { LOG.debug("Delete User [{}] access token credential: [{}]", encUserId, encAccessTokenId); Long userId = decryptEntityId(encUserId); @@ -170,7 +169,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @PostMapping(path = "/{user-id}/access-token-credential/{credential-id}") - public CredentialRO updateAccessTokenCredentials(@PathVariable("user-id") String encUserId, + public CredentialRO updateAccessTokenCredentials(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String encAccessTokenId, @RequestBody CredentialRO credentialRO) { LOG.debug("Update User [{}] access token credential: [{}]", encUserId, encAccessTokenId); @@ -190,7 +189,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @PutMapping(path = "/{user-id}/access-token-credential/{credential-id}") - public AccessTokenRO generateAccessTokenCredential(@PathVariable("user-id") String encUserId, + public AccessTokenRO generateAccessTokenCredential(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String encAccessTokenId, @RequestBody CredentialRO credentialRO) { LOG.debug("Update User [{}] access token credential: [{}]", encUserId, encAccessTokenId); @@ -200,7 +199,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @GetMapping(path = "/{user-id}/certificate-credentials") - public List<CredentialRO> getCertificateCredentials(@PathVariable("user-id") String encUserId) { + public List<CredentialRO> getCertificateCredentials(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId) { LOG.debug("get User credential status: [{}]", encUserId); Long userId = decryptEntityId(encUserId); // Update the user and mark the password as changed at this very instant of time @@ -210,7 +209,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @DeleteMapping(path = "/{user-id}/certificate-credential/{credential-id}") - public CredentialRO deleteCertificateCredential(@PathVariable("user-id") String encUserId, + public CredentialRO deleteCertificateCredential(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String encCredentialId) { LOG.debug("Delete User [{}] access certificate credential: [{}]", encUserId, encCredentialId); Long userId = decryptEntityId(encUserId); @@ -225,7 +224,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @PostMapping(path = "/{user-id}/certificate-credential/{credential-id}") - public CredentialRO updateCertificateCredential(@PathVariable("user-id") String encUserId, + public CredentialRO updateCertificateCredential(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String encCredentialId, @RequestBody CredentialRO credentialRO) { LOG.debug("Update User [{}] access token credential: [{}]", encUserId, encCredentialId); @@ -244,7 +243,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @GetMapping(path = "/{user-id}/certificate-credential/{credential-id}") - public CredentialRO getCertificateCredential(@PathVariable("user-id") String encUserId, + public CredentialRO getCertificateCredential(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String encCredentialId) { LOG.debug("Update User [{}] access token credential: [{}]", encUserId, encCredentialId); Long userId = decryptEntityId(encUserId); @@ -254,7 +253,7 @@ public class UserController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#encUserId)") @PutMapping(path = "/{user-id}/certificate-credential/{credential-id}") - public CredentialRO storeCertificateCredential(@PathVariable("user-id") String encUserId, + public CredentialRO storeCertificateCredential(@PathVariable(PATH_PARAM_ENC_USER_ID) String encUserId, @PathVariable("credential-id") String credentialId, @RequestBody CredentialRO credentialRO) { LOG.debug("Store credential for user [{}] certificate credential: [{}]", encUserId, credentialId); diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/DomainAdminController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/DomainAdminController.java index d6cb4591b225afd2003fa7ff66747cf27da78e0b..1c5cd50a86cc5f133818a35b4c8aa331f99f164f 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/DomainAdminController.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/DomainAdminController.java @@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; -import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.CONTEXT_PATH_INTERNAL_DOMAIN; +import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*; /** * DomainAdminResource provides admin services for managing the domains configured in SMP. The services defined in path @@ -59,16 +59,16 @@ public class DomainAdminController { } - @GetMapping(path = "/{user-enc-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @GetMapping(path = "/{user-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public List<DomainRO> getAllDomainList(@PathVariable("user-enc-id") String userEncId) { + public List<DomainRO> getAllDomainList(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId) { logAdminAccess("getAllDomainList"); return uiDomainService.getAllDomains(); } - @DeleteMapping(path = "/{user-enc-id}/{domain-enc-id}/delete", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @DeleteMapping(path = "/{user-id}/{domain-enc-id}/delete", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public DomainRO deleteDomain(@PathVariable("user-enc-id") String userEncId, + public DomainRO deleteDomain(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @PathVariable("domain-enc-id") String domainEncId) { logAdminAccess("deleteDomain:" + domainEncId); Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId); @@ -78,9 +78,9 @@ public class DomainAdminController { return domainRO; } - @PutMapping(path = "/{user-enc-id}/create", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PutMapping(path = "/{user-id}/create", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public DomainRO createBasicDomainData(@PathVariable("user-enc-id") String userEncId, + public DomainRO createBasicDomainData(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @RequestBody DomainRO domainData) { logAdminAccess("createBasicDomainData" ); @@ -90,9 +90,9 @@ public class DomainAdminController { domainRO.setStatus(EntityROStatus.NEW.getStatusNumber()); return domainRO; } - @PostMapping(path = "/{user-enc-id}/{domain-enc-id}/update", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PostMapping(path = "/{user-id}/{domain-enc-id}/update", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public DomainRO updateBasicDomainData(@PathVariable("user-enc-id") String userEncId, + public DomainRO updateBasicDomainData(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @PathVariable("domain-enc-id") String domainEncId, @RequestBody DomainRO domainData) { logAdminAccess("updateBasicDomainData:" + domainEncId); @@ -106,9 +106,9 @@ public class DomainAdminController { return domainRO; } - @PostMapping(path = "/{user-enc-id}/{domain-enc-id}/update-resource-types", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PostMapping(path = "/{user-id}/{domain-enc-id}/update-resource-types", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public DomainRO updateResourceDefDomainList(@PathVariable("user-enc-id") String userEncId, + public DomainRO updateResourceDefDomainList(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @PathVariable("domain-enc-id") String domainEncId, @RequestBody List<String> resourceDefs) { logAdminAccess("updateResourceDefDomainList:" + domainEncId); @@ -121,9 +121,9 @@ public class DomainAdminController { return domainRO; } - @PostMapping(path = "/{user-enc-id}/{domain-enc-id}/update-sml-integration-data", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PostMapping(path = "/{user-id}/{domain-enc-id}/update-sml-integration-data", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public DomainRO updateSmlIntegrationData(@PathVariable("user-enc-id") String userEncId, + public DomainRO updateSmlIntegrationData(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @PathVariable("domain-enc-id") String domainEncId, @RequestBody DomainRO domainData) { logAdminAccess("updateSmlIntegrationData:" + domainEncId); @@ -138,7 +138,7 @@ public class DomainAdminController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId) and @smpAuthorizationService.systemAdministrator") @PutMapping(value = "/{user-id}/sml-register/{domain-code}") - public SMLIntegrationResult registerDomainAndParticipants(@PathVariable("user-id") String userId, + public SMLIntegrationResult registerDomainAndParticipants(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @PathVariable("domain-code") String domainCode ) { LOG.info("SML register domain code: {}, user user-id {}", domainCode, userId); @@ -157,7 +157,7 @@ public class DomainAdminController { @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId) and @smpAuthorizationService.systemAdministrator") @PutMapping(value = "/{user-id}/sml-unregister/{domain-code}") - public SMLIntegrationResult unregisterDomainAndParticipants(@PathVariable("user-id") String userId, + public SMLIntegrationResult unregisterDomainAndParticipants(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @PathVariable("domain-code") String domainCode) { LOG.info("SML unregister domain code: {}, user id {}", domainCode, userId); // try to open keystore diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/KeystoreAdminController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/KeystoreAdminController.java index 384beee4529829fc849764ac149020845732b37f..a973ee80e5f4d63693e5502d1c6bccca97e79578 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/KeystoreAdminController.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/KeystoreAdminController.java @@ -8,9 +8,9 @@ * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: - * + * * [PROJECT_HOME]\license\eupl-1.2\license.txt or https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and limitations under the Licence. @@ -40,7 +40,7 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.List; -import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.CONTEXT_PATH_INTERNAL_KEYSTORE; +import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*; import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; import static org.springframework.util.MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE; @@ -64,12 +64,12 @@ public class KeystoreAdminController { @GetMapping(path = "/{user-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId) and @smpAuthorizationService.isSystemAdministrator") - public List<CertificateRO> getSystemKeystoreCertificates(@PathVariable("user-id") String userId) { + public List<CertificateRO> getSystemKeystoreCertificates(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId) { logAdminAccess("getSystemKeystoreCertificates"); List<CertificateRO> keystoreEntriesList = uiKeystoreService.getKeystoreEntriesList(); // clear encoded value to reduce http traffic - keystoreEntriesList.stream().forEach(certificateRO -> { + keystoreEntriesList.forEach(certificateRO -> { certificateRO.setEncodedValue(null); certificateRO.setStatus(EntityROStatus.PERSISTED.getStatusNumber()); }); @@ -77,8 +77,8 @@ public class KeystoreAdminController { } @PreAuthorize("@smpAuthorizationService.systemAdministrator AND @smpAuthorizationService.isCurrentlyLoggedIn(#userEncId)") - @PostMapping(path = "/{user-enc-id}/upload/{keystoreType}/{password}", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_OCTET_STREAM_VALUE) - public KeystoreImportResult uploadKeystore(@PathVariable("user-enc-id") String userEncId, + @PostMapping(path = "/{user-id}/upload/{keystoreType}/{password}", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_OCTET_STREAM_VALUE) + public KeystoreImportResult uploadKeystore(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @PathVariable("keystoreType") String keystoreType, @PathVariable("password") String password, @RequestBody byte[] fileBytes) { @@ -103,9 +103,9 @@ public class KeystoreAdminController { } @PreAuthorize("@smpAuthorizationService.systemAdministrator AND @smpAuthorizationService.isCurrentlyLoggedIn(#userEncId)") - @DeleteMapping(value = "/{user-enc-id}/delete/{alias}", produces = APPLICATION_JSON_VALUE) - public CertificateRO deleteCertificate(@PathVariable("user-enc-id") String userEncId, - @PathVariable("alias") String alias) { + @DeleteMapping(value = "/{user-id}/delete/{cert-alias}", produces = APPLICATION_JSON_VALUE) + public CertificateRO deleteCertificate(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, + @PathVariable(PATH_PARAM_CERT_ALIAS) String alias) { LOG.info("Remove alias by user id {}, alias {}.", userEncId, alias); CertificateRO response; try { diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java index fc9b528ee6d093814da0713c54c02cc42d5de3c0..81c8cb446d0a5aeff9dfac65e03c3c6c7d2326de 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java @@ -26,7 +26,6 @@ import eu.europa.ec.edelivery.smp.logging.SMPLogger; import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; import eu.europa.ec.edelivery.smp.services.PayloadValidatorService; import eu.europa.ec.edelivery.smp.services.ui.UITruststoreService; -import eu.europa.ec.edelivery.smp.ui.ResourceConstants; import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.MimeTypeUtils; @@ -40,12 +39,14 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.List; +import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*; + /** * @author Joze Rihtarsic * @since 4.1 */ @RestController -@RequestMapping(value = ResourceConstants.CONTEXT_PATH_INTERNAL_TRUSTSTORE) +@RequestMapping(value = CONTEXT_PATH_INTERNAL_TRUSTSTORE) public class TruststoreAdminController { private static final SMPLogger LOG = SMPLoggerFactory.getLogger(TruststoreAdminController.class); @@ -61,12 +62,12 @@ public class TruststoreAdminController { @GetMapping(path = "/{user-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId) and @smpAuthorizationService.isSystemAdministrator") - public List<CertificateRO> getSystemTruststoreCertificates(@PathVariable("user-id") String userId) { + public List<CertificateRO> getSystemTruststoreCertificates(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId) { logAdminAccess("getSystemTruststoreCertificates"); List<CertificateRO> truststoreEntriesList = uiTruststoreService.getCertificateROEntriesList(); // clear encoded value to reduce http traffic - truststoreEntriesList.stream().forEach(certificateRO -> { + truststoreEntriesList.forEach(certificateRO -> { certificateRO.setEncodedValue(null); certificateRO.setStatus(EntityROStatus.PERSISTED.getStatusNumber()); }); @@ -75,7 +76,7 @@ public class TruststoreAdminController { @PostMapping(value = "/{user-id}/upload-certificate", consumes = MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userId) and @smpAuthorizationService.isSystemAdministrator") - public CertificateRO uploadCertificate(@PathVariable("user-id") String userId, + public CertificateRO uploadCertificate(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @RequestBody byte[] fileBytes) { LOG.info("Got certificate cert size: {}", fileBytes.length); diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminController.java index f199bb66f45bde49f19fed19bd5d71fb54b96eeb..eead0c772db16ce42a9f9351581b95053269c101 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminController.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminController.java @@ -78,10 +78,10 @@ public class UserAdminController { return uiUserService.getTableList(page, pageSize, orderBy, orderType, filter); } - @GetMapping(path = "/{user-enc-id}/search", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @GetMapping(path = "/{user-id}/search", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") public ServiceResult<SearchUserRO> searchUsers( - @PathVariable("user-enc-id") String userEncId, + @PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @RequestParam(value = PARAM_PAGINATION_PAGE, defaultValue = "0") int page, @RequestParam(value = PARAM_PAGINATION_PAGE_SIZE, defaultValue = "10") int pageSize, @RequestParam(value = PARAM_PAGINATION_FILTER, defaultValue = "", required = false) String filter) { @@ -90,18 +90,18 @@ public class UserAdminController { return uiUserService.searchUsers(page, pageSize, filter); } - @GetMapping(path = "/{user-enc-id}/{managed-user-enc-id}/retrieve", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @GetMapping(path = "/{user-id}/{managed-user-id}/retrieve", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public UserRO getUserData(@PathVariable("user-enc-id") String userEncId, - @PathVariable("managed-user-enc-id") String managedUserEncId) { + public UserRO getUserData(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, + @PathVariable("managed-user-id") String managedUserEncId) { Long managedUserId = decryptEntityId(managedUserEncId); return uiUserService.getUserById(managedUserId); } - @PostMapping(path = "/{user-enc-id}/{managed-user-enc-id}/update", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PostMapping(path = "/{user-id}/{managed-user-id}/update", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public UserRO updateUser(@PathVariable("user-enc-id") String userEncId, - @PathVariable("managed-user-enc-id") String managedUserEncId, + public UserRO updateUser(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, + @PathVariable("managed-user-id") String managedUserEncId, @RequestBody UserRO user) { Long userId = decryptEntityId(userEncId); @@ -116,10 +116,10 @@ public class UserAdminController { } - @DeleteMapping(path = "/{user-enc-id}/{managed-user-enc-id}/delete", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @DeleteMapping(path = "/{user-id}/{managed-user-id}/delete", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public UserRO deleteUser(@PathVariable("user-enc-id") String userEncId, - @PathVariable("managed-user-enc-id") String managedUserEncId) { + public UserRO deleteUser(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, + @PathVariable("managed-user-id") String managedUserEncId) { Long userId = decryptEntityId(userEncId); Long managedUserId = decryptEntityId(managedUserEncId); @@ -130,13 +130,13 @@ public class UserAdminController { return authorizationService.sanitize(deleted); } - @PutMapping(path = "/{user-enc-id}/create", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PutMapping(path = "/{user-id}/create", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isSystemAdministrator") - public UserRO createUser(@PathVariable("user-enc-id") String userEncId, + public UserRO createUser(@PathVariable(PATH_PARAM_ENC_USER_ID) String userEncId, @RequestBody UserRO user) { Long userId = decryptEntityId(userEncId); - LOG.info("createUserData adminId: [{}], managedUserId: [{}]", userId); + LOG.info("createUserData adminId: [{}], managedUser: [{}]", userId, user); // Update the user and mark the password as changed at this very instant of time return uiUserService.adminCreateUserData(user); } @@ -158,7 +158,7 @@ public class UserAdminController { @PutMapping(path = "/{user-id}/change-password-for/{update-user-id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) @Secured({SMPAuthority.S_AUTHORITY_TOKEN_SYSTEM_ADMIN}) - public UserRO changePassword(@PathVariable("user-id") String userId, + public UserRO changePassword(@PathVariable(PATH_PARAM_ENC_USER_ID) String userId, @PathVariable("update-user-id") String regenerateForUserId, @RequestBody PasswordChangeRO newPassword) { Long authorizedUserId = decryptEntityId(userId); diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIT.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIT.java index a897297a82b7ae14574e6936d0ecd289464c5a2b..bf582b06a3d2d0f2ea14c3021e407c602fe18ea2 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIT.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIT.java @@ -37,7 +37,7 @@ import java.util.UUID; import static eu.europa.ec.edelivery.smp.test.testutils.MockMvcUtils.*; import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.PARAM_PAGINATION_FILTER; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -74,7 +74,7 @@ public class UserAdminControllerIT extends AbstractControllerTest { public void testSearch() throws Exception { MockHttpSession session = loginWithSystemAdmin(mvc); UserRO userROAdmin = getLoggedUserData(mvc, session); - MvcResult result = mvc.perform(get(PATH_INTERNAL + "/{user-enc-id}/search", userROAdmin.getUserId()) + MvcResult result = mvc.perform(get(PATH_INTERNAL + "/{user-id}/search", userROAdmin.getUserId()) .session(session) .with(csrf())) .andExpect(status().isOk()).andReturn(); @@ -93,7 +93,7 @@ public class UserAdminControllerIT extends AbstractControllerTest { public void testSearchFilterNoMatch() throws Exception { MockHttpSession session = loginWithSystemAdmin(mvc); UserRO userROAdmin = getLoggedUserData(mvc, session); - MvcResult result = mvc.perform(get(PATH_INTERNAL + "/{user-enc-id}/search", userROAdmin.getUserId()) + MvcResult result = mvc.perform(get(PATH_INTERNAL + "/{user-id}/search", userROAdmin.getUserId()) .session(session) .param(PARAM_PAGINATION_FILTER, "no-user-matches-this-filter") .with(csrf()))