diff --git a/pom.xml b/pom.xml index c6052d9c9a81a81ebdb08110ce4298a623ad8264..e27acb17c4c95fccc5c88b970e019ffa47f7dce8 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,6 @@ <modules> <module>smp-angular</module> - <module>smp-api</module> <module>smp-spi</module> <module>smp-server-library</module> <module>smp-resource-extensions</module> @@ -140,11 +139,11 @@ <pluginRepositories> <pluginRepository> <id>SmartBearPluginRepository</id> - <url>http://www.soapui.org/repository/maven2/</url> + <url>https://www.soapui.org/repository/maven2/</url> </pluginRepository> <pluginRepository> <id>eviwarePluginRepository</id> - <url>http://www.eviware.com/repository/maven2/</url> + <url>https://www.eviware.com/repository/maven2/</url> </pluginRepository> </pluginRepositories> diff --git a/smp-angular/src/app/app.module.ts b/smp-angular/src/app/app.module.ts index 5e24bfaa1cfe54d58b85ded644d2816582826089..77c1b3578aeae5902a8be569c9249f0fcdd149f3 100644 --- a/smp-angular/src/app/app.module.ts +++ b/smp-angular/src/app/app.module.ts @@ -46,7 +46,7 @@ import {ExtensionComponent} from "./system-settings/admin-extension/extension.co import {ExtensionPanelComponent} from "./system-settings/admin-extension/extension-panel/extension-panel.component"; import {ExtensionService} from "./system-settings/admin-extension/extension.service"; import {FlexLayoutModule} from '@angular/flex-layout'; -import {FooterComponent} from './footer/footer.component'; +import {FooterComponent} from './window/footer/footer.component'; import {FormsModule, ReactiveFormsModule} from '@angular/forms'; import {GlobalLookups} from './common/global-lookups'; import {HttpClient, HttpClientModule, HttpClientXsrfModule} from '@angular/common/http'; @@ -101,8 +101,8 @@ import {ServiceMetadataWizardDialogComponent} from './service-group-edit/service 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/spacer/spacer.component"; -import {SpinnerComponent} from './common/spinner/spinner.component'; +import {SpacerComponent} from "./common/components/spacer/spacer.component"; +import {SpinnerComponent} from './common/components/spinner/spinner.component'; import {ThemeService} from "./common/theme-service/theme.service"; import {ToolbarComponent} from "./window/toolbar/toolbar.component"; import {UserAccessTokensComponent} from "./user-settings/user-access-tokens/user-access-tokens.component"; @@ -127,12 +127,12 @@ import { } from "@angular-material-components/moment-adapter"; import { DomainMemberPanelComponent -} from "./system-settings/admin-domain/domain-member-panel/domain-member-panel.component"; +} from "./common/panels/domain-member-panel/domain-member-panel.component"; import { MemberDialogComponent -} from "./system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component"; +} from "./common/panels/domain-member-panel/member-dialog/member-dialog.component"; import {MatAutocompleteModule} from "@angular/material/autocomplete"; -import {MembershipService} from "./system-settings/admin-domain/domain-member-panel/membership.service"; +import {MembershipService} from "./common/panels/domain-member-panel/membership.service"; import {AdminUserComponent} from "./system-settings/admin-users/admin-user.component"; import {AdminUserService} from "./system-settings/admin-users/admin-user.service"; import { @@ -141,6 +141,7 @@ import { import {EditDomainComponent} from "./edit/edit-domain/edit-domain.component"; import {EditDomainService} from "./edit/edit-domain/edit-domain.service"; import {SmpFieldErrorComponent} from "./common/components/smp-field-error/smp-field-error.component"; +import {DomainGroupComponent} from "./edit/edit-domain/domain-group-panel/domain-group.component"; @NgModule({ @@ -173,6 +174,7 @@ import {SmpFieldErrorComponent} from "./common/components/smp-field-error/smp-fi DomainPanelComponent, DomainSmlIntegrationPanelComponent, DomainDetailsDialogComponent, + DomainGroupComponent, DomainMemberPanelComponent, DomainResourceTypePanelComponent, DomainSelectorComponent, diff --git a/smp-angular/src/app/common/spacer/spacer.component.ts b/smp-angular/src/app/common/components/spacer/spacer.component.ts similarity index 100% rename from smp-angular/src/app/common/spacer/spacer.component.ts rename to smp-angular/src/app/common/components/spacer/spacer.component.ts diff --git a/smp-angular/src/app/common/spinner/spinner.component.ts b/smp-angular/src/app/common/components/spinner/spinner.component.ts similarity index 100% rename from smp-angular/src/app/common/spinner/spinner.component.ts rename to smp-angular/src/app/common/components/spinner/spinner.component.ts diff --git a/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts b/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts index afb3f4f785928f14e2dba1467275143525e6b801..a1d14ea1918d66e92ab9ae2e38076053f354cf4e 100644 --- a/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts +++ b/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts @@ -7,7 +7,7 @@ import {UserDetailsService} from "../../../system-settings/user/user-details-dia import {AccessTokenRo} from "./access-token-ro.model"; import {SecurityService} from "../../../security/security.service"; import {SmpConstants} from "../../../smp.constants"; -import {EntityStatus} from "../../model/entity-status.model"; +import {EntityStatus} from "../../enums/entity-status.enum"; @Component({ selector: 'smp-access-token-generation-dialog', diff --git a/smp-angular/src/app/common/model/entity-status.model.ts b/smp-angular/src/app/common/enums/entity-status.enum.ts similarity index 100% rename from smp-angular/src/app/common/model/entity-status.model.ts rename to smp-angular/src/app/common/enums/entity-status.enum.ts diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-ro.model.ts b/smp-angular/src/app/common/model/domain-ro.model.ts similarity index 74% rename from smp-angular/src/app/system-settings/admin-domain/domain-ro.model.ts rename to smp-angular/src/app/common/model/domain-ro.model.ts index f80a78cf64614ad3766c8950cb34821a7ca6af67..8b2193d866c8a4fae6b1b6b254b2e98ad5acf834 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-ro.model.ts +++ b/smp-angular/src/app/common/model/domain-ro.model.ts @@ -1,5 +1,5 @@ -import {SearchTableEntity} from '../../common/search-table/search-table-entity.model'; -import {VisibilityEnum} from "../../common/enums/visibility.enum"; +import {SearchTableEntity} from '../search-table/search-table-entity.model'; +import {VisibilityEnum} from "../enums/visibility.enum"; export interface DomainRo extends SearchTableEntity { domainId?: string; diff --git a/smp-angular/src/app/common/model/group-ro.model.ts b/smp-angular/src/app/common/model/group-ro.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..d17f8729281d25965cf5f882029cc0fd82a33767 --- /dev/null +++ b/smp-angular/src/app/common/model/group-ro.model.ts @@ -0,0 +1,13 @@ + +import {MembershipRoleEnum} from "../enums/membership-role.enum"; +import {SearchTableEntity} from "../search-table/search-table-entity.model"; +import {MemberTypeEnum} from "../enums/member-type.enum"; +import {VisibilityEnum} from "../enums/visibility.enum"; + +export interface GroupRo extends SearchTableEntity { + + groupId?: string; + groupName: string; + groupDescription?: string; + visibility: VisibilityEnum; +} diff --git a/smp-angular/src/app/common/model/member-ro.model.ts b/smp-angular/src/app/common/model/member-ro.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..618e326fcbab2302486f00f6d78e261b6cac3c89 --- /dev/null +++ b/smp-angular/src/app/common/model/member-ro.model.ts @@ -0,0 +1,13 @@ + +import {MembershipRoleEnum} from "../enums/membership-role.enum"; +import {SearchTableEntity} from "../search-table/search-table-entity.model"; +import {MemberTypeEnum} from "../enums/member-type.enum"; + +export interface MemberRo extends SearchTableEntity { + + memberId:string; + username:string; + memberOf:MemberTypeEnum; + fullName:string; + roleType:MembershipRoleEnum; +} diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/table-result.model.ts b/smp-angular/src/app/common/model/table-result.model.ts similarity index 100% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/table-result.model.ts rename to smp-angular/src/app/common/model/table-result.model.ts diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.html b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.html similarity index 100% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.html rename to smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.html diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.scss b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.scss similarity index 100% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.scss rename to smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.scss diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.ts b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.ts similarity index 88% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.ts rename to smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.ts index b085e301db45babf3ea7dcce2a4f7c8b748a3e0e..9b22863f6d95d6f22046eefd884d5e3e799876f4 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.ts +++ b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.ts @@ -1,18 +1,18 @@ import {Component, EventEmitter, Input, Output, ViewChild,} from '@angular/core'; -import {DomainRo} from "../domain-ro.model"; +import {DomainRo} from "../../model/domain-ro.model"; import {FormBuilder, FormControl, FormGroup} from "@angular/forms"; -import {AdminDomainService} from "../admin-domain.service"; -import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; +import {AdminDomainService} from "../../../system-settings/admin-domain/admin-domain.service"; +import {AlertMessageService} from "../../alert-message/alert-message.service"; import {MatDialog} from "@angular/material/dialog"; import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard"; import {MatPaginator, PageEvent} from "@angular/material/paginator"; -import {MemberRo} from "./member-ro.model"; +import {MemberRo} from "../../model/member-ro.model"; import {finalize} from "rxjs/operators"; -import {TableResult} from "./table-result.model"; +import {TableResult} from "../../model/table-result.model"; import {MemberDialogComponent} from "./member-dialog/member-dialog.component"; import {MembershipService} from "./membership.service"; -import {MembershipRoleEnum} from "../../../common/enums/membership-role.enum"; -import {MemberTypeEnum} from "../../../common/enums/member-type.enum"; +import {MembershipRoleEnum} from "../../enums/membership-role.enum"; +import {MemberTypeEnum} from "../../enums/member-type.enum"; @Component({ @@ -21,10 +21,8 @@ import {MemberTypeEnum} from "../../../common/enums/member-type.enum"; styleUrls: ['./domain-member-panel.component.scss'] }) export class DomainMemberPanelComponent implements BeforeLeaveGuard { - @Output() onSaveSmlIntegrationDataEvent: EventEmitter<DomainRo> = new EventEmitter(); - private _domain: DomainRo; - + private _domain: DomainRo; domainForm: FormGroup; displayedColumns: string[] = ['username', 'fullName', 'roleType', 'memberOf']; @@ -163,6 +161,7 @@ export class DomainMemberPanelComponent implements BeforeLeaveGuard { get domainNotSelected() { return !this._domain } + } diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.css b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.css similarity index 100% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.css rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.css diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.html b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.html similarity index 100% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.html rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.html diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.ts b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.ts similarity index 92% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.ts rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.ts index eafbf60c88b688fc782769f32710c4dd11a2ec69..e7fa0916ff7196716aca1096a69ae411e797d358 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.ts +++ b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.ts @@ -1,14 +1,14 @@ import {Component, Inject, Input, OnInit} from '@angular/core'; import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; import {FormBuilder, FormControl, FormGroup} from "@angular/forms"; -import {MembershipRoleEnum} from "../../../../common/enums/membership-role.enum"; +import {MembershipRoleEnum} from "../../../enums/membership-role.enum"; import {Observable} from "rxjs"; import {SearchUserRo} from "./search-user-ro.model"; import {MembershipService} from "../membership.service"; -import {MemberRo} from "../member-ro.model"; -import {DomainRo} from "../../domain-ro.model"; -import {MemberTypeEnum} from "../../../../common/enums/member-type.enum"; -import {AlertMessageService} from "../../../../common/alert-message/alert-message.service"; +import {MemberRo} from "../../../model/member-ro.model"; +import {DomainRo} from "../../../model/domain-ro.model"; +import {MemberTypeEnum} from "../../../enums/member-type.enum"; +import {AlertMessageService} from "../../../alert-message/alert-message.service"; @Component({ diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/search-user-ro.model.ts b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/search-user-ro.model.ts similarity index 56% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/search-user-ro.model.ts rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/search-user-ro.model.ts index 84ff26cd3fd362fee3e348aa14841c4dfbbf1804..4b96bc26228ac850015a897dfb4f64c81328b1dc 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/search-user-ro.model.ts +++ b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/search-user-ro.model.ts @@ -1,4 +1,4 @@ -import {SearchTableEntity} from "../../../../common/search-table/search-table-entity.model"; +import {SearchTableEntity} from "../../../search-table/search-table-entity.model"; export interface SearchUserRo extends SearchTableEntity { userId: string, diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/membership.service.ts b/smp-angular/src/app/common/panels/domain-member-panel/membership.service.ts similarity index 88% rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/membership.service.ts rename to smp-angular/src/app/common/panels/domain-member-panel/membership.service.ts index 17a8531d0e776147e81f8117e3590d7738470276..ba50f8dd3672aa69cf0494b60850dc16ff6aeb41 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/membership.service.ts +++ b/smp-angular/src/app/common/panels/domain-member-panel/membership.service.ts @@ -1,15 +1,15 @@ import {Injectable} from '@angular/core'; import {Observable} from 'rxjs'; -import {SearchTableResult} from "../../../common/search-table/search-table-result.model"; +import {SearchTableResult} from "../../search-table/search-table-result.model"; import {User} from "../../../security/user.model"; import {HttpClient, HttpParams} from "@angular/common/http"; import {SmpConstants} from "../../../smp.constants"; import {SecurityService} from "../../../security/security.service"; -import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; -import {MemberRo} from "./member-ro.model"; -import {TableResult} from "./table-result.model"; +import {AlertMessageService} from "../../alert-message/alert-message.service"; +import {MemberRo} from "../../model/member-ro.model"; +import {TableResult} from "../../model/table-result.model"; import {SearchUserRo} from "./member-dialog/search-user-ro.model"; -import {MembershipRoleEnum} from "../../../common/enums/membership-role.enum"; +import {MembershipRoleEnum} from "../../enums/membership-role.enum"; @Injectable() diff --git a/smp-angular/src/app/common/search-table/search-table-entity.model.ts b/smp-angular/src/app/common/search-table/search-table-entity.model.ts index 7f1d89cbdcec3fcb69144b5b7bd1e99bd4d62781..92b09f28fa73142c74541133385c46fc7718c0c2 100644 --- a/smp-angular/src/app/common/search-table/search-table-entity.model.ts +++ b/smp-angular/src/app/common/search-table/search-table-entity.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from '../model/entity-status.model'; +import {EntityStatus} from '../enums/entity-status.enum'; export interface SearchTableEntity { id?: number; diff --git a/smp-angular/src/app/common/search-table/search-table.component.ts b/smp-angular/src/app/common/search-table/search-table.component.ts index 53451841dabfcb0fffb678433a6823056dbf5b63..b1d76afab9c262579ddc33983f652b1a6337b606 100644 --- a/smp-angular/src/app/common/search-table/search-table.component.ts +++ b/smp-angular/src/app/common/search-table/search-table.component.ts @@ -8,7 +8,7 @@ import {RowLimiter} from '../row-limiter/row-limiter.model'; import {SearchTableController} from './search-table-controller'; import {finalize} from 'rxjs/operators'; import {SearchTableEntity} from './search-table-entity.model'; -import {EntityStatus} from '../model/entity-status.model'; +import {EntityStatus} from '../enums/entity-status.enum'; import {CancelDialogComponent} from '../dialogs/cancel-dialog/cancel-dialog.component'; import {SaveDialogComponent} from '../dialogs/save-dialog/save-dialog.component'; import {DownloadService} from '../../download/download.service'; diff --git a/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.html b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.html new file mode 100644 index 0000000000000000000000000000000000000000..bb6abd3c1068032a45e18094a4233d86387a6628 --- /dev/null +++ b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.html @@ -0,0 +1,80 @@ + <div id="domain-group-panel" class="mat-elevation-z2"> + <mat-toolbar> + <mat-toolbar-row> + <button id="createButton" mat-raised-button (click)="onAddButtonClicked()" color="primary" + [disabled]="domainNotSelected" + > + <mat-icon>add</mat-icon> + <span>Create group</span> + </button> + <button id="editButton" mat-raised-button (click)="onEditSelectedButtonClicked()" color="primary" + [disabled]="!groupSelected"> + <mat-icon>edit</mat-icon> + <span>Edit selected member</span> + </button> + <button id="deleteButton" mat-raised-button (click)="onDeleteSelectedButtonClicked()" color="primary" + [disabled]="!groupSelected"> + <mat-icon>delete</mat-icon> + <span>Delete selected group</span> + </button> + </mat-toolbar-row> + </mat-toolbar> + <h3>Domain members</h3> + <div class="group-container mat-elevation-z2"> + <div class="group-loading-shade" + *ngIf="isLoadingResults"> + <mat-spinner *ngIf="isLoadingResults"></mat-spinner> + </div> + + <div class="group-table-container"> + + <mat-form-field id="group-filter" > + <mat-label>Member filter</mat-label> + <input matInput (keyup)="applyGroupFilter($event)" + placeholder="Member filter" + [disabled]="domainNotSelected" + #inputDomainMemberFilter> + </mat-form-field> + + <table class="mat-elevation-z2" mat-table [dataSource]="dataSource"> + + <ng-container matColumnDef="groupName"> + <th mat-header-cell *matHeaderCellDef>Group name</th> + <td mat-cell *matCellDef="let row">{{row.groupName}}</td> + </ng-container> + + <ng-container matColumnDef="visibility"> + <th mat-header-cell *matHeaderCellDef>Visibility</th> + <td mat-cell *matCellDef="let row">{{row.visibility}}</td> + </ng-container> + + <ng-container matColumnDef="groupDescription"> + <th mat-header-cell *matHeaderCellDef>Description</th> + <td mat-cell *matCellDef="let row">{{row.groupDescription}}</td> + </ng-container> + + <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> + <tr mat-row *matRowDef="let odd = odd; let row; columns: displayedColumns;" + (click)="onGroupSelected(row)" + [ngClass]="{'datatable-row-selected': row==selectedGroup,'datatable-row-odd': odd}" + ></tr> + + <tr class="mat-row" *matNoDataRow> + <td *ngIf="inputDomainMemberFilter.value;else noDataFound" class="mat-cell" colspan="2">No direct members matching the filter + "{{inputDomainMemberFilter.value}}" + </td> + <ng-template #noDataFound> + <td class="mat-cell" colspan="2">No direct members for the domain</td> + </ng-template> + </tr> + </table> + </div> + + <mat-paginator [pageSize]="5" + [pageSizeOptions]="[5, 10, 25]" + [disabled]="domainNotSelected" + aria-label="Select pages"></mat-paginator> + </div> + + </div> + diff --git a/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.scss b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..1942ccc03d0177684278ed8f0cb0f6f31052b145 --- /dev/null +++ b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.scss @@ -0,0 +1,20 @@ +#domain-group-panel { + padding: 1em; +} +group-loading-shade { + position: absolute; + top: 0; + left: 0; + bottom: 56px; + right: 0; + background: rgba(0, 0, 0, 0.15); + z-index: 1; + display: flex; + align-items: center; + justify-content: center; +} + +#group-filter { + width: 100%; + padding-top: 1em; +} diff --git a/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.ts b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..5c9e1589681699170e4982ab30d1ac3ba666c267 --- /dev/null +++ b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.ts @@ -0,0 +1,132 @@ +import {Component, Input,} from '@angular/core'; +import {FormBuilder} from "@angular/forms"; +import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; +import {MatDialog} from "@angular/material/dialog"; +import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard"; +import {DomainRo} from "../../../common/model/domain-ro.model"; +import {finalize} from "rxjs/operators"; +import {MatTableDataSource} from "@angular/material/table"; +import {GroupRo} from "../../../common/model/group-ro.model"; +import {EditDomainService} from "../edit-domain.service"; + +@Component({ + selector: 'domain-group-panel', + templateUrl: './domain-group.component.html', + styleUrls: ['./domain-group.component.scss'] +}) +export class DomainGroupComponent implements BeforeLeaveGuard { + + + private _domain: DomainRo; + + filter: any = {}; + resultsLength = 0; + isLoadingResults = false; + + displayedColumns: string[] = ['groupName', 'visibility', 'groupDescription']; + dataSource: MatTableDataSource<GroupRo> = new MatTableDataSource(); + + selectedGroup: GroupRo; + + constructor(private editDomainService: EditDomainService, + private alertService: AlertMessageService, + private dialog: MatDialog, + private formBuilder: FormBuilder) { + } + + ngOnInit(): void { + // filter predicate for search the domain + this.dataSource.filterPredicate = + (data: GroupRo, filter: string) => { + return !filter || -1 != data.groupName.toLowerCase().indexOf(filter.trim().toLowerCase()) + }; + } + + get domain(): DomainRo { + // no changes for the domain data + return this._domain; + } + + @Input() set domain(value: DomainRo) { + this._domain = value; + + if (!!value) { + this.loadTableData(); + } else { + this.isLoadingResults = false; + } + } + + loadTableData() { + if (!this._domain) { + this.dataSource.data = null; + return; + } + this.isLoadingResults = true; + this.editDomainService.getDomainGroupsObservable(this._domain.domainId) + .pipe( + finalize(() => { + this.isLoadingResults = false; + })) + .subscribe((result: GroupRo[]) => { + this.dataSource.data = result; + this.isLoadingResults = false; + }, (error) => { + this.alertService.error(error.error?.errorDescription) + } + ); + } + + + isDirty(): boolean { + return false; + } + + onAddButtonClicked() { + }; + + onEditSelectedButtonClicked() { + }; + + onDeleteSelectedButtonClicked() { + if (!this._domain || !this._domain.domainId) { + return; + } + if (!this.selectedGroup || !this.selectedGroup.groupId) { + return; + } + + this.editDomainService.deleteDomainGroupObservable(this._domain.domainId, this.selectedGroup.groupId).subscribe((result: GroupRo) => { + if (result) { + this.alertService.success("Domain group [" + result.groupName + "] deleted"); + } + }, (error) => { + this.alertService.error(error.error?.errorDescription) + } + ) + }; + + onGroupSelected(group: GroupRo) { + this.selectedGroup = group; + } + + + get groupSelected(): boolean { + return !!this.selectedGroup; + } + + get domainNotSelected() { + return !this._domain + } + + applyGroupFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + this.dataSource.filter = filterValue.trim().toLowerCase(); + + if (this.dataSource.paginator) { + this.dataSource.paginator.firstPage(); + } + + } + +} diff --git a/smp-angular/src/app/edit/edit-domain/edit-domain.component.html b/smp-angular/src/app/edit/edit-domain/edit-domain.component.html index 0dfc79ad725d11536a3c2d890b28644c63a1da14..9c6e21dc2a13ed8d166c203d790b4b2f99ee4aeb 100644 --- a/smp-angular/src/app/edit/edit-domain/edit-domain.component.html +++ b/smp-angular/src/app/edit/edit-domain/edit-domain.component.html @@ -6,12 +6,16 @@ <mat-tab-group #domainTabs style="height: 100%" > - <mat-tab label="Members"> <domain-member-panel #domainMemberPanelComponent [domain]="selected" ></domain-member-panel> </mat-tab> + <mat-tab label="Group"> + <domain-group-panel #domainGroupPanelComponent + [domain]="selected" + ></domain-group-panel> + </mat-tab> </mat-tab-group> </data-panel> </div> diff --git a/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts b/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts index 9a13c49003b3d70cfc5a785a717f95e1a7705da3..97b3c37b38396648a425d0da61a101d94e5e5510 100644 --- a/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts +++ b/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts @@ -4,7 +4,7 @@ import {EditDomainService} from "./edit-domain.service"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {MatDialog} from "@angular/material/dialog"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; -import {DomainRo} from "../../system-settings/admin-domain/domain-ro.model"; +import {DomainRo} from "../../common/model/domain-ro.model"; import {CancelDialogComponent} from "../../common/dialogs/cancel-dialog/cancel-dialog.component"; import {MatPaginator} from "@angular/material/paginator"; import {MatSort} from "@angular/material/sort"; diff --git a/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts b/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts index 58d2b7907fc3c661bc5dafdfa9fe3cbd4f5b8aa5..2cfb18dc38cc657ed04f14dfac89271b59a27222 100644 --- a/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts +++ b/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts @@ -6,7 +6,8 @@ import {SecurityService} from "../../security/security.service"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {User} from "../../security/user.model"; import {SmpConstants} from "../../smp.constants"; -import {DomainRo} from "../../system-settings/admin-domain/domain-ro.model"; +import {DomainRo} from "../../common/model/domain-ro.model"; +import {GroupRo} from "../../common/model/group-ro.model"; @Injectable() export class EditDomainService { @@ -31,6 +32,24 @@ export class EditDomainService { } + public getDomainGroupsObservable(domainId: string): Observable<GroupRo[]> + { + const currentUser: User = this.securityService.getCurrentUser(); + return this.http.get<GroupRo[]>(SmpConstants.REST_PUBLIC_GROUP_DOMAIN + .replace(SmpConstants.PATH_PARAM_ENC_USER_ID, currentUser.userId) + .replace(SmpConstants.PATH_PARAM_ENC_DOMAIN_ID, domainId)); + } + + public deleteDomainGroupObservable(domainId: string, groupId:string ): Observable<GroupRo> + { + const currentUser: User = this.securityService.getCurrentUser(); + return this.http.delete<GroupRo>(SmpConstants.REST_PUBLIC_GROUP_DOMAIN_DELETE + .replace(SmpConstants.PATH_PARAM_ENC_USER_ID, currentUser.userId) + .replace(SmpConstants.PATH_PARAM_ENC_DOMAIN_ID, domainId) + .replace(SmpConstants.PATH_PARAM_ENC_GROUP_ID, groupId)); + } + + notifyDomainsUpdated(res: DomainRo[]) { this.domainUpdateSubject.next(res); } diff --git a/smp-angular/src/app/security/credential.model.ts b/smp-angular/src/app/security/credential.model.ts index 1abb73f17c2ab70f3a03b2825125d9cd2959a632..9e0d8cade73bd28e9b7a30e82111d4061e750121 100644 --- a/smp-angular/src/app/security/credential.model.ts +++ b/smp-angular/src/app/security/credential.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from "../common/model/entity-status.model"; +import {EntityStatus} from "../common/enums/entity-status.enum"; import {CertificateRo} from "../system-settings/user/certificate-ro.model"; export interface CredentialRo { diff --git a/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts b/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts index 9812820ac85fbe8d987b51bee7ec7a200550721e..e2f58f22f263805dd5c9ba7e53e4d181a49181bc 100644 --- a/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts +++ b/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts @@ -5,12 +5,12 @@ import {HttpClient} from "@angular/common/http"; import {SmpConstants} from "../../smp.constants"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {AbstractControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {ServiceGroupEditRo} from "../service-group-edit-ro.model"; import {GlobalLookups} from "../../common/global-lookups"; import {ServiceGroupExtensionWizardDialogComponent} from "../service-group-extension-wizard-dialog/service-group-extension-wizard-dialog.component"; import {ServiceGroupValidationRo} from "./service-group-validation-edit-ro.model"; -import {DomainRo} from "../../system-settings/admin-domain/domain-ro.model"; +import {DomainRo} from "../../common/model/domain-ro.model"; import {ServiceGroupDomainEditRo} from "../service-group-domain-edit-ro.model"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; import {SecurityService} from "../../security/security.service"; diff --git a/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts b/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts index 8045fea20c4fda4ca8a622aa2c444b41eda80770..75133bd7f12468da8f34899226d12e869bc8c45d 100644 --- a/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts +++ b/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts @@ -2,7 +2,7 @@ import {SearchTableController} from '../common/search-table/search-table-control import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog'; import {ServiceGroupDetailsDialogComponent} from './service-group-details-dialog/service-group-details-dialog.component'; import {ServiceGroupEditRo} from './service-group-edit-ro.model'; -import {EntityStatus} from '../common/model/entity-status.model'; +import {EntityStatus} from '../common/enums/entity-status.enum'; import {ServiceMetadataEditRo} from "./service-metadata-edit-ro.model"; import {ServiceGroupMetadataDialogComponent} from "./service-group-metadata-dialog/service-group-metadata-dialog.component"; import {of} from "rxjs/internal/observable/of"; diff --git a/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts b/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts index 9e5b8765fb9b163565e2d7bbcece8ab3037f43de..6795ba86cecb82f66ec57ec7bc1c7a74b305588f 100644 --- a/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts +++ b/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts @@ -2,7 +2,7 @@ import {ServiceMetadataEditRo} from './service-metadata-edit-ro.model'; import {SearchTableEntity} from "../common/search-table/search-table-entity.model"; import {UserRo} from "../system-settings/user/user-ro.model"; import {ServiceGroupDomainEditRo} from "./service-group-domain-edit-ro.model"; -import {EntityStatus} from "../common/model/entity-status.model"; +import {EntityStatus} from "../common/enums/entity-status.enum"; export interface ServiceGroupEditRo extends SearchTableEntity { id: number; diff --git a/smp-angular/src/app/service-group-edit/service-group-edit.component.ts b/smp-angular/src/app/service-group-edit/service-group-edit.component.ts index 9c8e90352fc4e58a6da8b2233e02af775c7819f3..f34997b89f38fa4390e06a70e5d979554e6c97c6 100644 --- a/smp-angular/src/app/service-group-edit/service-group-edit.component.ts +++ b/smp-angular/src/app/service-group-edit/service-group-edit.component.ts @@ -13,7 +13,7 @@ import {AlertMessageService} from '../common/alert-message/alert-message.service import {ServiceGroupEditController} from './service-group-edit-controller'; import {HttpClient} from '@angular/common/http'; import {SmpConstants} from "../smp.constants"; -import {EntityStatus} from "../common/model/entity-status.model"; +import {EntityStatus} from "../common/enums/entity-status.enum"; import {SearchTableComponent} from "../common/search-table/search-table.component"; import {GlobalLookups} from "../common/global-lookups"; import {SecurityService} from "../security/security.service"; diff --git a/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts b/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts index f11284629eb453a6954aa5245f76ed2dba10b04f..e9af19b5f8ca9fe87c1d28f65bda276791cd7801 100644 --- a/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts +++ b/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts @@ -2,7 +2,7 @@ import {Component, Inject, OnInit, ViewChild} from '@angular/core'; import {MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog'; import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {ServiceMetadataEditRo} from "../service-metadata-edit-ro.model"; import {GlobalLookups} from "../../common/global-lookups"; import {ServiceMetadataWizardDialogComponent} from "../service-metadata-wizard-dialog/service-metadata-wizard-dialog.component"; diff --git a/smp-angular/src/app/smp.constants.ts b/smp-angular/src/app/smp.constants.ts index 1d0f5db76603877c9626347ce63198bf05abd1aa..ab341c4bd5ce42dde8c79531787e425827b31dc0 100644 --- a/smp-angular/src/app/smp.constants.ts +++ b/smp-angular/src/app/smp.constants.ts @@ -19,6 +19,7 @@ export class SmpConstants { public static readonly PATH_PARAM_ENC_USER_ID = '{user-id}'; public static readonly PATH_PARAM_ENC_DOMAIN_ID = '{domain-id}'; public static readonly PATH_PARAM_ENC_MEMBER_ID = '{member-id}'; + public static readonly PATH_PARAM_ENC_GROUP_ID = '{group-id}'; public static readonly PATH_PARAM_CERT_ALIAS = '{cert-alias}'; public static readonly PATH_PARAM_ENC_CREDENTIAL_ID = '{credential-id}'; public static readonly PATH_PARAM_ENC_MANAGED_USER_ID = '{managed-user-id}'; @@ -27,15 +28,19 @@ export class SmpConstants { public static readonly PATH_PARAM_KEYSTORE_PWD = '{keystore-pwd}'; public static readonly PATH_PARAM_KEYSTORE_TYPE = '{keystore-type}'; + public static readonly PATH_RESOURCE_TYPE_DOMAIN = 'domain'; + public static readonly PATH_RESOURCE_TYPE_MEMBER = 'member'; + public static readonly PATH_RESOURCE_TYPE_GROUP = 'group'; + //------------------------------ // public endpoints public static readonly REST_PUBLIC = 'public/rest/'; public static readonly REST_INTERNAL = 'internal/rest/'; public static readonly REST_PUBLIC_SEARCH_SERVICE_GROUP = SmpConstants.REST_PUBLIC + SmpConstants.PATH_ACTION_SEARCH; - public static readonly REST_PUBLIC_DOMAIN = SmpConstants.REST_PUBLIC + 'domain'; + public static readonly REST_PUBLIC_DOMAIN = SmpConstants.REST_PUBLIC + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN; public static readonly REST_PUBLIC_DOMAIN_EDIT = SmpConstants.REST_PUBLIC_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID; - public static readonly REST_PUBLIC_DOMAIN_MEMBERS = SmpConstants.REST_PUBLIC_DOMAIN_EDIT+ + public static readonly REST_PUBLIC_DOMAIN_MEMBERS = SmpConstants.REST_PUBLIC_DOMAIN_EDIT + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + "members"; public static readonly REST_PUBLIC_DOMAIN_MEMBERS_ADD = SmpConstants.REST_PUBLIC_DOMAIN_EDIT + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + "member"; @@ -44,6 +49,20 @@ export class SmpConstants { + '/' + SmpConstants.PATH_PARAM_ENC_MEMBER_ID + '/' + SmpConstants.PATH_ACTION_DELETE; + 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 + '/' + + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID; + + public static readonly REST_PUBLIC_GROUP_DOMAIN_CREATE = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' + + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_CREATE; + + public static readonly REST_PUBLIC_GROUP_DOMAIN_DELETE = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' + SmpConstants.PATH_PARAM_ENC_GROUP_ID + '/' + + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_DELETE; + + public static readonly REST_PUBLIC_GROUP_DOMAIN_UPDATE = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' + SmpConstants.PATH_PARAM_ENC_GROUP_ID + '/' + + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE; + + public static readonly REST_PUBLIC_APPLICATION_INFO = SmpConstants.REST_PUBLIC + 'application/info'; public static readonly REST_PUBLIC_APPLICATION_CONFIG = SmpConstants.REST_PUBLIC + 'application/config'; // user public services @@ -77,26 +96,26 @@ export class SmpConstants { //------------------------------ // internal endpoints public static readonly REST_INTERNAL_ALERT_MANAGE = SmpConstants.REST_INTERNAL + 'alert'; - public static readonly REST_INTERNAL_DOMAIN_MANAGE_DEPRECATED = SmpConstants.REST_INTERNAL + 'domain'; + public static readonly REST_INTERNAL_DOMAIN_MANAGE_DEPRECATED = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN; - public static readonly REST_INTERNAL_DOMAIN_MANAGE = SmpConstants.REST_INTERNAL + 'domain' + + public static readonly REST_INTERNAL_DOMAIN_MANAGE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID; - public static readonly REST_INTERNAL_DOMAIN_MANAGE_DELETE = SmpConstants.REST_INTERNAL + 'domain' + + public static readonly REST_INTERNAL_DOMAIN_MANAGE_DELETE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_DELETE; - public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE = SmpConstants.REST_INTERNAL + 'domain' + + public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE; - public static readonly REST_INTERNAL_DOMAIN_MANAGE_CREATE = SmpConstants.REST_INTERNAL + 'domain' + + 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 + 'domain' + + 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 + 'domain' + + 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; public static readonly REST_INTERNAL_EXTENSION_MANAGE = SmpConstants.REST_INTERNAL + 'extension'; 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 fc99742e94006ab32d082f7d5a1afeeeb5075d45..106d1d3b374fc7044b10e48b53f63a33f9ae0326 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 @@ -6,8 +6,8 @@ import {AdminDomainService} from "./admin-domain.service"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; import {MatDialog} from "@angular/material/dialog"; -import {EntityStatus} from "../../common/model/entity-status.model"; -import {DomainRo} from "./domain-ro.model"; +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"; diff --git a/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts b/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts index 3c9969c09e73bb91b6a44f3e89bac8f7d836f82b..a17f61366cb83f6533658ea62c5c52265740289e 100644 --- a/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts +++ b/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts @@ -4,7 +4,7 @@ import {Observable, Subject} from 'rxjs'; import {HttpClient} from '@angular/common/http'; import {SecurityService} from "../../security/security.service"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; -import {DomainRo} from "./domain-ro.model"; +import {DomainRo} from "../../common/model/domain-ro.model"; import {User} from "../../security/user.model"; import {SmpConstants} from "../../smp.constants"; diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-ro.model.ts b/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-ro.model.ts deleted file mode 100644 index 762f7f04e1368882333430e522d5985b69d4d8bf..0000000000000000000000000000000000000000 --- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-ro.model.ts +++ /dev/null @@ -1,13 +0,0 @@ - -import {MembershipRoleEnum} from "../../../common/enums/membership-role.enum"; -import {SearchTableEntity} from "../../../common/search-table/search-table-entity.model"; -import {MemberTypeEnum} from "../../../common/enums/member-type.enum"; - -export interface MemberRo extends SearchTableEntity { - - memberId:string; - username:string; - memberOf:MemberTypeEnum; - fullName:string; - roleType:MembershipRoleEnum; -} 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 eaac8abf2ac8fc346c816ad52d92685c5eb0ecff..9f162913111fc9bda6c0eb03761173284e14a1ec 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 @@ -1,5 +1,5 @@ import {Component, ElementRef, EventEmitter, Input, Output, ViewChild,} from '@angular/core'; -import {DomainRo} from "../domain-ro.model"; +import {DomainRo} from "../../../common/model/domain-ro.model"; import {AbstractControl, FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms"; import {AdminDomainService} from "../admin-domain.service"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; @@ -8,8 +8,6 @@ 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 {UserRo} from "../../user/user-ro.model"; - @Component({ selector: 'domain-panel', @@ -122,12 +120,13 @@ export class DomainPanelComponent implements BeforeLeaveGuard { return this.isNewDomain() || this.domainForm?.dirty; } - get domainResourceTypes(){ - if (!this._domain || !this._domain.resourceDefinitions){ + get domainResourceTypes() { + if (!this._domain || !this._domain.resourceDefinitions) { return []; } return this.domiSMPResourceDefinitions.filter(resType => this._domain.resourceDefinitions.includes(resType.identifier)) } + get submitButtonEnabled(): boolean { return this.domainForm.valid && this.domainForm.dirty; } diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts b/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts index f6879ded4ffc92973369be5a780ed8615f7255bf..7eb7f423055be7bf1f4e82dbde7767cf2d96493a 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts +++ b/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts @@ -1,5 +1,5 @@ import {Component, EventEmitter, Input, Output,} from '@angular/core'; -import {DomainRo} from "../domain-ro.model"; +import {DomainRo} from "../../../common/model/domain-ro.model"; import {FormBuilder, FormControl, FormGroup} from "@angular/forms"; import {ResourceDefinitionRo} from "../../admin-extension/resource-definition-ro.model"; import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard"; 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 9d71722ac830892ce9235cdaa0b4856b3b5f06bf..6bfa7a7099ccc3fba03d23e89dc78f5f269ef2c8 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 @@ -1,5 +1,5 @@ import {Component, EventEmitter, Input, Output,} from '@angular/core'; -import {DomainRo} from "../domain-ro.model"; +import {DomainRo} from "../../../common/model/domain-ro.model"; import {AbstractControl, FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms"; import {AdminDomainService} from "../admin-domain.service"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; diff --git a/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts b/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts index 7a7747c19d455eae73be0cf0310dab5e4e0b7b8a..c0472ba658886d487bba6e90aa101e20ef64597f 100644 --- a/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts +++ b/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {ResourceDefinitionRo} from "./resource-definition-ro.model"; export interface ExtensionRo { diff --git a/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts b/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts index bbb8cbb837966dfc3997e6e9ee23b44c4755650b..2288ae708b8d2d696f5e7a7ca0ae6254eeace4ea 100644 --- a/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts +++ b/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {SubresourceDefinitionRo} from "./subresource-definition-ro.model"; export interface ResourceDefinitionRo { diff --git a/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts b/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts index fa01a786e6105c2cef5f2b55f1adbda6b90b1093..678ae7a9af846d21c90cd75b8f9933825e9bfaff 100644 --- a/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts +++ b/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; export interface SubresourceDefinitionRo { 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 476d091492bb193e32488c071ace90a40c47b948..0ddc6b7c1be8bb40790a8225163827c198c2bae9 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 @@ -7,7 +7,7 @@ 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"; import {MatDialog, MatDialogRef} from "@angular/material/dialog"; -import {EntityStatus} from "../../common/model/entity-status.model"; +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"; 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 c6bd0bc0b8cfbe9d06fc966742e8306eb1de6821..76ed48daddaf050a036463befde8146d50a2bc8e 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 @@ -7,7 +7,7 @@ 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"; import {MatDialog} from "@angular/material/dialog"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; 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 585c24a0997e17584ac902d0795bb25d1b250af6..a201f5ea5dd08e087ecfd271cee8bd17feb16c94 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 @@ -5,9 +5,9 @@ import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dia import {MatDialog, MatDialogConfig, MatDialogRef} from "@angular/material/dialog"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {CancelDialogComponent} from "../../common/dialogs/cancel-dialog/cancel-dialog.component"; -import {SearchUserRo} from "../admin-domain/domain-member-panel/member-dialog/search-user-ro.model"; +import {SearchUserRo} from "../../common/panels/domain-member-panel/member-dialog/search-user-ro.model"; import {AdminUserService} from "./admin-user.service"; -import {TableResult} from "../admin-domain/domain-member-panel/table-result.model"; +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"; 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 a445a542fff5d71ad746ec7734aff25566047618..557935fcfbebf274cccd1576365497d5dfa35db9 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 @@ -2,11 +2,10 @@ import {Injectable} from '@angular/core'; import {Observable} from 'rxjs'; import {HttpClient, HttpParams} from "@angular/common/http"; import {SecurityService} from "../../security/security.service"; -import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {SearchTableResult} from "../../common/search-table/search-table-result.model"; import {User} from "../../security/user.model"; -import {TableResult} from "../admin-domain/domain-member-panel/table-result.model"; -import {MemberRo} from "../admin-domain/domain-member-panel/member-ro.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"; diff --git a/smp-angular/src/app/system-settings/domain/domain-controller.ts b/smp-angular/src/app/system-settings/domain/domain-controller.ts index e89b284f1f5992225413261f50734f1a5255372e..adc45188d723aa7416c8d8468efdbb035d402843 100644 --- a/smp-angular/src/app/system-settings/domain/domain-controller.ts +++ b/smp-angular/src/app/system-settings/domain/domain-controller.ts @@ -1,8 +1,8 @@ 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 '../admin-domain/domain-ro.model'; -import {EntityStatus} from '../../common/model/entity-status.model'; +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"; 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 index 74d8f06f1c780d5274ac570f40466acbfa1793c8..917a7e38af62e81dbaccf40277fd5cb36f7e2c9e 100644 --- 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 @@ -1,9 +1,9 @@ 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 "../../admin-domain/domain-ro.model"; +import {DomainRo} from "../../../common/model/domain-ro.model"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; -import {EntityStatus} from "../../../common/model/entity-status.model"; +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"; 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 index 5800872e283f7c8dce20bb63ed9d75123174c05b..50cc6686d4766b101f4ec2ab8f39e140374c5898 100644 --- a/smp-angular/src/app/system-settings/domain/domain-result.model.ts +++ b/smp-angular/src/app/system-settings/domain/domain-result.model.ts @@ -1,4 +1,4 @@ -import {DomainRo} from '../admin-domain/domain-ro.model'; +import {DomainRo} from '../../common/model/domain-ro.model'; export interface DomainResult { serviceEntities: Array<DomainRo>; diff --git a/smp-angular/src/app/system-settings/domain/domain.component.ts b/smp-angular/src/app/system-settings/domain/domain.component.ts index fe627f9965571905732d7fc86826bdb6d5fa75c8..e52fe0804a0bf0c13718f5cdfca262931b78482e 100644 --- a/smp-angular/src/app/system-settings/domain/domain.component.ts +++ b/smp-angular/src/app/system-settings/domain/domain.component.ts @@ -17,9 +17,9 @@ 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 "../admin-domain/domain-ro.model"; +import {DomainRo} from "../../common/model/domain-ro.model"; import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component"; -import {EntityStatus} from "../../common/model/entity-status.model"; +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"; 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/property/property-details-dialog/property-details-dialog.component.ts index 6a5c687184a9c39c117f9f7ae084be592a65be2d..93b8fe2a356dbdb22478875d958a05424b32d366 100644 --- a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts +++ b/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts @@ -3,7 +3,7 @@ import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material/dialog import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup} from "@angular/forms"; import {PropertyRo} from "../property-ro.model"; import {AlertMessageService} from "../../../common/alert-message/alert-message.service"; -import {EntityStatus} from "../../../common/model/entity-status.model"; +import {EntityStatus} from "../../../common/enums/entity-status.enum"; import {ServiceGroupValidationRo} from "../../../service-group-edit/service-group-details-dialog/service-group-validation-edit-ro.model"; import {SmpConstants} from "../../../smp.constants"; import {ServiceGroupValidationErrorCodeModel} from "../../../service-group-edit/service-group-details-dialog/service-group-validation-error-code.model"; diff --git a/smp-angular/src/app/system-settings/property/property.component.ts b/smp-angular/src/app/system-settings/property/property.component.ts index a3711b695470d2a77113c1a29d3f58d63d2ad180..d2b18d57d391f755d24d7df4768c69a46b9377ec 100644 --- a/smp-angular/src/app/system-settings/property/property.component.ts +++ b/smp-angular/src/app/system-settings/property/property.component.ts @@ -16,7 +16,7 @@ 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 {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; @Component({ diff --git a/smp-angular/src/app/system-settings/user/certificate-ro.model.ts b/smp-angular/src/app/system-settings/user/certificate-ro.model.ts index 384f0afede917d33681f8b63dc78b58f3455ae28..dd61398cd91716a17a9fa6c65fbeb5a197be65d2 100644 --- a/smp-angular/src/app/system-settings/user/certificate-ro.model.ts +++ b/smp-angular/src/app/system-settings/user/certificate-ro.model.ts @@ -1,4 +1,4 @@ -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; export interface CertificateRo { certificateId: string; diff --git a/smp-angular/src/app/system-settings/user/user-controller.ts b/smp-angular/src/app/system-settings/user/user-controller.ts index ebf6103e18344d0de0e22f527973a75d59000883..c7aff9a22baa43f5078133de354b76a304e1476c 100644 --- a/smp-angular/src/app/system-settings/user/user-controller.ts +++ b/smp-angular/src/app/system-settings/user/user-controller.ts @@ -2,7 +2,7 @@ import {SearchTableController} from '../../common/search-table/search-table-cont import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog'; import {UserDetailsDialogComponent, UserDetailsDialogMode} from './user-details-dialog/user-details-dialog.component'; import {UserRo} from './user-ro.model'; -import {EntityStatus} from '../../common/model/entity-status.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"; diff --git a/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts b/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts index 20fa129411b84f8b4ebdc17eed048f3c107732bf..e1ea10baac69e4ffc4b3319e25a7ec11ce5534cd 100644 --- a/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts +++ b/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts @@ -12,7 +12,7 @@ import { } from '@angular/forms'; import {Role} from '../../../security/role.model'; import {UserRo} from '../user-ro.model'; -import {EntityStatus} from '../../../common/model/entity-status.model'; +import {EntityStatus} from '../../../common/enums/entity-status.enum'; import {AlertMessageService} from '../../../common/alert-message/alert-message.service'; import {CertificateService} from '../certificate.service'; import {CertificateRo} from "../certificate-ro.model"; diff --git a/smp-angular/src/app/system-settings/user/user.component.ts b/smp-angular/src/app/system-settings/user/user.component.ts index 5d989722c27106985668e958aad8b56c0adb95bb..85713469ca12c24f720040a57337306d57d5cbc3 100644 --- a/smp-angular/src/app/system-settings/user/user.component.ts +++ b/smp-angular/src/app/system-settings/user/user.component.ts @@ -15,7 +15,7 @@ import {HttpClient} from '@angular/common/http'; import {SearchTableComponent} from "../../common/search-table/search-table.component"; import {SecurityService} from "../../security/security.service"; import {GlobalLookups} from "../../common/global-lookups"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {SmpConstants} from "../../smp.constants"; @Component({ 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 36f4687d3cc24274551dd8fc64cb62ee80956259..4ec6b023c37ba1e2ec2c73f07ac1a591f23912fe 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 @@ -4,7 +4,7 @@ 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"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {CredentialDialogComponent} from "../../common/dialogs/credential-dialog/credential-dialog.component"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; import {AccessTokenPanelComponent} from "./access-token-panel/access-token-panel.component"; 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 d3171fb0b1b7bc3e3ea6a1ca7bc91887dbd6392d..8cf924c27f64cb98dd135a5a4c3e75f479d729a8 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 @@ -4,7 +4,7 @@ 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"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {CertificateDialogComponent} from "../../common/dialogs/certificate-dialog/certificate-dialog.component"; import {CredentialDialogComponent} from "../../common/dialogs/credential-dialog/credential-dialog.component"; import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard"; diff --git a/smp-angular/src/app/footer/footer.component.css b/smp-angular/src/app/window/footer/footer.component.css similarity index 100% rename from smp-angular/src/app/footer/footer.component.css rename to smp-angular/src/app/window/footer/footer.component.css diff --git a/smp-angular/src/app/footer/footer.component.html b/smp-angular/src/app/window/footer/footer.component.html similarity index 100% rename from smp-angular/src/app/footer/footer.component.html rename to smp-angular/src/app/window/footer/footer.component.html diff --git a/smp-angular/src/app/footer/footer.component.ts b/smp-angular/src/app/window/footer/footer.component.ts similarity index 81% rename from smp-angular/src/app/footer/footer.component.ts rename to smp-angular/src/app/window/footer/footer.component.ts index 3bc2dad7c7d0805508e27dfd4514a5ab312f7ae4..084d6e6066f4febd47170b0da8d16b4edef604c4 100644 --- a/smp-angular/src/app/footer/footer.component.ts +++ b/smp-angular/src/app/window/footer/footer.component.ts @@ -1,6 +1,6 @@ import {Component, OnInit} from '@angular/core'; -import {SmpInfoService} from '../app-info/smp-info.service'; -import {SmpInfo} from '../app-info/smp-info.model'; +import {SmpInfoService} from '../../app-info/smp-info.service'; +import {SmpInfo} from '../../app-info/smp-info.model'; @Component({ moduleId: module.id, @@ -23,6 +23,4 @@ export class FooterComponent implements OnInit { } ); } - - } diff --git a/smp-angular/src/app/window/toolbar/toolbar.component.ts b/smp-angular/src/app/window/toolbar/toolbar.component.ts index 3d7b50d5d443feaca38ddcb50adfd9e8232254ed..0cffdc2d8464f9d0d25ade066394d40285b054b5 100644 --- a/smp-angular/src/app/window/toolbar/toolbar.component.ts +++ b/smp-angular/src/app/window/toolbar/toolbar.component.ts @@ -5,7 +5,7 @@ import {Authority} from "../../security/authority.model"; import {AlertMessageService} from "../../common/alert-message/alert-message.service"; import {MatDialog, MatDialogRef} from "@angular/material/dialog"; import {UserDetailsDialogMode} from "../../system-settings/user/user-details-dialog/user-details-dialog.component"; -import {EntityStatus} from "../../common/model/entity-status.model"; +import {EntityStatus} from "../../common/enums/entity-status.enum"; import {UserService} from "../../system-settings/user/user.service"; import {UserController} from "../../system-settings/user/user-controller"; import {HttpClient} from "@angular/common/http"; diff --git a/smp-api/pom.xml b/smp-api/pom.xml deleted file mode 100644 index 16138c2af4230ea06dc507bc76deb8ed6a45d49b..0000000000000000000000000000000000000000 --- a/smp-api/pom.xml +++ /dev/null @@ -1,94 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Copyright 2017 European Commission | CEF eDelivery - ~ - ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - ~ - ~ 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. - --> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>eu.europa.ec.edelivery</groupId> - <artifactId>smp-modules</artifactId> - <version>5.0-SNAPSHOT</version> - <relativePath>../pom.xml</relativePath> - </parent> - - <artifactId>smp-api</artifactId> - <name>smp-api</name> - <packaging>jar</packaging> - - <dependencies> - <!-- Generated equals() methods need it in runtime --> - <dependency> - <groupId>org.jvnet.jaxb2_commons</groupId> - <artifactId>jaxb2-basics</artifactId> - </dependency> - <dependency> - <groupId>org.apache.cxf.xjc-utils</groupId> - <artifactId>cxf-xjc-runtime</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-web</artifactId> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> - <dependency> - <groupId>org.hamcrest</groupId> - <artifactId>hamcrest-junit</artifactId> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jvnet.jaxb2.maven2</groupId> - <artifactId>maven-jaxb2-plugin</artifactId> - <version>0.14.0</version> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - <configuration> - <args> - <arg>-Xvalue-constructor</arg><!-- generates value constructors --> - <arg>-Xequals</arg><!-- generates equals() metods --> - <arg>-XtoString</arg> - </args> - <plugins> - <!-- generates value constructors --> - <plugin> - <groupId>org.jvnet.jaxb2_commons</groupId> - <artifactId>jaxb2-value-constructor</artifactId> - <version>3.0</version> - </plugin> - <!-- generates equals() methods --> - <plugin> - <groupId>org.jvnet.jaxb2_commons</groupId> - <artifactId>jaxb2-basics</artifactId> - <version>1.11.1</version> - </plugin> - </plugins> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java b/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java deleted file mode 100644 index c5f159e00ed13e1d713b525f65b6818d246c9c61..0000000000000000000000000000000000000000 --- a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2017 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.smp.api.exceptions; - -/** - * Thrown when used identifier does not fulfill requirements specified in OASIS SMP specs: - * http://docs.oasis-open.org/bdxr/bdx-smp/v1.0/bdx-smp-v1.0.html - * - * Created by gutowpa on 12/01/2017. - */ -public class MalformedIdentifierException extends IllegalArgumentException { - - private static String buildMessage(String malformedId){ - return "Malformed identifier, scheme and id should be delimited by double colon: "+malformedId; - } - - public MalformedIdentifierException(String malformedId, Exception cause){ - super(buildMessage(malformedId), cause); - } - - public MalformedIdentifierException(String message){ - super(message); - } -} diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/XmlInvalidAgainstSchemaException.java b/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/XmlInvalidAgainstSchemaException.java deleted file mode 100644 index 2df96fe77c9f38aca31548c21bebd435027118ca..0000000000000000000000000000000000000000 --- a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/XmlInvalidAgainstSchemaException.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.smp.api.exceptions; - -/** - * Created by migueti on 19/01/2017. - */ -public class XmlInvalidAgainstSchemaException extends Exception { - - public XmlInvalidAgainstSchemaException(String message, Exception e) { - super(message, e); - } -} diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidator.java b/smp-api/src/main/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidator.java deleted file mode 100644 index 0bd3d275f2e71b780d5359b21b6f5ffc4faacacd..0000000000000000000000000000000000000000 --- a/smp-api/src/main/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidator.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2017 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.smp.api.validators; - -import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException; -import org.xml.sax.SAXException; - -import javax.xml.XMLConstants; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.StringReader; -import java.net.URL; - -/** - * Created by migueti on 19/01/2017. - */ -public class BdxSmpOasisValidator { - - /** - * Class has only static members. - */ - private BdxSmpOasisValidator() { - - } - - /** - * thread safe validator - */ - private static final ThreadLocal<Validator> validator = ThreadLocal.withInitial( () -> { - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - URL xsdFilePath = BdxSmpOasisValidator.class.getResource("/bdx-smp-201605.xsd"); - try { - Schema schema = schemaFactory.newSchema(xsdFilePath); - Validator vaInstance = schema.newValidator(); - vaInstance.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); - vaInstance.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); - return vaInstance; - } catch (SAXException e) { - throw new IllegalStateException("Unable to initialize BDX SMP OASIS XSD schema validator.", e); - } - } ); - - private static Validator getValidator() { - return validator.get(); - } - - public static void validateXSD(byte[] xmlBody) throws XmlInvalidAgainstSchemaException { - try { - getValidator().validate(new StreamSource(new ByteArrayInputStream(xmlBody))); - } catch (SAXException | IOException e) { - throw new XmlInvalidAgainstSchemaException(e.getMessage(), e); - } - } -} \ No newline at end of file diff --git a/smp-api/src/main/resources/bdx-smp-201605.xsd b/smp-api/src/main/resources/bdx-smp-201605.xsd deleted file mode 100644 index 39f98b365d4dbe2f59c0911fdd9233c2ebb26638..0000000000000000000000000000000000000000 --- a/smp-api/src/main/resources/bdx-smp-201605.xsd +++ /dev/null @@ -1,189 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Service Metadata Publishing (SMP) Version 1.0 - Committee Specification 03 - 30 June 2016 - Copyright (c) OASIS Open 2016. All Rights Reserved. - Source: http://docs.oasis-open.org/bdxr/bdx-smp/v1.0/cs03/schemas/ - Latest version of the specification: http://docs.oasis-open.org/bdxr/bdx-smp/v1.0/bdx-smp-v1.0.html - TC IPR Statement: https://www.oasis-open.org/committees/bdxr/ipr.php - --> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05" id="ServiceMetadataPublishing"> - <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/> - <xs:element name="ServiceGroup" type="ServiceGroupType"/> - <xs:element name="ServiceMetadata" type="ServiceMetadataType"/> - <xs:element name="SignedServiceMetadata" type="SignedServiceMetadataType"/> - <xs:complexType name="SignedServiceMetadataType"> - <xs:sequence> - <xs:element ref="ServiceMetadata"/> - <xs:element ref="ds:Signature"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ServiceMetadataType"> - <xs:choice> - <xs:element name="ServiceInformation" type="ServiceInformationType"/> - <xs:element name="Redirect" type="RedirectType"/> - </xs:choice> - </xs:complexType> - <xs:complexType name="ServiceInformationType"> - <xs:sequence> - <xs:element ref="ParticipantIdentifier"/> - <xs:element ref="DocumentIdentifier"/> - <xs:element name="ProcessList" type="ProcessListType"/> - <xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ProcessListType"> - <xs:sequence> - <xs:element name="Process" type="ProcessType" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ProcessType"> - <xs:sequence> - <xs:element ref="ProcessIdentifier"/> - <xs:element name="ServiceEndpointList" type="ServiceEndpointList"/> - <xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ServiceEndpointList"> - <xs:sequence> - <xs:element name="Endpoint" type="EndpointType" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="EndpointType"> - <xs:sequence> - <xs:element name="EndpointURI" type="xs:anyURI"/> - <xs:element name="RequireBusinessLevelSignature" type="xs:boolean" minOccurs="0" default="false"/> - <xs:element name="MinimumAuthenticationLevel" type="xs:string" minOccurs="0"/> - <xs:element name="ServiceActivationDate" type="xs:dateTime" minOccurs="0"/> - <xs:element name="ServiceExpirationDate" type="xs:dateTime" minOccurs="0"/> - <xs:element name="Certificate" type="xs:base64Binary"/> - <xs:element name="ServiceDescription" type="xs:string"/> - <xs:element name="TechnicalContactUrl" type="xs:anyURI"/> - <xs:element name="TechnicalInformationUrl" type="xs:anyURI" minOccurs="0"/> - <xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - <xs:attribute name="transportProfile" type="xs:string" use="required"/> - </xs:complexType> - <xs:complexType name="ServiceGroupType"> - <xs:sequence> - <xs:element ref="ParticipantIdentifier"/> - <xs:element name="ServiceMetadataReferenceCollection" type="ServiceMetadataReferenceCollectionType"/> - <xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ServiceMetadataReferenceCollectionType"> - <xs:sequence> - <xs:element name="ServiceMetadataReference" type="ServiceMetadataReferenceType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ServiceMetadataReferenceType"> - <xs:attribute name="href" type="xs:anyURI"/> - </xs:complexType> - <xs:complexType name="RedirectType"> - <xs:sequence> - <xs:element name="CertificateUID" type="xs:string"/> - <xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - <xs:attribute name="href" type="xs:anyURI" use="required"/> - </xs:complexType> - <xs:element name="ParticipantIdentifier" type="ParticipantIdentifierType"/> - <xs:element name="DocumentIdentifier" type="DocumentIdentifierType"/> - <xs:element name="ProcessIdentifier" type="ProcessIdentifierType"/> - <xs:element name="RecipientIdentifier" type="ParticipantIdentifierType"/> - <xs:element name="SenderIdentifier" type="ParticipantIdentifierType"/> - <xs:complexType name="ParticipantIdentifierType"> - <xs:simpleContent> - <xs:extension base="xs:string"> - <xs:attribute name="scheme" type="xs:string"/> - </xs:extension> - </xs:simpleContent> - </xs:complexType> - <xs:complexType name="DocumentIdentifierType"> - <xs:simpleContent> - <xs:extension base="xs:string"> - <xs:attribute name="scheme" type="xs:string"/> - </xs:extension> - </xs:simpleContent> - </xs:complexType> - <xs:complexType name="ProcessIdentifierType"> - <xs:simpleContent> - <xs:extension base="xs:string"> - <xs:attribute name="scheme" type="xs:string"/> - </xs:extension> - </xs:simpleContent> - </xs:complexType> - <xs:complexType name="ExtensionType"> - <xs:annotation> - <xs:documentation> - A single extension for private use. - </xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionID" type="xs:token"> - <xs:annotation> - <xs:documentation> - An identifier for the Extension assigned by the creator of the extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionName" type="xs:string"> - <xs:annotation> - <xs:documentation> - A name for the Extension assigned by the creator of the extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionAgencyID" type="xs:string"> - <xs:annotation> - <xs:documentation> - An agency that maintains one or more Extensions. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionAgencyName" type="xs:string"> - <xs:annotation> - <xs:documentation> - The name of the agency that maintains the Extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionAgencyURI" type="xs:anyURI"> - <xs:annotation> - <xs:documentation> - A URI for the Agency that maintains the Extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionVersionID" type="xs:normalizedString"> - <xs:annotation> - <xs:documentation> - The version of the Extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionURI" type="xs:anyURI"> - <xs:annotation> - <xs:documentation> - A URI for the Extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionReasonCode" type="xs:token"> - <xs:annotation> - <xs:documentation> - A code for reason the Extension is being included. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:element maxOccurs="1" minOccurs="0" name="ExtensionReason" type="xs:string"> - <xs:annotation> - <xs:documentation> - A description of the reason for the Extension. - </xs:documentation> - </xs:annotation> - </xs:element> - <xs:any namespace="##other" processContents="lax"/> - </xs:sequence> - </xs:complexType> -</xs:schema> \ No newline at end of file diff --git a/smp-api/src/main/resources/commonServiceBinding.xjb b/smp-api/src/main/resources/commonServiceBinding.xjb deleted file mode 100644 index cfefdeb35f5b28025a2d9d574a67864de9eec428..0000000000000000000000000000000000000000 --- a/smp-api/src/main/resources/commonServiceBinding.xjb +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<!-- - ~ Copyright 2017 European Commission | CEF eDelivery - ~ - ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - ~ - ~ 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. - --> - -<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" - xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" - xmlns:annox="http://annox.dev.java.net" - jaxb:extensionBindingPrefixes="xjc" - xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <jaxb:globalBindings xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <xjc:simple /> - <jaxb:javaType - name="java.util.Date" - xmlType="xs:dateTime" - parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime" - printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime" - /> - <jaxb:javaType - name="java.util.Date" - xmlType="xs:date" - parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate" - printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate" - /> - </jaxb:globalBindings> -</jaxb:bindings> \ No newline at end of file diff --git a/smp-api/src/main/resources/ec-services-SMP-1.0.xsd b/smp-api/src/main/resources/ec-services-SMP-1.0.xsd deleted file mode 100644 index 35fa43f06cc371abf778bda6536dc4afceac6bce..0000000000000000000000000000000000000000 --- a/smp-api/src/main/resources/ec-services-SMP-1.0.xsd +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Copyright 2017 European Commission | CEF eDelivery - ~ - ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - ~ - ~ 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. - --> - -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="ec:services:SMP:1.0" targetNamespace="ec:services:SMP:1.0" - elementFormDefault="qualified" id="ServiceMetadataPublishing"> - <xs:element name="ErrorResponse" type="ErrorResponseType"/> - <xs:complexType name="ErrorResponseType"> - <xs:sequence> - <xs:element name="BusinessCode" type="xs:string"/> - <xs:element name="ErrorDescription" type="xs:string" minOccurs="0"/> - <xs:element name="ErrorUniqueId" type="xs:string"/> - </xs:sequence> - </xs:complexType> -</xs:schema> diff --git a/smp-api/src/main/resources/org-w3-2001-xmlschema.xsd b/smp-api/src/main/resources/org-w3-2001-xmlschema.xsd deleted file mode 100644 index 3e4877c1e346e1deb77c084879afa675f8c95825..0000000000000000000000000000000000000000 --- a/smp-api/src/main/resources/org-w3-2001-xmlschema.xsd +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Copyright 2017 European Commission | CEF eDelivery - ~ - ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - ~ - ~ 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. - --> - -<!-- -This file specifies the custom output package for the default one: -"org.w3._2001.xmlschema" -> "org.w3._2001.xmlschema.custom" -There was a collision issue between generated class-names and other dependencies (genarated classes names are Adapter1.java Adapter2.java, ...) - -Solution described here: -https://jaxb.java.net/guide/Customizing_Java_packages.html#Tip__get_rid_of_the_org_w3__2001_xmlschema_package ---> -<schema xmlns="http://www.w3.org/2001/XMLSchema" - targetNamespace="http://www.w3.org/2001/XMLSchema" - xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" - jaxb:version="2.0"> - <annotation><appinfo> - <jaxb:schemaBindings> - <jaxb:package name="org.w3._2001.xmlschema.custom"/> - </jaxb:schemaBindings> - </appinfo></annotation> -</schema> \ No newline at end of file diff --git a/smp-api/src/main/resources/xmldsig-core-schema.xsd b/smp-api/src/main/resources/xmldsig-core-schema.xsd deleted file mode 100644 index db6114e859aa7ee7c178f957e7fbe306d38857b6..0000000000000000000000000000000000000000 --- a/smp-api/src/main/resources/xmldsig-core-schema.xsd +++ /dev/null @@ -1,310 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd" [ - <!ATTLIST schema - xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#"> - <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'> - <!ENTITY % p ''> - <!ENTITY % s ''> - ]> ---> -<!-- Schema for XML Signatures - http://www.w3.org/2000/09/xmldsig# - $Revision: 1.1 $ on $Date: 2002/02/08 20:32:26 $ by $Author: reagle $ - - Copyright 2001 The Internet Society and W3C (Massachusetts Institute - of Technology, Institut National de Recherche en Informatique et en - Automatique, Keio University). All Rights Reserved. - http://www.w3.org/Consortium/Legal/ - - This document is governed by the W3C Software License [1] as described - in the FAQ [2]. - - [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720 - [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD ---> -<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="0.1" elementFormDefault="qualified"> - -<!-- Basic Types Defined for Signatures --> - -<simpleType name="CryptoBinary"> - <restriction base="base64Binary"> - </restriction> -</simpleType> - -<!-- Start Signature --> - -<element name="Signature" type="ds:SignatureType"/> -<complexType name="SignatureType"> - <sequence> - <element ref="ds:SignedInfo"/> - <element ref="ds:SignatureValue"/> - <element ref="ds:KeyInfo" minOccurs="0"/> - <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="Id" type="ID" use="optional"/> -</complexType> - - <element name="SignatureValue" type="ds:SignatureValueType"/> - <complexType name="SignatureValueType"> - <simpleContent> - <extension base="base64Binary"> - <attribute name="Id" type="ID" use="optional"/> - </extension> - </simpleContent> - </complexType> - -<!-- Start SignedInfo --> - -<element name="SignedInfo" type="ds:SignedInfoType"/> -<complexType name="SignedInfoType"> - <sequence> - <element ref="ds:CanonicalizationMethod"/> - <element ref="ds:SignatureMethod"/> - <element ref="ds:Reference" maxOccurs="unbounded"/> - </sequence> - <attribute name="Id" type="ID" use="optional"/> -</complexType> - - <element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/> - <complexType name="CanonicalizationMethodType" mixed="true"> - <sequence> - <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/> - <!-- (0,unbounded) elements from (1,1) namespace --> - </sequence> - <attribute name="Algorithm" type="anyURI" use="required"/> - </complexType> - - <element name="SignatureMethod" type="ds:SignatureMethodType"/> - <complexType name="SignatureMethodType" mixed="true"> - <sequence> - <element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/> - <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/> - <!-- (0,unbounded) elements from (1,1) external namespace --> - </sequence> - <attribute name="Algorithm" type="anyURI" use="required"/> - </complexType> - -<!-- Start Reference --> - -<element name="Reference" type="ds:ReferenceType"/> -<complexType name="ReferenceType"> - <sequence> - <element ref="ds:Transforms" minOccurs="0"/> - <element ref="ds:DigestMethod"/> - <element ref="ds:DigestValue"/> - </sequence> - <attribute name="Id" type="ID" use="optional"/> - <attribute name="URI" type="anyURI" use="optional"/> - <attribute name="Type" type="anyURI" use="optional"/> -</complexType> - - <element name="Transforms" type="ds:TransformsType"/> - <complexType name="TransformsType"> - <sequence> - <element ref="ds:Transform" maxOccurs="unbounded"/> - </sequence> - </complexType> - - <element name="Transform" type="ds:TransformType"/> - <complexType name="TransformType" mixed="true"> - <choice minOccurs="0" maxOccurs="unbounded"> - <any namespace="##other" processContents="lax"/> - <!-- (1,1) elements from (0,unbounded) namespaces --> - <element name="XPath" type="string"/> - </choice> - <attribute name="Algorithm" type="anyURI" use="required"/> - </complexType> - -<!-- End Reference --> - -<element name="DigestMethod" type="ds:DigestMethodType"/> -<complexType name="DigestMethodType" mixed="true"> - <sequence> - <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="Algorithm" type="anyURI" use="required"/> -</complexType> - -<element name="DigestValue" type="ds:DigestValueType"/> -<simpleType name="DigestValueType"> - <restriction base="base64Binary"/> -</simpleType> - -<!-- End SignedInfo --> - -<!-- Start KeyInfo --> - -<element name="KeyInfo" type="ds:KeyInfoType"/> -<complexType name="KeyInfoType" mixed="true"> - <choice maxOccurs="unbounded"> - <element ref="ds:KeyName"/> - <element ref="ds:KeyValue"/> - <element ref="ds:RetrievalMethod"/> - <element ref="ds:X509Data"/> - <element ref="ds:PGPData"/> - <element ref="ds:SPKIData"/> - <element ref="ds:MgmtData"/> - <any processContents="lax" namespace="##other"/> - <!-- (1,1) elements from (0,unbounded) namespaces --> - </choice> - <attribute name="Id" type="ID" use="optional"/> -</complexType> - - <element name="KeyName" type="string"/> - <element name="MgmtData" type="string"/> - - <element name="KeyValue" type="ds:KeyValueType"/> - <complexType name="KeyValueType" mixed="true"> - <choice> - <element ref="ds:DSAKeyValue"/> - <element ref="ds:RSAKeyValue"/> - <any namespace="##other" processContents="lax"/> - </choice> - </complexType> - - <element name="RetrievalMethod" type="ds:RetrievalMethodType"/> - <complexType name="RetrievalMethodType"> - <sequence> - <element ref="ds:Transforms" minOccurs="0"/> - </sequence> - <attribute name="URI" type="anyURI"/> - <attribute name="Type" type="anyURI" use="optional"/> - </complexType> - -<!-- Start X509Data --> - -<element name="X509Data" type="ds:X509DataType"/> -<complexType name="X509DataType"> - <sequence maxOccurs="unbounded"> - <choice> - <element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/> - <element name="X509SKI" type="base64Binary"/> - <element name="X509SubjectName" type="string"/> - <element name="X509Certificate" type="base64Binary"/> - <element name="X509CRL" type="base64Binary"/> - <any namespace="##other" processContents="lax"/> - </choice> - </sequence> -</complexType> - -<complexType name="X509IssuerSerialType"> - <sequence> - <element name="X509IssuerName" type="string"/> - <element name="X509SerialNumber" type="integer"/> - </sequence> -</complexType> - -<!-- End X509Data --> - -<!-- Begin PGPData --> - -<element name="PGPData" type="ds:PGPDataType"/> -<complexType name="PGPDataType"> - <choice> - <sequence> - <element name="PGPKeyID" type="base64Binary"/> - <element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/> - <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <sequence> - <element name="PGPKeyPacket" type="base64Binary"/> - <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - </choice> -</complexType> - -<!-- End PGPData --> - -<!-- Begin SPKIData --> - -<element name="SPKIData" type="ds:SPKIDataType"/> -<complexType name="SPKIDataType"> - <sequence maxOccurs="unbounded"> - <element name="SPKISexp" type="base64Binary"/> - <any namespace="##other" processContents="lax" minOccurs="0"/> - </sequence> -</complexType> - -<!-- End SPKIData --> - -<!-- End KeyInfo --> - -<!-- Start Object (Manifest, SignatureProperty) --> - -<element name="Object" type="ds:ObjectType"/> -<complexType name="ObjectType" mixed="true"> - <sequence minOccurs="0" maxOccurs="unbounded"> - <any namespace="##any" processContents="lax"/> - </sequence> - <attribute name="Id" type="ID" use="optional"/> - <attribute name="MimeType" type="string" use="optional"/> <!-- add a grep facet --> - <attribute name="Encoding" type="anyURI" use="optional"/> -</complexType> - -<element name="Manifest" type="ds:ManifestType"/> -<complexType name="ManifestType"> - <sequence> - <element ref="ds:Reference" maxOccurs="unbounded"/> - </sequence> - <attribute name="Id" type="ID" use="optional"/> -</complexType> - -<element name="SignatureProperties" type="ds:SignaturePropertiesType"/> -<complexType name="SignaturePropertiesType"> - <sequence> - <element ref="ds:SignatureProperty" maxOccurs="unbounded"/> - </sequence> - <attribute name="Id" type="ID" use="optional"/> -</complexType> - - <element name="SignatureProperty" type="ds:SignaturePropertyType"/> - <complexType name="SignaturePropertyType" mixed="true"> - <choice maxOccurs="unbounded"> - <any namespace="##other" processContents="lax"/> - <!-- (1,1) elements from (1,unbounded) namespaces --> - </choice> - <attribute name="Target" type="anyURI" use="required"/> - <attribute name="Id" type="ID" use="optional"/> - </complexType> - -<!-- End Object (Manifest, SignatureProperty) --> - -<!-- Start Algorithm Parameters --> - -<simpleType name="HMACOutputLengthType"> - <restriction base="integer"/> -</simpleType> - -<!-- Start KeyValue Element-types --> - -<element name="DSAKeyValue" type="ds:DSAKeyValueType"/> -<complexType name="DSAKeyValueType"> - <sequence> - <sequence minOccurs="0"> - <element name="P" type="ds:CryptoBinary"/> - <element name="Q" type="ds:CryptoBinary"/> - </sequence> - <element name="G" type="ds:CryptoBinary" minOccurs="0"/> - <element name="Y" type="ds:CryptoBinary"/> - <element name="J" type="ds:CryptoBinary" minOccurs="0"/> - <sequence minOccurs="0"> - <element name="Seed" type="ds:CryptoBinary"/> - <element name="PgenCounter" type="ds:CryptoBinary"/> - </sequence> - </sequence> -</complexType> - -<element name="RSAKeyValue" type="ds:RSAKeyValueType"/> -<complexType name="RSAKeyValueType"> - <sequence> - <element name="Modulus" type="ds:CryptoBinary"/> - <element name="Exponent" type="ds:CryptoBinary"/> - </sequence> -</complexType> - -<!-- End KeyValue Element-types --> - -<!-- End Signature --> - -</schema> \ No newline at end of file diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java deleted file mode 100644 index c19885313827e14e07afff6774bebd43c4f1f567..0000000000000000000000000000000000000000 --- a/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2017 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.smp.api; - - - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import java.io.InputStream; - - - -/** - * Created by gutowpa on 17/01/2017. - * TODO: do we still need this! - */ - -public class GeneratedCodeTest { - - private static final String SCHEME = "The sample Identifier Scheme"; - private static final String VALUE = "The sample Identifier Value"; -/* - @Test - public void testValueConstructorWasGeneratedForParticipantId() { - //when - ParticipantIdentifierType id = new ParticipantIdentifierType(VALUE, SCHEME); - - //then - assertEquals(SCHEME, id.getScheme()); - assertEquals(VALUE, id.getValue()); - } - - @Test - public void testValueConstructorWasGeneratedForDocumentId() { - //when - DocumentIdentifier id = new DocumentIdentifier(VALUE, SCHEME); - - //then - assertEquals(SCHEME, id.getScheme()); - assertEquals(VALUE, id.getValue()); - } - - @Test - public void testValueConstructorWasGeneratedForProcessId() { - //when - ProcessIdentifier id = new ProcessIdentifier(VALUE, SCHEME); - - //then - assertEquals(SCHEME, id.getScheme()); - assertEquals(VALUE, id.getValue()); - } - - @Test - public void testGeneratedEqualsIsNotAwareOfWhitespaceAndCommentChanges() throws JAXBException { - //given - ServiceGroup serviceGroupA = loadServiceGroup("/ServiceGroupA.xml"); - ServiceGroup serviceGroupB = loadServiceGroup("/ServiceGroupB.xml"); - - //when-then - assertTrue(serviceGroupA.equals(serviceGroupB)); - } - - @Test - public void testGeneratedEqualsIsAwareOfContentChanges() throws JAXBException { - //given - ServiceGroup serviceGroupA = loadServiceGroup("/ServiceGroupA.xml"); - ServiceGroup serviceGroupC = loadServiceGroup("/ServiceGroupC.xml"); - - //when-then - assertFalse(serviceGroupA.equals(serviceGroupC)); - } - - public static ServiceGroup loadServiceGroup(String path) throws JAXBException { - InputStream inputStream = GeneratedCodeTest.class.getResourceAsStream(path); - JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - Object serviceGroup = unmarshaller.unmarshal(inputStream); - return (ServiceGroup) serviceGroup; - } - - @Test - public void testGeneratedServiceGroupEqualsReturnsTrue(){ - ParticipantIdentifierType id1 = new ParticipantIdentifierType(VALUE, SCHEME); - ParticipantIdentifierType id2 = new ParticipantIdentifierType(VALUE, SCHEME); - - assertTrue(id1.equals(id2)); - } - - @Test - public void testGeneratedServiceGroupEqualsIsCaseSensitive(){ - ParticipantIdentifierType id1 = new ParticipantIdentifierType("Value", "Scheme"); - ParticipantIdentifierType id2 = new ParticipantIdentifierType("value", "scheme"); - - assertFalse(id1.equals(id2)); - } - - @Test - public void testGeneratedServiceGroupEquaHandlesEmptyScheme(){ - ParticipantIdentifierType id1 = new ParticipantIdentifierType(VALUE, null); - ParticipantIdentifierType id2 = new ParticipantIdentifierType(VALUE, null); - - assertTrue(id1.equals(id2)); - } - - @Test - public void testGeneratedDocumentIdEqualsReturnsTrue(){ - DocumentIdentifier id1 = new DocumentIdentifier(VALUE, SCHEME); - DocumentIdentifier id2 = new DocumentIdentifier(VALUE, SCHEME); - - assertTrue(id1.equals(id2)); - } - - @Test - public void testGeneratedDocumentIdEqualsIsCaseSensitive(){ - DocumentIdentifier id1 = new DocumentIdentifier("Value", "Scheme"); - DocumentIdentifier id2 = new DocumentIdentifier("value", "scheme"); - - assertFalse(id1.equals(id2)); - } - - @Test - public void testGeneratedDocumentIdEqualsHandlesEmptyScheme(){ - DocumentIdentifier id1 = new DocumentIdentifier(VALUE, null); - DocumentIdentifier id2 = new DocumentIdentifier(VALUE, null); - - assertTrue(id1.equals(id2)); - } -*/ -} diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java index f9618677be9e1b7975b82a8c0e7bd881f0387f84..6d84744c9fe052db6e2dfa1da962262dc961d585 100644 --- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java +++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java @@ -59,7 +59,7 @@ public class ServiceGroup10Converter { JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class); return jaxbContext.createUnmarshaller(); } catch (JAXBException ex) { - LOG.error("Error occurred while initializing JAXBContext for ServiceMetadata. Cause message:", ex); + LOG.error("Error occurred while initializing JAXBContext for ServiceGroup10Converter. Cause message:", ex); } return null; }); @@ -69,6 +69,22 @@ public class ServiceGroup10Converter { return jaxbUnmarshaller.get(); } + private static final ThreadLocal<Marshaller> jaxbMarshaller = ThreadLocal.withInitial(() -> { + try { + + JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class); + return jaxbContext.createMarshaller(); + } catch (JAXBException ex) { + LOG.error("Error occurred while initializing JAXBContext for ServiceGroup10Converter. Cause message:", ex); + } + return null; + }); + + + private static Marshaller getMarshaller() { + return jaxbMarshaller.get(); + } + /** * Method unmarshal ServiceGroup from xml bytearray @@ -126,8 +142,7 @@ public class ServiceGroup10Converter { if (serviceGroup == null) { return; } - JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class); - Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); + Marshaller jaxbMarshaller = getMarshaller(); // Pretty Print XML if (prettyPrint) { jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, prettyPrint); diff --git a/smp-server-library/pom.xml b/smp-server-library/pom.xml index 65d2d74e8f531853da91e37139ec1910d1805801..06200a4b4aa777687edbae033f2f05f13ab39266 100644 --- a/smp-server-library/pom.xml +++ b/smp-server-library/pom.xml @@ -26,11 +26,6 @@ <maven.deploy.skip>false</maven.deploy.skip> </properties> <dependencies> - <dependency> - <groupId>eu.europa.ec.edelivery</groupId> - <artifactId>smp-api</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>eu.europa.ec.edelivery</groupId> <artifactId>smp-spi</artifactId> diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBGroupToGroupROConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBGroupToGroupROConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..5e764b3a477e67361bdf8f286876d0332e5ee56c --- /dev/null +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBGroupToGroupROConverter.java @@ -0,0 +1,35 @@ +package eu.europa.ec.edelivery.smp.conversion; + +import eu.europa.ec.edelivery.smp.data.model.DBGroup; +import eu.europa.ec.edelivery.smp.data.ui.GroupRO; +import eu.europa.ec.edelivery.smp.logging.SMPLogger; +import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; +import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; +import org.apache.commons.beanutils.BeanUtils; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; + + +/** + * @author Sebastian-Ion TINCU + */ +@Component +public class DBGroupToGroupROConverter implements Converter<DBGroup, GroupRO> { + private static final SMPLogger LOG = SMPLoggerFactory.getLogger(DBGroupToGroupROConverter.class); + + @Override + public GroupRO convert(DBGroup source) { + + GroupRO target = new GroupRO(); + try { + BeanUtils.copyProperties(target, source); + target.setGroupId(SessionSecurityUtils.encryptedEntityId(source.getId())); + } catch (IllegalAccessException | InvocationTargetException e) { + LOG.error("Error occurred while converting DBResourceDef", e); + return null; + } + return target; + } +} diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java index d655541a10343a2184897d5de975364c816a7080..b81423a6246700286177e98e736f33aabef414b1 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java @@ -31,49 +31,6 @@ public class DBUserToUserROConverter implements Converter<DBUser, UserRO> { target.setFullName(source.getFullName()); target.setSmpTheme(source.getSmpTheme()); target.setSmpLocale(source.getSmpLocale()); -/* - Optional<DBCredential> optUserPassCred = source.getCredentials().stream().filter(credential -> credential.getCredentialType() == CredentialType.USERNAME_PASSWORD).findFirst(); - Optional<DBCredential> optTokenCred = source.getCredentials().stream().filter(credential -> credential.getCredentialType() == CredentialType.ACCESS_TOKEN).findFirst(); - Optional<DBCredential> optCertCred = source.getCredentials().stream().filter(credential -> credential.getCredentialType() == CredentialType.CERTIFICATE).findFirst(); - - if (optUserPassCred.isPresent()){ - DBCredential credential = optUserPassCred.get(); - target.setPassword(credential.getValue()); - target.setPasswordExpireOn(credential.getExpireOn()); - target.setPasswordExpired(isCredentialExpired(credential)); - target.setSequentialLoginFailureCount(credential.getSequentialLoginFailureCount()); - target.setLastFailedLoginAttempt(credential.getLastFailedLoginAttempt()); - target.setSuspendedUtil(getSuspensionUntilDate(credential.getLastFailedLoginAttempt(),credential.getSequentialLoginFailureCount(), - configurationService.getLoginSuspensionTimeInSeconds(), configurationService.getLoginMaxAttempts())); - } - - if (optTokenCred.isPresent()){ - DBCredential credential = optUserPassCred.get(); - - target.setAccessTokenId(credential.getName()); - target.setAccessTokenExpireOn(credential.getExpireOn()); - - target.setSequentialTokenLoginFailureCount(credential.getSequentialLoginFailureCount()); - target.setLastTokenFailedLoginAttempt(credential.getLastFailedLoginAttempt()); - target.setTokenSuspendedUtil(getSuspensionUntilDate(credential.getLastFailedLoginAttempt(), - credential.getSequentialLoginFailureCount(), - configurationService.getAccessTokenLoginSuspensionTimeInSeconds(), - configurationService.getAccessTokenLoginMaxAttempts())); - } - - if (optCertCred.isPresent()) { - DBCredential credential = optCertCred.get(); - DBCertificate certificate = credential.getCertificate(); - CertificateRO certificateRO = conversionService.convert(certificate, CertificateRO.class); - target.setCertificate(certificateRO); - if (StringUtils.equalsIgnoreCase(certificate.getCertificateId(), source.getUsername())) { - // clear username if is the same as certificate id. - // username as cert id is set to database to force unique users - // and to fix issue with mysql - where null value is also unique... - target.setUsername(null); - } - } -*/ return target; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java index 9d7bcbd44a396256d165c6144f1ffbf7d3468fdc..327073d77513328208aa55285cf28690d61e39c4 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Optional; import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*; +import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.ILLEGAL_STATE_DOMAIN_GROUP_MULTIPLE_ENTRY; import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.ILLEGAL_STATE_DOMAIN_MULTIPLE_ENTRY; /** @@ -55,8 +56,12 @@ public class GroupDao extends BaseDao<DBGroup> { * @return */ public List<DBGroup> getAllGroupsForDomain(DBDomain domain) { + return getAllGroupsForDomain(domain.getId()); + } + + public List<DBGroup> getAllGroupsForDomain(Long domainId) { TypedQuery<DBGroup> query = memEManager.createNamedQuery(QUERY_GROUP_BY_DOMAIN, DBGroup.class); - query.setParameter(PARAM_DOMAIN_ID, domain.getId()); + query.setParameter(PARAM_DOMAIN_ID, domainId); return query.getResultList(); } @@ -70,18 +75,32 @@ public class GroupDao extends BaseDao<DBGroup> { * @throws IllegalStateException if no group is not configured */ public Optional<DBGroup> getGroupByNameAndDomain(String name, DBDomain domain) { + return getGroupByNameAndDomain(name, domain.getId()); + } + + /** + * Returns the group or Optional.empty() if there is no group for name and domain. + * + * @param name is the group name + * @param domainId where the group is registered + * + * @return the only single record for name from smp_group table or empty value + * @throws IllegalStateException if no group is not configured + */ + public Optional<DBGroup> getGroupByNameAndDomain(String name, Long domainId) { try { TypedQuery<DBGroup> query = memEManager.createNamedQuery(QUERY_GROUP_BY_NAME_DOMAIN, DBGroup.class); query.setParameter(PARAM_NAME, name); - query.setParameter(PARAM_DOMAIN_ID, domain.getId()); + query.setParameter(PARAM_DOMAIN_ID, domainId); return Optional.of(query.getSingleResult()); } catch (NoResultException e) { return Optional.empty(); } catch (NonUniqueResultException e) { - throw new IllegalStateException(ILLEGAL_STATE_DOMAIN_MULTIPLE_ENTRY.getMessage(name, domain.getDomainCode())); + throw new IllegalStateException(ILLEGAL_STATE_DOMAIN_GROUP_MULTIPLE_ENTRY.getMessage(name,domainId)); } } + /** * Returns the group or Optional.empty() if there is no group for name and domain code * @@ -110,8 +129,8 @@ public class GroupDao extends BaseDao<DBGroup> { * False if entity did not exist, so nothing was changed */ @Transactional - public boolean removeByNameAndDomain(String domainCode, DBDomain domain) { - Optional<DBGroup> optd = getGroupByNameAndDomain(domainCode, domain); + public boolean removeByNameAndDomain(String name, DBDomain domain) { + Optional<DBGroup> optd = getGroupByNameAndDomain(name, domain); if (optd.isPresent()) { memEManager.remove(optd.get()); return true; diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java deleted file mode 100644 index 7eeb2959c7854ac60965898255cbab8625d29b09..0000000000000000000000000000000000000000 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright 2017 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.edelivery.smp.services; - -import eu.europa.ec.edelivery.smp.conversion.IdentifierService; -import eu.europa.ec.edelivery.smp.data.dao.ResourceDao; -import eu.europa.ec.edelivery.smp.data.dao.UserDao; -import eu.europa.ec.edelivery.smp.data.model.*; -import eu.europa.ec.edelivery.smp.data.model.doc.DBResource; -import eu.europa.ec.edelivery.smp.data.model.user.DBUser; -import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; -import eu.europa.ec.edelivery.smp.identifiers.Identifier; -import eu.europa.ec.edelivery.smp.logging.SMPLogger; -import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; -import eu.europa.ec.edelivery.smp.logging.SMPMessageCode; -import eu.europa.ec.edelivery.smp.security.ResourceGuard; -import eu.europa.ec.edelivery.smp.sml.SmlConnector; -import eu.europa.ec.edelivery.text.DistinguishedNamesCodingUtil; -import org.apache.commons.lang3.StringUtils; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.io.UnsupportedEncodingException; -import java.util.Optional; -import java.util.regex.Pattern; - -import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*; -import static java.net.URLDecoder.decode; -import static org.apache.commons.lang3.StringUtils.isNotBlank; - -/** - * Purpose of class is to test ServiceGroupService base methods - * - * @author gutowpa - * @since 3.0.0 - */ -@Service -public class ServiceGroupService { - - private static final String UTF_8 = "UTF-8"; - - private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceGroupService.class); - - @Autowired - private IdentifierService identifierService; - - @Autowired - private ResourceGuard resourceGuard; - - @Autowired - private ResourceDao serviceGroupDao; - - @Autowired - private UserDao userDao; - - @Autowired - private DomainService domainService; - - @Autowired - private SmlConnector smlConnector; - - @Autowired - private ConfigurationService configurationService; - - /** - * Method returns ServiceGroup entity for participant with references. If domain is null/empty it returns ServiceMetadata - * for all domains else it returns metadata only for particular domain. - * If domain is given and participantId is not defined on that domain than NotFoundException if thrown. - * - * @param participantId participant identifier object - * @return ServiceGroup for participant id - */ - public ServiceGroup getServiceGroup(Identifier participantId) { - // normalize participant identifier - Identifier normalizedServiceGroupId = identifierService.normalizeParticipant(participantId); - Optional<DBResource> sg = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(), - normalizedServiceGroupId.getScheme()); - if (!sg.isPresent()) { - throw new SMPRuntimeException(SG_NOT_EXISTS, normalizedServiceGroupId.getValue(), - normalizedServiceGroupId.getScheme()); - } - return toServiceGroup(sg.get(), configurationService.getParticipantIdentifierUrnValidationRexExp()); - } - - /** - * Method save (or update if exists) serviceGroup for domain and servicegroup owner - * - * @param serviceGroup service group entity to be stored - * @param domain domain of service group - * @param serviceGroupOwner owner of the service group - * @param authenticatedUser authenticated user who is trying to save service group - * @return return true if object was stored - */ - @Transactional - public boolean saveServiceGroup(ServiceGroup serviceGroup, String domain, String serviceGroupOwner, String authenticatedUser) { - - // normalize participant identifier - Identifier normalizedParticipantId = identifierService.normalizeParticipant(serviceGroup.getParticipantIdentifier().getScheme(), serviceGroup.getParticipantIdentifier().getValue()); - LOG.businessDebug(SMPMessageCode.BUS_SAVE_SERVICE_GROUP, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme()); - - // normalize service group owner - - - String ownerName = defineGroupOwner(serviceGroupOwner, authenticatedUser); - Optional<DBUser> newOwner = userDao.findUserByIdentifier(ownerName); - if (!newOwner.isPresent() - && !StringUtils.isBlank(serviceGroupOwner) && serviceGroupOwner.contains(":")) { - // try harder - String[] val = splitSerialFromSubject(ownerName); - String newOwnerName = DistinguishedNamesCodingUtil.normalizeDN(val[0]) + ':' + val[1]; - LOG.info("Owner not found: [{}] try with normalized owner: [{}].", ownerName, newOwnerName); - newOwner = userDao.findUserByIdentifier(newOwnerName); - ownerName = newOwnerName; - } - - if (!newOwner.isPresent()) { - LOG.error("The owner [{}] does not exist! Save service group is rejected!", ownerName); - SMPRuntimeException ex = new SMPRuntimeException(INVALID_OWNER, ownerName); - LOG.businessError(SMPMessageCode.BUS_SAVE_SERVICE_GROUP_FAILED, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme(), ex.getMessage()); - throw ex; - } - // get domain - DBDomain dmn = domainService.getDomain(domain); - // get servicegroup - Optional<DBResource> dbServiceGroup = serviceGroupDao.findServiceGroup(normalizedParticipantId.getValue(), - normalizedParticipantId.getScheme()); - -/* - byte[] extensions = ServiceGroupConverter.extractExtensionsPayload(serviceGroup); - - if (dbServiceGroup.isPresent()) { - // service already exists. - // check if user has rights to modified - // test service owner - DBResource sg = dbServiceGroup.get(); - validateOwnership(ownerName, sg); - //check is domain exists - Optional<DBDomainResourceDef> sgd = sg.getServiceGroupForDomain(dmn.getDomainCode()); - if (!sgd.isPresent()) { - SMPRuntimeException ex = new SMPRuntimeException(SG_NOT_REGISTRED_FOR_DOMAIN, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme()); - LOG.businessError(SMPMessageCode.BUS_SAVE_SERVICE_GROUP_FAILED, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme(), ex.getMessage()); - throw ex; - } - //update extensions - sg.setExtension(extensions); - serviceGroupDao.update(sg); - return false; - } else { - //Save ServiceGroup - DBResource newSg = new DBResource(); - newSg.setIdentifierValue(normalizedParticipantId.getValue()); - newSg.setIdentifierScheme(normalizedParticipantId.getScheme()); - newSg.setExtension(extensions); - newSg.addDomain(dmn); // add initial domain - // set initial domain as not registered - newSg.getResourceDomains().get(0).setSmlRegistered(false); - - // persist (make sure this is not in transaction) - serviceGroupDao.persistFlushDetach(newSg); - // register to SML - boolean registered = smlConnector.registerInDns(normalizedParticipantId, dmn); - if (registered) { - // update status in database - newSg.getResourceDomains().get(0).setSmlRegistered(registered); - serviceGroupDao.update(newSg); - } - return true; - } - - */ - return false; - } - - /** - * Method returns URL decoded serviceGroupOwner if not null/empty, else return authenticated user. If - * User cannot be decoded SMPRuntimeException is thrown. - * - * @param serviceGroupOwner - * @param authenticatedUser - * @return database owner string. - */ - protected String defineGroupOwner(final String serviceGroupOwner, final String authenticatedUser) { - try { - return isNotBlank(serviceGroupOwner) ? decode(serviceGroupOwner, UTF_8) : authenticatedUser; - } catch (UnsupportedEncodingException | IllegalArgumentException ex) { - LOG.error("Error occurred while decoding serviceGroupOwner '" + serviceGroupOwner + "'", ex); - throw new SMPRuntimeException(INVALID_ENCODING, serviceGroupOwner, "Unsupported or invalid encoding: " + ex.getMessage()); - - } - - } - - public static String[] splitSerialFromSubject(String certificateId) { - - - int idx = certificateId.lastIndexOf(":"); - if (idx <= 0) { - throw new SMPRuntimeException(INVALID_OWNER, certificateId); - } - return new String[]{certificateId.substring(0, idx), certificateId.substring(idx + 1)}; - - } - - /** - * Method validates if user owner with identifier is owner of servicegroup - * - * @param ownerIdentifier - * @param dbsg - */ - protected void validateOwnership(String ownerIdentifier, DBResource dbsg) { - Optional<DBUser> own = userDao.findUserByIdentifier(ownerIdentifier); - if (!own.isPresent()) { - throw new SMPRuntimeException(USER_NOT_EXISTS); - } - - if (!resourceGuard.isResourceAdmin(ownerIdentifier, dbsg.getIdentifierValue(), dbsg.getIdentifierScheme())){ - throw new SMPRuntimeException(USER_IS_NOT_OWNER, ownerIdentifier, - dbsg.getIdentifierValue(), dbsg.getIdentifierScheme()); - } - } - - /** - * Method validates if user owner with identifier is owner of servicegroup - * - * @param userId - * @param serviceMetadataID - */ - @Transactional - public boolean isServiceGroupOwnerForMetadataID(long userId, long serviceMetadataID) { - return serviceGroupDao.findServiceGroupDomainForUserIdAndMetadataId(userId, serviceMetadataID).isPresent(); - } - - - - @Transactional - public void deleteServiceGroup(Identifier serviceGroupId) { - /* - final ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(serviceGroupId); - - Optional<DBResource> dbServiceGroup = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(), - normalizedServiceGroupId.getScheme()); - - if (!dbServiceGroup.isPresent()) { - throw new SMPRuntimeException(SG_NOT_EXISTS, normalizedServiceGroupId.getValue(), - normalizedServiceGroupId.getScheme()); - } - DBResource dsg = dbServiceGroup.get(); - // register to SML - // unergister all the domains - for (DBDomainResourceDef sgdom : dsg.getResourceDomains()) { - if (sgdom.isSmlRegistered()) { - smlConnector.unregisterFromDns(normalizedServiceGroupId, sgdom.getDomain()); - } - } - - serviceGroupDao.removeServiceGroup(dsg); - - */ - } - - /** - * Method returns Oasis ServiceGroup entity with extension and - * empty ServiceMetadataReferenceCollectionType. If extension can not be converted to jaxb object than - * ConversionException is thrown. - * - * @param dsg - database service group entity - * @param concatenatePartyId - regular expression if servicegroup in party identifier must be concatenate and returned in string value. - * @return Oasis ServiceGroup entity or null if parameter is null - */ - public ServiceGroup toServiceGroup(DBResource dsg, Pattern concatenatePartyId) { -/*todo - if (dsg == null) { - return null; - } - - ServiceGroup serviceGroup = new ServiceGroup(); - String schema = dsg.getIdentifierScheme(); - String value = dsg.getIdentifierValue(); - - if (StringUtils.isNotBlank(schema) && concatenatePartyId != null && concatenatePartyId.matcher(schema).matches()) { - value = identifierService.formatParticipant(schema, value); - schema = null; - } - Identifier identifier = new Identifier(value, schema); - serviceGroup.setParticipantIdentifier(identifier); - if (dsg.getExtension() != null) { - try { - List<ExtensionType> extensions = ExtensionConverter.unmarshalExtensions(dsg.getExtension()); - serviceGroup.getExtensions().addAll(extensions); - } catch (JAXBException e) { - throw new SMPRuntimeException(INVALID_EXTENSION_FOR_SG, e, dsg.getIdentifierValue(), - dsg.getIdentifierScheme(), ExceptionUtils.getRootCauseMessage(e)); - } - } - serviceGroup.setServiceMetadataReferenceCollection(new ServiceMetadataReferenceCollectionType()); - - return serviceGroup; - - */ return null; - } -} diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIGroupPublicService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIGroupPublicService.java new file mode 100644 index 0000000000000000000000000000000000000000..818bda65dec05d50bf31c83b49613a48efbb00b3 --- /dev/null +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIGroupPublicService.java @@ -0,0 +1,125 @@ +package eu.europa.ec.edelivery.smp.services.ui; + +import eu.europa.ec.edelivery.smp.data.dao.BaseDao; +import eu.europa.ec.edelivery.smp.data.dao.DomainDao; +import eu.europa.ec.edelivery.smp.data.dao.GroupDao; +import eu.europa.ec.edelivery.smp.data.model.DBDomain; +import eu.europa.ec.edelivery.smp.data.model.DBGroup; +import eu.europa.ec.edelivery.smp.data.ui.GroupRO; +import eu.europa.ec.edelivery.smp.data.ui.ServiceResult; +import eu.europa.ec.edelivery.smp.exceptions.ErrorCode; +import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; +import eu.europa.ec.edelivery.smp.logging.SMPLogger; +import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; +import org.springframework.core.convert.ConversionService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * Service bean provides only public group management methods. + * + * @author Joze Rihtarsic + * @since 5.0 + */ +@Service +public class UIGroupPublicService extends UIServiceBase<DBGroup, GroupRO> { + + private static final SMPLogger LOG = SMPLoggerFactory.getLogger(UIGroupPublicService.class); + private final GroupDao groupDao; + private final DomainDao domainDao; + private final ConversionService conversionService; + + public UIGroupPublicService(GroupDao groupDao, DomainDao domainDao, ConversionService conversionService) { + this.groupDao = groupDao; + this.domainDao = domainDao; + this.conversionService = conversionService; + } + + @Override + protected BaseDao<DBGroup> getDatabaseDao() { + return groupDao; + } + + /** + * Method returns Domain resource object list for page. + * + * @param page + * @param pageSize + * @param sortField + * @param sortOrder + * @param filter + * @return + */ + public ServiceResult<GroupRO> getTableList(int page, int pageSize, + String sortField, + String sortOrder, Object filter) { + LOG.debug("Query for public domain data: page: [{}], page size [{}], sort: [{}], filter: [{}].", page, pageSize, sortField, filter); + return super.getTableList(page, pageSize, sortField, sortOrder, filter); + } + + @Transactional + public List<GroupRO> getAllGroupsForDomain(Long domainId) { + List<DBGroup> domainGroups = groupDao.getAllGroupsForDomain(domainId); + return domainGroups.stream().map(domain -> conversionService.convert(domain, GroupRO.class)) + .collect(Collectors.toList()); + } + + @Transactional + public GroupRO createGroupForDomain(Long domainId, GroupRO groupRO) { + LOG.info("create group [{}] to domain [{}]", groupRO, domainId); + + Optional<DBGroup> optGroup = groupDao.getGroupByNameAndDomain(groupRO.getGroupName(), domainId); + if (optGroup.isPresent()) { + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "CreateGroup", "Group with name [" + groupRO.getGroupName() + "] already exists!"); + } + DBDomain domain = domainDao.find(domainId); + + DBGroup group = new DBGroup(); + group.setGroupName(groupRO.getGroupName()); + group.setGroupDescription(groupRO.getGroupDescription()); + group.setVisibility(groupRO.getVisibility()); + group.setDomain(domain); + // to get ID for conversion + domainDao.persistFlushDetach(domain); + + return conversionService.convert(group, GroupRO.class); + } + + @Transactional + public GroupRO deleteGroupFromDomain(Long domainId, Long groupId) { + LOG.info("delete group [{}] from domain [{}]", groupId, domainId); + + DBGroup group = groupDao.find(groupId); + if (group == null) { + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "DeleteGroup", "Can not find group to delete"); + } + + if (Objects.equals(group.getDomain().getId(), domainId)) { + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "DeleteGroup", "Group does not belong to domain"); + } + groupDao.remove(group); + return conversionService.convert(group, GroupRO.class); + } +/* + @Transactional + public MemberRO deleteMemberFromDomain(Long domainId, Long memberId) { + LOG.info("Delete member [{}] from domain [{}]", memberId, domainId); + DBDomainMember domainMember = domainMemberDao.find(memberId); + if (domainMember == null) { + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Membership", "Membership does not exists!"); + } + if (!Objects.equals(domainMember.getDomain().getId(),domainId )){ + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Membership", "Membership does not belong to domain!"); + } + + domainMemberDao.remove(domainMember); + return conversionService.convert(domainMember, MemberRO.class); + } + + */ +} diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java index 84f332dd8e64d6292c75b21691d8dde9c1a15445..52fbe52f1c8d009556f6fda415167887d1e64431 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java @@ -5,7 +5,7 @@ import eu.europa.ec.edelivery.smp.data.dao.BaseDao; import eu.europa.ec.edelivery.smp.data.dao.DomainDao; import eu.europa.ec.edelivery.smp.data.dao.ResourceDao; import eu.europa.ec.edelivery.smp.data.dao.UserDao; -import eu.europa.ec.edelivery.smp.data.model.*; +import eu.europa.ec.edelivery.smp.data.model.DBDomainResourceDef; import eu.europa.ec.edelivery.smp.data.model.doc.DBResource; import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource; import eu.europa.ec.edelivery.smp.data.ui.*; @@ -19,17 +19,12 @@ import eu.europa.ec.edelivery.smp.security.ResourceGuard; import eu.europa.ec.edelivery.smp.services.ConfigurationService; import eu.europa.ec.edelivery.smp.services.SMLIntegrationService; import eu.europa.ec.edelivery.smp.services.ui.filters.ResourceFilter; -import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException; -import eu.europa.ec.smp.api.validators.BdxSmpOasisValidator; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.UnsupportedEncodingException; import java.util.*; -import static eu.europa.ec.edelivery.smp.data.ui.ServiceGroupValidationRO.*; import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*; @Service @@ -37,7 +32,6 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou private static final SMPLogger LOG = SMPLoggerFactory.getLogger(UIServiceGroupService.class); - protected final DomainDao domainDao; protected final ResourceDao serviceGroupDao; protected final UserDao userDao; @@ -551,8 +545,8 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou * @return */ private byte[] validateServiceMetadata(ServiceMetadataRO serviceMetadataRO) { - byte[] buff; - + byte[] buff = null; +/* try { buff = serviceMetadataRO.getXmlContent().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { @@ -563,6 +557,7 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou } catch (XmlInvalidAgainstSchemaException e) { throw new SMPRuntimeException(INVALID_SMD_XML, ExceptionUtils.getRootCauseMessage(e)); } + */ /* ServiceMetadata smd = ServiceMetadataConverter.unmarshal(buff); if (smd.getServiceInformation() != null) { @@ -696,39 +691,39 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou */ public ServiceGroupValidationRO validateServiceGroup(ServiceGroupValidationRO serviceGroup) { /** - if (serviceGroup == null) { - throw new SMPRuntimeException(INVALID_REQUEST, "Validate extension", "Missing Extension parameter"); - } // if new check if service group already exist - - if (serviceGroup.getStatusAction() == EntityROStatus.NEW.getStatusNumber()) { - Identifier normalizedParticipant = identifierService - .normalizeParticipant( - serviceGroup.getParticipantScheme(), - serviceGroup.getParticipantIdentifier()); - Optional<DBResource> sg = serviceGroupDao.findServiceGroup(normalizedParticipant.getValue(), - normalizedParticipant.getScheme()); - if (sg.isPresent()) { - serviceGroup.setErrorMessage("Service group: " + serviceGroup.getParticipantScheme() + ":" + serviceGroup.getParticipantIdentifier() + - " already exists!"); - serviceGroup.setErrorCode(ERROR_CODE_SERVICE_GROUP_EXISTS); - return serviceGroup; - } - } - - if (StringUtils.isBlank(serviceGroup.getExtension())) { - // empty extension is also a valid extension - serviceGroup.setErrorMessage(null); - } else { - try { - byte[] buff = serviceGroup.getExtension().getBytes("UTF-8"); - ExtensionConverter.validateExtensionBySchema(buff); // validate by schema - serviceGroup.setErrorMessage(null); - serviceGroup.setErrorCode(ERROR_CODE_OK); - } catch (XmlInvalidAgainstSchemaException | UnsupportedEncodingException e) { - serviceGroup.setErrorMessage(ExceptionUtils.getRootCauseMessage(e)); - serviceGroup.setErrorCode(ERROR_CODE_INVALID_EXTENSION); - } - } + if (serviceGroup == null) { + throw new SMPRuntimeException(INVALID_REQUEST, "Validate extension", "Missing Extension parameter"); + } // if new check if service group already exist + + if (serviceGroup.getStatusAction() == EntityROStatus.NEW.getStatusNumber()) { + Identifier normalizedParticipant = identifierService + .normalizeParticipant( + serviceGroup.getParticipantScheme(), + serviceGroup.getParticipantIdentifier()); + Optional<DBResource> sg = serviceGroupDao.findServiceGroup(normalizedParticipant.getValue(), + normalizedParticipant.getScheme()); + if (sg.isPresent()) { + serviceGroup.setErrorMessage("Service group: " + serviceGroup.getParticipantScheme() + ":" + serviceGroup.getParticipantIdentifier() + + " already exists!"); + serviceGroup.setErrorCode(ERROR_CODE_SERVICE_GROUP_EXISTS); + return serviceGroup; + } + } + + if (StringUtils.isBlank(serviceGroup.getExtension())) { + // empty extension is also a valid extension + serviceGroup.setErrorMessage(null); + } else { + try { + byte[] buff = serviceGroup.getExtension().getBytes("UTF-8"); + ExtensionConverter.validateExtensionBySchema(buff); // validate by schema + serviceGroup.setErrorMessage(null); + serviceGroup.setErrorCode(ERROR_CODE_OK); + } catch (XmlInvalidAgainstSchemaException | UnsupportedEncodingException e) { + serviceGroup.setErrorMessage(ExceptionUtils.getRootCauseMessage(e)); + serviceGroup.setErrorCode(ERROR_CODE_INVALID_EXTENSION); + } + } */ return serviceGroup; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java index b4e85fb928e3892f994f264e1f94fc238cd3b45f..c53f74fa7a68ab9e2ae1f5234ed7ebd4a6c3d04c 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java @@ -1,6 +1,5 @@ package eu.europa.ec.edelivery.smp.services.ui; -import eu.europa.ec.edelivery.security.utils.X509CertificateUtils; import eu.europa.ec.edelivery.smp.conversion.IdentifierService; import eu.europa.ec.edelivery.smp.data.dao.BaseDao; import eu.europa.ec.edelivery.smp.data.dao.DomainDao; @@ -9,32 +8,15 @@ import eu.europa.ec.edelivery.smp.data.dao.UserDao; import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource; import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataRO; import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataValidationRO; -import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; -import eu.europa.ec.edelivery.smp.identifiers.Identifier; import eu.europa.ec.edelivery.smp.logging.SMPLogger; import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; import eu.europa.ec.edelivery.smp.services.ConfigurationService; -import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException; -import eu.europa.ec.smp.api.validators.BdxSmpOasisValidator; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.EndpointType; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ProcessType; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadata; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.UnsupportedEncodingException; import java.nio.charset.IllegalCharsetNameException; -import java.security.PublicKey; import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import static eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum.DOCUMENT_RESTRICTION_CERT_TYPES; -import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.INVALID_REQUEST; /** * Services for managing the Service metadata @@ -99,7 +81,7 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi */ public ServiceMetadataValidationRO validateServiceMetadata(ServiceMetadataValidationRO serviceMetadataRO) { - byte[] buff; + /* byte[] buff; if (serviceMetadataRO == null) { throw new SMPRuntimeException(INVALID_REQUEST, "Validate service metadata", "Missing servicemetadata parameter"); } else if (StringUtils.isBlank(serviceMetadataRO.getXmlContent())) { @@ -134,6 +116,8 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi serviceMetadataRO.setErrorMessage(ExceptionUtils.getRootCauseMessage(e)); return serviceMetadataRO; } + + */ /* TODO // validate data ServiceMetadata smd = ServiceMetadataConverter.unmarshal(buff); @@ -173,9 +157,11 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi serviceMetadataRO.setErrorMessage(ExceptionUtils.getRootCauseMessage(e)); return serviceMetadataRO; } + } */ - } - return serviceMetadataRO; + + //return serviceMetadataRO; + return null; } /** @@ -183,58 +169,58 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi * * @param smd ServiceMetadata document * @throws CertificateException exception if certificate is not valid or the allowed key type - */ + public void validateServiceMetadataCertificates(ServiceMetadata smd) throws CertificateException { - List<EndpointType> endpointTypeList = searchAllEndpoints(smd); - for (EndpointType endpointType : endpointTypeList) { - validateCertificate(endpointType.getCertificate()); - } + List<EndpointType> endpointTypeList = searchAllEndpoints(smd); + for (EndpointType endpointType : endpointTypeList) { + validateCertificate(endpointType.getCertificate()); } + + } + */ /** * Method returns all EndpointTypes * * @param smd - * @return - */ - public List<EndpointType> searchAllEndpoints(ServiceMetadata smd) { - List<ProcessType> processTypeList = smd.getServiceInformation() != null ? - smd.getServiceInformation().getProcessList().getProcesses() : Collections.emptyList(); + * @return public List<EndpointType> searchAllEndpoints(ServiceMetadata smd) { + List<ProcessType> processTypeList = smd.getServiceInformation() != null ? + smd.getServiceInformation().getProcessList().getProcesses() : Collections.emptyList(); - List<EndpointType> endpointTypeList = new ArrayList<>(); - processTypeList.stream().forEach(processType -> endpointTypeList.addAll(processType.getServiceEndpointList() != null ? - processType.getServiceEndpointList().getEndpoints() : Collections.emptyList())); + List<EndpointType> endpointTypeList = new ArrayList<>(); + processTypeList.stream().forEach(processType -> endpointTypeList.addAll(processType.getServiceEndpointList() != null ? + processType.getServiceEndpointList().getEndpoints() : Collections.emptyList())); - return endpointTypeList; + return endpointTypeList; } - + */ /** * Validate the certificate * * @param crtData x509 encoded byte array * @throws CertificateException - */ + public void validateCertificate(byte[] crtData) throws CertificateException { - if (crtData == null || crtData.length == 0) { - LOG.debug("Skip certificate validation: Empty certificate."); - return; - } - X509Certificate cert = X509CertificateUtils.getX509Certificate(crtData); - // validate is certificate is valid - cert.checkValidity(); - // validate if certificate has the right key algorithm - PublicKey key = cert.getPublicKey(); - List<String> allowedKeyAlgs = configurationService.getAllowedDocumentCertificateTypes(); - if (allowedKeyAlgs == null || allowedKeyAlgs.isEmpty()) { - LOG.debug("Ignore the service metadata certificate key type validation (Empty property: [{}]).", DOCUMENT_RESTRICTION_CERT_TYPES.getProperty()); - return; - } + if (crtData == null || crtData.length == 0) { + LOG.debug("Skip certificate validation: Empty certificate."); + return; + } + X509Certificate cert = X509CertificateUtils.getX509Certificate(crtData); + // validate is certificate is valid + cert.checkValidity(); + // validate if certificate has the right key algorithm + PublicKey key = cert.getPublicKey(); + List<String> allowedKeyAlgs = configurationService.getAllowedDocumentCertificateTypes(); + if (allowedKeyAlgs == null || allowedKeyAlgs.isEmpty()) { + LOG.debug("Ignore the service metadata certificate key type validation (Empty property: [{}]).", DOCUMENT_RESTRICTION_CERT_TYPES.getProperty()); + return; + } - if (StringUtils.equalsAnyIgnoreCase(key.getAlgorithm(), allowedKeyAlgs.toArray(new String[]{}))) { - LOG.debug("Certificate has valid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs); - return; - } - LOG.debug("Certificate has invalid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs); - throw new CertificateException("Certificate does not have allowed key type!"); + if (StringUtils.equalsAnyIgnoreCase(key.getAlgorithm(), allowedKeyAlgs.toArray(new String[]{}))) { + LOG.debug("Certificate has valid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs); + return; } + LOG.debug("Certificate has invalid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs); + throw new CertificateException("Certificate does not have allowed key type!"); + } */ } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java index 2eae82702c689f4e54741703356904623f112a40..0bc9fb999aa8793ec5a8ac98b109f816216d2fe3 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java @@ -12,6 +12,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import java.util.Arrays; +import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; @@ -26,8 +27,11 @@ import java.util.stream.Collectors; public class SessionSecurityUtils { private static final SMPLogger LOG = SMPLoggerFactory.getLogger(SessionSecurityUtils.class); + + protected SessionSecurityUtils() { + } + /** - * * Current supported SMP authentication tokens. */ protected static final List<Class> sessionAuthenticationClasses = Arrays.asList( @@ -48,7 +52,11 @@ public class SessionSecurityUtils { } SecurityUtils.Secret secret = getAuthenticationSecret(); String idValue = id.toString(); - return secret != null ? SecurityUtils.encryptURLSafe(secret, idValue) : idValue; + if (secret == null) { + return idValue; + } + String valWithSeed = idValue + '#' + Calendar.getInstance().getTimeInMillis(); + return SecurityUtils.encryptURLSafe(secret, valWithSeed); } @@ -57,7 +65,13 @@ public class SessionSecurityUtils { return null; } SecurityUtils.Secret secret = getAuthenticationSecret(); - String value = secret != null ? SecurityUtils.decryptUrlSafe(secret, id) : id; + if (secret == null) { + // try to convert to long value + return new Long(id); + } + String decVal = SecurityUtils.decryptUrlSafe(secret, id); + int indexOfSeparator = decVal.indexOf('#'); + String value = indexOfSeparator > -1 ? decVal.substring(0, indexOfSeparator) : decVal; return new Long(value); } diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java index 7c63a380e55aed65f2416c537b736367c22ff659..84feda5328e12810eec0da67098957730c97a772 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java @@ -5,7 +5,6 @@ import eu.europa.ec.edelivery.smp.data.model.DBDomain; import org.mockito.ArgumentMatchers; import org.mockito.BDDMockito; import org.mockito.Mockito; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -24,7 +23,8 @@ import static org.springframework.beans.factory.config.ConfigurableBeanFactory.S @Component public class SmlIntegrationConfiguration { - protected final ParticipantIdentifierType PARTICIPANT_ID = new ParticipantIdentifierType("sample:value", "sample:scheme"); + //protected final ParticipantIdentifierType PARTICIPANT_ID = new ParticipantIdentifierType("sample:value", "sample:scheme"); + protected DBDomain defaultDomain; @@ -105,9 +105,7 @@ public class SmlIntegrationConfiguration { return clientMock; } - public ParticipantIdentifierType getParticipantId() { - return PARTICIPANT_ID; - } + public DBDomain getDefaultDomain() { return defaultDomain; diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java index def8fc7f1f1ee90629ddb46b792ae2cba3abb286..4cdd7142dab33ec4f027a7ed5d3898489a6c7259 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java @@ -6,7 +6,7 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; + import java.util.Arrays; import java.util.Collection; diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java deleted file mode 100644 index 2818e648f3d45aa4f6f39ebc45b8c7b5e7fa19c6..0000000000000000000000000000000000000000 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2018 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.edelivery.smp.services; - -import eu.europa.ec.edelivery.smp.data.model.doc.DBResource; -import eu.europa.ec.edelivery.smp.data.model.user.DBUser; -import eu.europa.ec.edelivery.smp.exceptions.ErrorCode; -import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; -import eu.europa.ec.edelivery.smp.testutil.TestConstants; -import eu.europa.ec.edelivery.smp.testutil.TestDBUtils; -import org.hamcrest.MatcherAssert; -import org.hamcrest.Matchers; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Optional; -import java.util.regex.Pattern; - -import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*; -import static org.junit.Assert.*; - -/** - * Purpose of class is to test ServiceGroupService base methods - * - * @author Joze Rihtarsic - * @since 4.1 - */ -@Ignore -public class ServiceGroupServiceIntegrationTest extends AbstractServiceIntegrationTest { - public static Pattern DEFAULT_URN_PATTERN = Pattern.compile("^(?i)((urn:)|(mailto:)).*$"); - - @Autowired - ServiceGroupService testInstance; - - @Before - public void initDatabase(){ - prepareDatabaseForSingleDomainEnv(); - } - - @Test - public void validateOwnershipUserNotExists(){ - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup( TEST_SG_ID_2, TEST_SG_SCHEMA_2); - assertTrue(dbsg.isPresent()); // test if exists - //test - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, () -> testInstance.validateOwnership("UserNotExist", dbsg.get())); - assertEquals(ErrorCode.USER_NOT_EXISTS.getMessage(), result.getMessage()); - } - - @Test - @Transactional - public void validateMethodOwnershipUserNotOnwner(){ - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2); - assertTrue(dbsg.isPresent()); // test if exists - - DBUser u3= TestDBUtils.createDBUserByCertificate(TestConstants.USER_CERT_3); - userDao.persistFlushDetach(u3); - //test - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, () -> testInstance.validateOwnership(USER_CERT_3, dbsg.get()) ); - assertEquals(ErrorCode.USER_IS_NOT_OWNER.getMessage(USER_CERT_3, - TEST_SG_ID_2, TEST_SG_SCHEMA_2), result.getMessage()); - - } - - @Test - public void toServiceGroupTest() { - // set - DBResource sg = TestDBUtils.createDBResource(); - - //when - ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, DEFAULT_URN_PATTERN); - assertNotNull(serviceGroup); - assertEquals(sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue()); - assertEquals(sg.getIdentifierScheme(), serviceGroup.getParticipantIdentifier().getScheme()); - assertEquals(1, serviceGroup.getExtensions().size()); - } - - @Test - public void toServiceGroupTestEBCorePartyIDNotContact() { - // set - - DBResource sg = TestDBUtils.createDBResource("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523"); - - //when - ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, null); - assertNotNull(serviceGroup); - assertEquals(sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue()); - assertEquals(sg.getIdentifierScheme(), serviceGroup.getParticipantIdentifier().getScheme()); - assertEquals(1, serviceGroup.getExtensions().size()); - } - - @Test - public void toServiceGroupTestEBCorePartyIDContact() { - // set - DBResource sg = TestDBUtils.createDBResource("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523"); - //when - ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, DEFAULT_URN_PATTERN); - assertNotNull(serviceGroup); - assertEquals(sg.getIdentifierScheme() +":" + sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue()); - assertNull(serviceGroup.getParticipantIdentifier().getScheme()); - assertEquals(1, serviceGroup.getExtensions().size()); - } - - @Test - public void toServiceGroupTestMultiExtensions() { - // set - /* - DBResource sg = TestDBUtils.createDBServiceGroup(); - sg.setExtension(ExtensionConverter.concatByteArrays(TestDBUtils.generateExtension(), TestDBUtils.generateExtension())); - - //when-then - ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, null); - assertNotNull(serviceGroup); - assertEquals(sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue()); - assertEquals(sg.getIdentifierScheme(), serviceGroup.getParticipantIdentifier().getScheme()); - assertEquals(2, serviceGroup.getExtensions().size()); - - */ - } - - @Test - public void toServiceGroupTestIsEmpty() { - // set - //when - ServiceGroup serviceGroup = testInstance.toServiceGroup(null, null); - assertNull(serviceGroup); - } - -} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceMultipleDomainsIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceMultipleDomainsIntegrationTest.java deleted file mode 100644 index ab17300b1ae4745d713183cd015159336e232e41..0000000000000000000000000000000000000000 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceMultipleDomainsIntegrationTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2018 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.edelivery.smp.services; - -import eu.europa.ec.edelivery.smp.data.model.user.DBUser; -import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum; -import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; -import eu.europa.ec.edelivery.smp.identifiers.Identifier; -import eu.europa.ec.edelivery.smp.testutil.TestConstants; -import eu.europa.ec.edelivery.smp.testutil.TestDBUtils; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; -import org.springframework.beans.factory.annotation.Autowired; - -import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.USER_IS_NOT_OWNER; -import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*; -import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsString; -import static org.junit.Assert.*; - -/** - * Created by gutowpa on 18/01/2018. - */ -@Ignore -public class ServiceGroupServiceMultipleDomainsIntegrationTest extends AbstractServiceIntegrationTest { - - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Autowired - protected ServiceGroupService testInstance; - - - @Before - public void prepareDatabase() { - - super.prepareDatabaseForMultipeDomainEnv(); - setDatabaseProperty(SMPPropertyEnum.SML_ENABLED,"false"); - } - - @Test - public void getServiceGroupForAllDomainTest() { - // given - Identifier serviceGroupId = new Identifier(); - serviceGroupId.setValue(TEST_SG_ID_2); - serviceGroupId.setScheme(TEST_SG_SCHEMA_2); - - // when - ServiceGroup sg = testInstance.getServiceGroup(serviceGroupId); - - // then - assertNotNull(sg); - assertEquals(TEST_SG_ID_2, sg.getParticipantIdentifier().getValue()); - assertEquals(TEST_SG_SCHEMA_2, sg.getParticipantIdentifier().getScheme()); - assertEquals(1, sg.getExtensions().size()); - } -/* - - @Test - public void createAndReadPositiveScenarioForMultipleDomain() throws IOException { - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH)); - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - assertFalse(dbsg.isPresent()); // test if exists - it must not :) - - // when - boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, TEST_DOMAIN_CODE_2, TestConstants.USERNAME_TOKEN_1, - TestConstants.USERNAME_TOKEN_1); - Optional<DBResource> optRes = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - - // then - assertTrue(bCreated); - assertTrue(optRes.isPresent()); - DBResource dbServiceGroup = optRes.get(); - assertEquals(1, dbServiceGroup.getResourceDomains().size()); - assertEquals(TEST_DOMAIN_CODE_2, dbServiceGroup.getResourceDomains().get(0).getDomain().getDomainCode()); - assertEquals(inServiceGroup.getParticipantIdentifier().getValue(), dbServiceGroup.getIdentifierValue()); - assertEquals(inServiceGroup.getParticipantIdentifier().getScheme(), dbServiceGroup.getIdentifierScheme()); - - } - - @Test - public void updateAndReadPositiveScenarioForMultipleDomain() throws IOException, JAXBException, XMLStreamException { - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH)); - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2); - assertTrue(dbsg.isPresent()); // test if exists - byte[] extension = dbsg.get().getExtension(); // test if exists - byte[] newExtension = ExtensionConverter.marshalExtensions(inServiceGroup.getExtensions()); - assertNotEquals(extension, newExtension); // extension updated - - // when - boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, TEST_DOMAIN_CODE_1, ""+ TestConstants.USERNAME_TOKEN_1, - TestConstants.USERNAME_TOKEN_1); - serviceGroupDao.clearPersistenceContext(); - - Optional<DBResource> optRes = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2); - - // then - assertFalse(bCreated); - assertTrue(optRes.isPresent()); - DBResource dbServiceGroup = optRes.get(); - assertEquals(1, dbServiceGroup.getResourceDomains().size()); - assertEquals(TEST_DOMAIN_CODE_1, dbServiceGroup.getResourceDomains().get(0).getDomain().getDomainCode()); - assertEquals(inServiceGroup.getParticipantIdentifier().getValue(), dbServiceGroup.getIdentifierValue()); - assertEquals(inServiceGroup.getParticipantIdentifier().getScheme(), dbServiceGroup.getIdentifierScheme()); - assertTrue(Arrays.equals(newExtension, dbServiceGroup.getExtension())); // extension updated - } -*/ - @Test - public void userIsNotOwnerOfServiceGroup() throws Throwable { - //given - /* - ServiceGroup newServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH)); - DBUser u3 = TestDBUtils.createDBUserByCertificate(TestConstants.USER_CERT_3); - userDao.persistFlushDetach(u3); - - expectedException.expect(SMPRuntimeException.class); - expectedException.expectMessage(USER_IS_NOT_OWNER.getMessage(USER_CERT_3, TEST_SG_ID_2, TEST_SG_SCHEMA_2)); - - //when-then - testInstance.saveServiceGroup(newServiceGroup, TEST_DOMAIN_CODE_2, TestConstants.USER_CERT_3, TestConstants.USER_CERT_3); - - */ - } - -} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java deleted file mode 100644 index 058c4dff54c0d67bd94d1a2446f3cdc6ee260720..0000000000000000000000000000000000000000 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Copyright 2018 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.edelivery.smp.services; - - -import eu.europa.ec.edelivery.smp.data.model.*; -import eu.europa.ec.edelivery.smp.data.model.doc.DBResource; -import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource; -import eu.europa.ec.edelivery.smp.data.model.user.DBUser; -import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum; -import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; -import eu.europa.ec.edelivery.smp.identifiers.Identifier; -import eu.europa.ec.edelivery.smp.testutil.TestConstants; -import org.hamcrest.CoreMatchers; -import org.hamcrest.MatcherAssert; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import javax.xml.bind.JAXBException; -import javax.xml.stream.XMLStreamException; -import java.io.IOException; -import java.util.Arrays; -import java.util.Optional; - -import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*; -import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*; -import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsString; -import static org.junit.Assert.*; - -/** - * Created by gutowpa on 17/01/2018. - */ -@Ignore -@RunWith(SpringRunner.class) -public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServiceIntegrationTest { - - @Autowired - protected ServiceGroupService testInstance; - - @Before - @Transactional - public void prepareDatabase() { - prepareDatabaseForSingleDomainEnv(); - setDatabaseProperty(SMPPropertyEnum.SML_ENABLED,"false"); - } - - @Test - public void isServiceGroupOwnerForMetadataID(){ - /* - // given - DBUser user = userDao.findUserByUsername(USERNAME_1).get(); - DBSubresource metadata = serviceMetadataDao.findServiceMetadata(TEST_SG_ID_1, TEST_SG_SCHEMA_1, - TEST_DOC_ID_1, TEST_DOC_SCHEMA_1).get(); - // when - Optional<DBDomainResourceDef> result = serviceGroupDao.findServiceGroupDomainForUserIdAndMetadataId(user.getId(), metadata.getId()); - // then - assertTrue(result.isPresent()); - - */ - } -/* - @Test - public void isServiceGroupOwnerForMetadataIDFailed(){ - // given - DBUser user = userDao.findUserByUsername(USERNAME_2).get(); - DBSubresource metadata = serviceMetadataDao.findServiceMetadata(TEST_SG_ID_1, TEST_SG_SCHEMA_1, - TEST_DOC_ID_1, TEST_DOC_SCHEMA_1).get(); - // when - Optional<DBDomainResourceDef> result = serviceGroupDao.findServiceGroupDomainForUserIdAndMetadataId(user.getId(), metadata.getId()); - // then - assertFalse(result.isPresent()); - } - - - - @Test - public void createAndReadPositiveScenarioForNullDomain() throws IOException { - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH)); - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - assertFalse(dbsg.isPresent()); // test if exists - DBDomain domain = domainDao.getTheOnlyDomain().get(); - assertNotNull(domain); - // when - boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, null, TestConstants.USERNAME_TOKEN_1, - TestConstants.USERNAME_TOKEN_1); - - Optional<DBResource> optRes= serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - - // then - assertTrue(bCreated); - dbAssertion.assertServiceGroupForOnlyDomain(inServiceGroup.getParticipantIdentifier().getValue(), - inServiceGroup.getParticipantIdentifier().getScheme(),domain.getDomainCode()); - - } - - @Test - public void createAndReadPositiveScenarioForWithDomain() throws IOException { - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH)); - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - assertFalse(dbsg.isPresent()); // test if exists - DBDomain domain = domainDao.getTheOnlyDomain().get(); - assertNotNull(domain); - - // when - boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, domain.getDomainCode(), TestConstants.USERNAME_TOKEN_1, - TestConstants.USERNAME_TOKEN_1); - - - Optional<DBResource> optRes= serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - - // then - assertTrue(bCreated); - dbAssertion.assertServiceGroupForOnlyDomain(inServiceGroup.getParticipantIdentifier().getValue(), - inServiceGroup.getParticipantIdentifier().getScheme(),domain.getDomainCode()); - } - - @Test - public void updateAndReadPositiveScenario() throws IOException, JAXBException, XMLStreamException { - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH)); - Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2); - assertTrue(dbsg.isPresent()); // test if exists - DBDomain domain = domainDao.getTheOnlyDomain().get(); - assertNotNull(domain); - - byte[] extension = dbsg.get().getExtension(); // test if exists - byte[] newExtension = ExtensionConverter.marshalExtensions(inServiceGroup.getExtensions()); - assertFalse(Arrays.equals(extension, newExtension)); // extension updated - - // when - boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, domain.getDomainCode(), TestConstants.USERNAME_TOKEN_1, - TestConstants.USERNAME_TOKEN_1); - - - Optional<DBResource> optRes= serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2); - - // then - assertFalse(bCreated); - dbAssertion.assertServiceGroupExtensionEqual(inServiceGroup.getParticipantIdentifier().getValue(), - inServiceGroup.getParticipantIdentifier().getScheme(), - newExtension); - } - - @Test - public void serviceGroupNotExistsWhenRetrievingSG() { - // when-then - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.getServiceGroup(new Identifier("not-existing", "bad-srv-grp") )); - - assertEquals(SG_NOT_EXISTS.getMessage("not-existing", "bad-srv-grp"), result.getMessage()); - } - - @Test - public void saveAndDeletePositiveScenario() throws IOException { - - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH)); - boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, null, TestConstants.USERNAME_TOKEN_1, - TestConstants.USERNAME_TOKEN_1); - assertTrue(bCreated); - serviceGroupDao.clearPersistenceContext(); - - //when - testInstance.deleteServiceGroup(inServiceGroup.getParticipantIdentifier()); - serviceGroupDao.clearPersistenceContext(); - - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.getServiceGroup(inServiceGroup.getParticipantIdentifier())); - assertEquals(SG_NOT_EXISTS.getMessage( inServiceGroup.getParticipantIdentifier().getValue(), inServiceGroup.getParticipantIdentifier().getScheme()) - , result.getMessage()); - - } - - @Test - public void defineGroupOwnerWhenOwnerIsNull(){ - String testUser = "user"; - String result = testInstance.defineGroupOwner(null, testUser); - assertEquals(testUser, result); - - result = testInstance.defineGroupOwner("", testUser); - assertEquals(testUser, result); - } - - @Test - public void defineGroupOwnerWhenOwnerIsNotNull(){ - String testUser = "user"; - String testOwner = "owner"; - String result = testInstance.defineGroupOwner(testOwner, testUser); - assertEquals(testOwner, result); - } - - - @Test - public void updateInvalidUserException() throws IOException, JAXBException { - - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH)); - Optional<DBResource> dbsg = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2); - Optional<DBUser> dbUser = userDao.findUserByIdentifier(TestConstants.USER_CERT_2); - assertTrue(dbsg.isPresent()); // test if exists - assertTrue(dbUser.isPresent()); // test if exists - //assertFalse(dbsg.get().getUsers().contains(dbUser.get())); // test not owner - - // when - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.saveServiceGroup(inServiceGroup,null, - TestConstants.USER_CERT_2, TestConstants.USER_CERT_2)); - - assertEquals(USER_IS_NOT_OWNER.getMessage(TestConstants.USER_CERT_2, - dbsg.get().getIdentifierValue(), dbsg.get().getIdentifierScheme()), result.getMessage()); - } - - @Test - public void updateUnknownUserException() throws IOException, JAXBException { - - // given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH)); - Optional<DBResource> dbsg = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2); - Optional<DBUser> dbUser = userDao.findUserByIdentifier(TestConstants.USER_CERT_3); - assertTrue(dbsg.isPresent()); // test if note exists - assertFalse(dbUser.isPresent()); // test if exists - // when - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.saveServiceGroup(inServiceGroup, null, - TestConstants.USER_CERT_3, TestConstants.USER_CERT_3)); - - assertEquals(INVALID_OWNER.getMessage(TestConstants.USER_CERT_3), result.getMessage()); - } - - @Test - public void updateInvalidUserEncodingException() throws IOException { - String username = "test::20%atest"; - //given - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH)); - - //when - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.saveServiceGroup(inServiceGroup, null, username, username)); - - MatcherAssert.assertThat(result.getMessage(), CoreMatchers.startsWith("Unsupported or invalid encoding")); - } - - @Test - public void savingUnderNotExistingDomainIsNotAllowed() throws Throwable { - //given - String domain="NOTEXISTINGDOMAIN"; - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH)); - - //execute - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1)); - - assertEquals(DOMAIN_NOT_EXISTS.getMessage(domain), result.getMessage()); - } - - @Test - public void onlyASCIICharactersAllowedInDomainId() throws Throwable { - //given - String domain="notAllowedChars:-_;#$"; - ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH)); - - //execute - SMPRuntimeException result = assertThrows(SMPRuntimeException.class, - ()->testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1)); - - assertEquals(INVALID_DOMAIN_CODE.getMessage(domain, - DomainService.DOMAIN_ID_PATTERN.pattern()), result.getMessage()); - } -*/ - @Test - public void urlsAreHandledByWebLayer() throws Throwable { - /* TODO - //when - ParticipantIdentifierType pt = new ParticipantIdentifierType(); - pt.setValue(TEST_SG_ID_2); - pt.setScheme(TEST_SG_SCHEMA_2); - // execute - ServiceGroup serviceGroup = testInstance.getServiceGroup(pt); - assertNotNull(serviceGroup); - //then - List<ServiceMetadataReferenceType> serviceMetadataReferences = serviceGroup.getServiceMetadataReferenceCollection().getServiceMetadataReferences(); - //URLs are handled in by the REST webservices layer - assertEquals(0, serviceMetadataReferences.size()); - - */ - } - -} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java deleted file mode 100644 index 594a3148e19968639b9e52032f4800e8d954b842..0000000000000000000000000000000000000000 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright 2017 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.edelivery.smp.services; - -import eu.europa.ec.edelivery.smp.conversion.IdentifierService; -import eu.europa.ec.edelivery.smp.data.model.DBDomain; -import eu.europa.ec.edelivery.smp.data.model.doc.DBResource; -import eu.europa.ec.edelivery.smp.identifiers.Identifier; -import eu.europa.ec.edelivery.smp.services.spi.SmpXmlSignatureService; -import eu.europa.ec.edelivery.smp.services.ui.UIKeystoreService; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.transaction.annotation.Transactional; -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; - -import javax.xml.bind.JAXBException; -import javax.xml.transform.TransformerException; -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.regex.Pattern; - - -import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*; -import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsByteArray; -import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.marshallToByteArray; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Created by gutowpa on 15/11/2017. - */ -@Ignore -@RunWith(SpringJUnit4ClassRunner.class) -public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTest { - - static Identifier PT_ID = null; - static Identifier DOC_ID = null; - - static { - PT_ID = new Identifier(); - PT_ID.setValue(TEST_SG_ID_PL2); - PT_ID.setScheme(TEST_SG_SCHEMA_PL2); - DOC_ID = new Identifier(); - DOC_ID.setValue(TEST_DOC_ID_PL2); - DOC_ID.setScheme(TEST_DOC_SCHEMA_PL2); - } - - Path resourceDirectory = Paths.get("src", "test", "resources", "keystores"); - - ConfigurationService configurationService = Mockito.mock(ConfigurationService.class); - - @Autowired - IdentifierService identifierService; - @Autowired - ServiceMetadataService testInstance; - @Autowired - UIKeystoreService uiKeystoreService; - @Autowired - SmpXmlSignatureService signer; - - @Rule - public ExpectedException expectedExeption = ExpectedException.none(); - - @Before - @Transactional - public void prepareDatabase() { - configurationService = Mockito.spy(configurationService); - ReflectionTestUtils.setField(uiKeystoreService, "configurationService", configurationService); - ReflectionTestUtils.setField(signer, "uiKeystoreService", uiKeystoreService); - ReflectionTestUtils.setField(testInstance, "signer", signer); - ReflectionTestUtils.setField(testInstance, "identifierService", identifierService); - - identifierService.configureParticipantIdentifierFormatter(null, null, Pattern.compile(".*")); - // set keystore properties - File keystoreFile = new File(resourceDirectory.toFile(), "smp-keystore.jks"); - Mockito.doReturn(keystoreFile).when(configurationService).getKeystoreFile(); - Mockito.doReturn(resourceDirectory.toFile()).when(configurationService).getSecurityFolder(); - Mockito.doReturn("test123").when(configurationService).getKeystoreCredentialToken(); - uiKeystoreService.refreshData(); - - prepareDatabaseForSingleDomainEnv(); - DBResource sg = new DBResource(); - sg.setIdentifierValue(TEST_SG_ID_PL2.toLowerCase()); - sg.setIdentifierScheme(TEST_SG_SCHEMA_PL2.toLowerCase()); - DBDomain domain = domainDao.getDomainByCode(TEST_DOMAIN_CODE_1).get(); - // sg.addDomain(domain); - serviceGroupDao.persistFlushDetach(sg); - } - - @Test - public void saveAndReadPositiveScenario() throws IOException, TransformerException, JAXBException { - //given - byte[] inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH); - // byte[] expectedSignedServiceMetadataXml = loadDocumentAsByteArray(SIGNED_SERVICE_METADATA_XML_PATH); - List<Identifier> docIdsBefore = testInstance.findServiceMetadataIdentifiers(PT_ID); - assertEquals(0, docIdsBefore.size()); - - //when - testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, inServiceMetadataXml); - List<Identifier> docIdsAfter = testInstance.findServiceMetadataIdentifiers(PT_ID); - Document outServiceMetadataDoc = testInstance.getServiceMetadataDocument(PT_ID, DOC_ID); - - //then - assertEquals(1, docIdsAfter.size()); - assertEquals(DOC_ID.getValue().toLowerCase(), docIdsAfter.get(0).getValue()); // normalized - assertEquals(DOC_ID.getScheme().toLowerCase(), docIdsAfter.get(0).getScheme()); // normalized - assertEquals("SignedServiceMetadata", outServiceMetadataDoc.getDocumentElement().getTagName()); - // has signature - assertEquals(1, outServiceMetadataDoc.getElementsByTagNameNS("http://www.w3.org/2000/09/xmldsig#", "Signature").getLength()); - // has service metadata - NodeList serviceMetadata = outServiceMetadataDoc.getElementsByTagNameNS("http://docs.oasis-open.org/bdxr/ns/SMP/2016/05", "ServiceMetadata"); - assertEquals(1, serviceMetadata.getLength()); - // assertArrayEquals(expectedSignedServiceMetadataXml, ServiceMetadataConverter.toByteArray(outServiceMetadataDoc)); - } -/* - @Test - public void serviceMetadataNotExistsWhenReading() { - - expectedExeption.expect(SMPRuntimeException.class); - expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(), - SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase())); - - testInstance.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID); - } - - - @Test - public void serviceMetadataNotExistsWhenDeleting() { - // given - expectedExeption.expect(SMPRuntimeException.class); - expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(), - SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase())); - // when - then - testInstance.deleteServiceMetadata(null, SERVICE_GROUP_ID, DOC_ID); - } - - @Test - public void saveAndDeletePositiveScenario() throws IOException { - //given - byte[] inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH); - testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, inServiceMetadataXml); - List<Identifier> docIdsBefore = testInstance.findServiceMetadataIdentifiers(PT_ID); - assertEquals(1, docIdsBefore.size()); - Optional<DBSubresource> DBSubresource = serviceMetadataDao.findServiceMetadata( - PT_ID.getValue().toLowerCase(), PT_ID.getScheme().toLowerCase(), - DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()); - assertTrue(DBSubresource.isPresent()); - - //when - testInstance.deleteServiceMetadata(null, PT_ID, DOC_ID); - - //then - List<Identifier> docIdsAfter = testInstance.findServiceMetadataIdentifiers(SERVICE_GROUP_ID); - assertEquals(0, docIdsAfter.size()); - - expectedExeption.expect(SMPRuntimeException.class); - expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(), - SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase())); - - testInstance.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID); - } - - @Test - public void updatePositiveScenario() throws IOException, JAXBException, TransformerException { - //given - byte[] oldServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH); - testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, oldServiceMetadataXml); - - ServiceMetadata newServiceMetadata = unmarshal(loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH)); - EndpointType endpoint = newServiceMetadata.getServiceInformation().getProcessList().getProcesses().get(0).getServiceEndpointList().getEndpoints().get(0); - endpoint.setServiceDescription("New Description"); - byte[] newServiceMetadataXml = marshallToByteArray(newServiceMetadata); - testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, newServiceMetadataXml); - - //when - Document resultServiceMetadataDoc = testInstance.getServiceMetadataDocument(PT_ID, DOC_ID); - //then - String newDescription = resultServiceMetadataDoc.getElementsByTagName("ServiceDescription").item(0).getTextContent(); - assertEquals("New Description", newDescription); - } - - @Test - public void findServiceMetadataIdsPositiveScenario() throws IOException, JAXBException, TransformerException { - //given - byte[] serviceMetadataXml1 = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH); - testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, serviceMetadataXml1); - - String secondDocIdValue = "second-doc-id"; - Identifier secondDocId = new Identifier(secondDocIdValue, DOC_ID.getScheme()); - ServiceMetadata serviceMetadata2 = unmarshal(loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH)); - serviceMetadata2.getServiceInformation().getDocumentIdentifier().setValue(secondDocIdValue); - byte[] serviceMetadataXml2 = marshallToByteArray(serviceMetadata2); - testInstance.saveServiceMetadata(null, PT_ID, secondDocId, serviceMetadataXml2); - - //when - List<Identifier> docIds = testInstance.findServiceMetadataIdentifiers(PT_ID); - - //then - assertEquals(2, docIds.size()); - Identifier docId1 = docIds.get(0); - assertEquals(DOC_ID.getScheme().toLowerCase(), docId1.getScheme()); - assertEquals(DOC_ID.getValue().toLowerCase(), docId1.getValue()); - Identifier docId2 = docIds.get(1); - assertEquals(DOC_ID.getScheme().toLowerCase(), docId2.getScheme()); - assertEquals(secondDocIdValue, docId2.getValue()); - } -*/ - -} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java index 6afcd6127a1fca5d58d52c9316110007fed298e9..989ecd7afe5782e25ebd8419eac81b53d56517ad 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java @@ -32,7 +32,6 @@ import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; -import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocument; import static org.junit.Assert.assertEquals; import static org.apache.xml.security.signature.XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256; import static javax.xml.crypto.dsig.DigestMethod.SHA256; @@ -70,18 +69,4 @@ public class ServiceMetadataSignerMultipleDomainsIntegrationTest extends Abstra uiKeystoreService.refreshData(); } - @Test - public void testSignatureCalculatedForSecondDomain() throws Exception { - // given - Document document = loadDocument("/input/SignedServiceMetadata_withoutSignature.xml"); - - // when - signer.sign(document, "second_domain_alias", ALGO_ID_SIGNATURE_RSA_SHA256, SHA256); - Element smpSigPointer = SignatureUtil.findSignatureByParentNode(document.getDocumentElement()); - String signingCertSubject = smpSigPointer.getElementsByTagName("X509SubjectName").item(0).getTextContent(); - - // then - SignatureUtil.validateSignature(smpSigPointer); - assertEquals("CN=Secodn domain,OU=SMP,O=CEF Digital,C=BE", signingCertSubject); - } } diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java index e0d67d19782919d09ad258d13315b18f8b4bbb80..8fb40d6ca459a8a84391440292f91b3af4f63f14 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java @@ -30,7 +30,7 @@ import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; -import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocument; + import static javax.xml.crypto.dsig.DigestMethod.SHA256; import static org.apache.xml.security.signature.XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256; @@ -65,7 +65,7 @@ public class ServiceMetadataSignerTest extends AbstractServiceIntegrationTest{ Mockito.doReturn("test123").when(configurationService).getKeystoreCredentialToken(); uiKeystoreService.refreshData(); } - +/* private Document loadAndSignDocumentForDefault() throws Exception { Document documentToSign = loadDocument("/input/SignedServiceMetadata_withoutSignature.xml"); signer.sign(documentToSign, null, ALGO_ID_SIGNATURE_RSA_SHA256, SHA256); @@ -115,6 +115,6 @@ public class ServiceMetadataSignerTest extends AbstractServiceIntegrationTest{ SignatureUtil.validateSignature(adminSignature); } - +*/ } diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java index 4b2d33f1b858f5ad5ff57ca3d44dbd4756e5f033..1ccce6738db223efba6adc8d58b49364a8c735f0 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java @@ -6,12 +6,12 @@ import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataValidationRO; import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest; import eu.europa.ec.edelivery.smp.services.ConfigurationService; import eu.europa.ec.edelivery.smp.testutil.TestDBUtils; -import eu.europa.ec.edelivery.smp.testutil.XmlTestUtils; + import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.mockito.Mockito; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.*; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.Transactional; @@ -43,6 +43,7 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest public void prepareDatabase() { prepareDatabaseForSingleDomainEnv(); } + /* @Test public void getServiceMetadataXMLById() { diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java index e6c3a1faf18e0dfbde3de4b6b0ff2d18ffaad6ed..6674c0849e1851ef19be64749c24d51a71bf535e 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java @@ -2,11 +2,12 @@ package eu.europa.ec.edelivery.smp.sml; import eu.europa.ec.edelivery.smp.data.model.DBDomain; import eu.europa.ec.edelivery.smp.identifiers.Identifier; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; + public class SmlConnectorTestConstants { - protected static final Identifier PARTICIPANT_ID = new Identifier("sample:value", "sample:scheme"); + //protected static final Identifier PARTICIPANT_ID = new Identifier("sample:value", "sample:scheme"); + protected static final Identifier PARTICIPANT_ID = null; protected static final DBDomain DEFAULT_DOMAIN; static { diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java index 770530a7ecdd31130d039bfb5b48aef2aa3b88ac..1d27d6100b0bb0bdab7cfd0e460805df0962f623 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java @@ -170,17 +170,6 @@ public class SignatureUtil { return findSignatureByParentNode(extension); } - public static Document buildDocWithGivenRoot(Element smNode) throws ParserConfigurationException, TransformerException, IOException, SAXException { - Document docUnwrapped = XmlTestUtils.getDocumentBuilder().newDocument(); - Node sm = docUnwrapped.importNode(smNode, true); - docUnwrapped.appendChild(sm); - - // Marshalling and parsing the document - signature validation fails without this stinky "magic". - // _Probably_ SUN's implementation doesn't import correctly signatures between two different documents. - String strUnwrapped = marshall(docUnwrapped); - return parseDocument(strUnwrapped); - } - public static Element findSignatureByParentNode(Element sigParent) { for (Node child = sigParent.getFirstChild(); child != null; child = child.getNextSibling()) { if ("Signature".equals(child.getLocalName()) && "http://www.w3.org/2000/09/xmldsig#".equals(child.getNamespaceURI())) { @@ -190,10 +179,7 @@ public class SignatureUtil { throw new RuntimeException("Signature not found in given node."); } - public static Document parseDocument(String docContent) throws IOException, SAXException, ParserConfigurationException { - InputStream inputStream = new ByteArrayInputStream(docContent.getBytes()); - return XmlTestUtils.getDocumentBuilder().parse(inputStream); - } + public static Element findExtensionInServiceInformation(Document doc) throws ParserConfigurationException, SAXException, IOException { Element serviceInformation = findFirstElementByName(doc, "ServiceInformation"); diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java index 9366957b800416d81d75574c82fbf4de80d7a647..40499de70b9cc3a688049e6f1e3fb2d1752d3813 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java @@ -1,6 +1,7 @@ package eu.europa.ec.edelivery.smp.testutil; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; + + public class TestConstants { @@ -60,7 +61,8 @@ public class TestConstants { public static final String SERVICE_METADATA_XML_PATH = "/examples/services/ServiceMetadataPoland.xml"; public static final String SIGNED_SERVICE_METADATA_XML_PATH = "/examples/services/SignedServiceMetadataPoland.xml"; - public static final ParticipantIdentifierType SERVICE_GROUP_ID = new ParticipantIdentifierType("urn:eu:ncpb", "participant-scheme-qns"); + //public static final ParticipantIdentifierType SERVICE_GROUP_ID = new ParticipantIdentifierType("urn:eu:ncpb", "participant-scheme-qns"); + public static final String ADMIN_USERNAME = "test_admin"; public static final String CERT_USER = "CN=common name,O=org,C=BE:0000000000000066"; diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java index 2b703ac589f0ef5efc867099ea34c136d6bd6e33..6846c01ead5e844f3aac250eebfd0b6d617e50a4 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java @@ -85,17 +85,6 @@ public class TestROUtils { return String.format(SIMPLE_DOCUMENT_XML, partSch, partId, docSch, docId, UUID.randomUUID().toString()); } - public static ServiceGroupValidationRO getInvalid() throws IOException { - String inputDoc = XmlTestUtils.loadDocumentAsString(RES_PATH + "extensionInvalid.xml"); - return getExtensionRO(inputDoc); - } - - public static ServiceGroupValidationRO getCustomExtension() throws IOException { - String inputDoc = XmlTestUtils.loadDocumentAsString(RES_PATH + "extensionCustom.xml"); - return getExtensionRO(inputDoc); - } - - public static ServiceGroupValidationRO getExtensionRO(String extension) { ServiceGroupValidationRO sg = new ServiceGroupValidationRO(); sg.setServiceGroupId((long) 1); diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/XmlTestUtils.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/XmlTestUtils.java deleted file mode 100644 index 2d7b120796118002be5ca94b5d5e493d264cdeee..0000000000000000000000000000000000000000 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/XmlTestUtils.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2018 European Commission | CEF eDelivery - * - * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent 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 attached in file: LICENCE-EUPL-v1.2.pdf - * - * 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. - */ - -package eu.europa.ec.edelivery.smp.testutil; - -import org.apache.commons.io.IOUtils; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadata; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.SAXException; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import java.io.*; - -/** - * Created by gutowpa on 05/01/2017. - */ -public class XmlTestUtils { - - private static final String UTF_8 = "UTF-8"; - - public static byte[] loadDocumentAsByteArray(String docResourcePath) throws IOException { - InputStream inputStream = XmlTestUtils.class.getResourceAsStream(docResourcePath); - return IOUtils.toByteArray(inputStream); - } - - public static String loadDocumentAsString(String docResourcePath) throws IOException { - InputStream inputStream = XmlTestUtils.class.getResourceAsStream(docResourcePath); - return IOUtils.toString(inputStream, UTF_8); - } - - public static Document loadDocument(String docResourcePath) throws ParserConfigurationException, SAXException, IOException { - InputStream inputStream = SignatureUtil.class.getResourceAsStream(docResourcePath); - return getDocumentBuilder().parse(inputStream); - } - - public static DocumentBuilder getDocumentBuilder() throws ParserConfigurationException { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - return dbf.newDocumentBuilder(); - } - - public static String marshal(Node doc) throws TransformerException, UnsupportedEncodingException { - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer trans = tf.newTransformer(); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - trans.transform(new DOMSource(doc), new StreamResult(stream)); - return stream.toString(UTF_8); - } - public static byte[] marshallToByteArray(Node doc) throws TransformerException, UnsupportedEncodingException { - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer trans = tf.newTransformer(); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - trans.transform(new DOMSource(doc), new StreamResult(stream)); - return stream.toByteArray(); - } - - public static byte[] marshallToByteArray(ServiceMetadata serviceMetadata) throws JAXBException { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - JAXBContext jaxbContext = JAXBContext.newInstance(ServiceMetadata.class); - Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); - jaxbMarshaller.marshal(serviceMetadata, stream); - return stream.toByteArray(); - } - - public static String marshall(ServiceMetadata serviceMetadata) throws JAXBException { - StringWriter sw = new StringWriter(); - JAXBContext jaxbContext = JAXBContext.newInstance(ServiceMetadata.class); - Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); - jaxbMarshaller.marshal(serviceMetadata, sw); - return sw.toString(); - } - - public static String marshall(ServiceGroup serviceGroup) throws JAXBException { - StringWriter sw = new StringWriter(); - JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class); - Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); - jaxbMarshaller.marshal(serviceGroup, sw); - return sw.toString(); - } -} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java index 5d24ed04c57f491709be366733fc23cd2b3a722f..f0964f5674d057a79e5a7af9ef6762b326c4de5c 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java @@ -39,7 +39,7 @@ public class SessionSecurityUtilsTest { assertNotNull(result); String decResult = SecurityUtils.decryptUrlSafe(token.getSecret(), result); - assertEquals(value, Long.valueOf(decResult)); + assertEquals(value, Long.valueOf(decResult.substring(0, decResult.indexOf('#')) )); } @Test diff --git a/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql b/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql index 0490d286abd26874f9bcdcd3ea3d5ca58b980103..feeebf7d71427750a6a6bfabb9f499a04fe4e984 100644 --- a/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql +++ b/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql @@ -37,9 +37,7 @@ insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, SUBJECT, ISSUER, SERIALNUMBER,V insert into SMP_DOMAIN (ID, DOMAIN_CODE, VISIBILITY, SML_SUBDOMAIN, SML_SMP_ID, SIGNATURE_KEY_ALIAS, SML_CLIENT_CERT_AUTH,SML_REGISTERED, CREATED_ON, LAST_UPDATED_ON) values -(1, 'testdomain','PUBLIC', 'test-domain', 'CEF-SMP-002','sample_key',1,0, NOW(), NOW()), -(2, 'testdomain1','PUBLIC', 'test-domain1', 'CEF-SMP-003','sample_key',1,0, NOW(), NOW()), -(3, 'testdomain2','PUBLIC', 'test-domain2', 'CEF-SMP-004','sample_key',1,0, NOW(), NOW()); +(1, 'testdomain','PUBLIC', 'test-domain', 'CEF-SMP-002','sample_key',1,0, NOW(), NOW()); insert into SMP_EXTENSION ( ID, IDENTIFIER, IMPLEMENTATION_NAME, NAME, VERSION, DESCRIPTION, CREATED_ON, LAST_UPDATED_ON) values (1, 'edelivery-oasis-smp-extension', 'OasisSMPExtension','Oasis SMP 1.0 and 2.0','1.0', 'Oasis SMP 1.0 and 2.0 extension', NOW(), NOW()); diff --git a/smp-soapui-tests/pom.xml b/smp-soapui-tests/pom.xml index 862c4f8cabe91d4e025a902347867df1785d9c59..43c6f7b8ad8a282a0a6586321dcc91cb5583545b 100644 --- a/smp-soapui-tests/pom.xml +++ b/smp-soapui-tests/pom.xml @@ -61,6 +61,7 @@ </projectFile> <testSuite>PASSING_AUTO_BAMBOO</testSuite> <!--If you want to execute single test case --> + <!-- testCase>SMP001-Create ServiceGroup-Basic Flow-Admin Service Group specified</testCase --> <!-- testCase>SMP063-EDELIVERY-364 slash encoding-Tomcat</testCase --> <!-- testCase>SMP022-Create ServiceMetadata-Basic Flow</testCase --> <projectProperties> @@ -116,13 +117,7 @@ </goals> <configuration> <artifactItems> - <artifactItem> - <groupId>${project.groupId}</groupId> - <artifactId>smp-api</artifactId> - <version>${project.version}</version> - <type>jar</type> - </artifactItem> - <artifactItem> + <artifactItem> <groupId>${project.groupId}</groupId> <artifactId>smp-server-library</artifactId> <version>${project.version}</version> diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java index 08271cdb406483d4ae9cba6d6b5673e561828330..ca3ef952ac041f0aa68303936c6b806d6cec4571 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java @@ -11,7 +11,7 @@ import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; import eu.europa.ec.edelivery.smp.logging.SMPLogger; import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; import eu.europa.ec.edelivery.smp.services.ConfigurationService; -import eu.europa.ec.edelivery.smp.services.ServiceGroupService; + import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.core.convert.ConversionService; @@ -39,17 +39,15 @@ public class SMPAuthorizationService { private static final SMPLogger LOG = SMPLoggerFactory.getLogger(SMPAuthorizationService.class); DomainMemberDao domainMemberDao; - private final ServiceGroupService serviceGroupService; + private final ConversionService conversionService; private final ConfigurationService configurationService; private final UserDao userDao; - public SMPAuthorizationService(ServiceGroupService serviceGroupService, - ConversionService conversionService, + public SMPAuthorizationService(ConversionService conversionService, ConfigurationService configurationService, UserDao userDao, DomainMemberDao domainMemberDao) { - this.serviceGroupService = serviceGroupService; this.conversionService = conversionService; this.configurationService = configurationService; this.userDao = userDao; @@ -117,7 +115,9 @@ public class SMPAuthorizationService { } Long userId = userDetails.getUser().getId(); - return serviceGroupService.isServiceGroupOwnerForMetadataID(userId, serviceMetadataId); + //return serviceGroupService.isServiceGroupOwnerForMetadataID(userId, serviceMetadataId); + return false; + } diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java index b0599a87ea324044aa72e91547ed86111310f65b..454cbe57ad2d74204f0e6b0e4242ddf7b147bacd 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java @@ -1,6 +1,6 @@ package eu.europa.ec.edelivery.smp.error; -import ec.services.smp._1.ErrorResponse; + import eu.europa.ec.edelivery.smp.data.ui.exceptions.ErrorResponseRO; import eu.europa.ec.edelivery.smp.error.exceptions.SMPResponseStatusException; import eu.europa.ec.edelivery.smp.exceptions.BadRequestException; @@ -41,8 +41,12 @@ abstract class AbstractErrorControllerAdvice { else { response = buildAndLog(INTERNAL_SERVER_ERROR, TECHNICAL, "Unexpected technical error occurred.", runtimeException); } + + String errorCodeId = response.getBody() instanceof ErrorResponseRO? - ((ErrorResponseRO) response.getBody()).getErrorUniqueId():((ErrorResponse) response.getBody()).getErrorUniqueId(); + ((ErrorResponseRO) response.getBody()).getErrorUniqueId(): null; + + LOG.error("Unhandled exception occurred, unique ID: [{}]", errorCodeId, runtimeException); return response; } diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java index a850b667818663bd70b2221079945d463f2e02a1..189944ecae46df0baa18e405215222fca0858d63 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java @@ -18,8 +18,7 @@ import eu.europa.ec.edelivery.smp.exceptions.BadRequestException; import eu.europa.ec.edelivery.smp.error.exceptions.SMPResponseStatusException; import eu.europa.ec.edelivery.smp.exceptions.ErrorBusinessCode; import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException; -import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException; -import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; @@ -49,11 +48,6 @@ public class ServiceErrorControllerAdvice extends AbstractErrorControllerAdvice return buildAndLog(BAD_REQUEST, ex.getErrorBusinessCode(), ex.getMessage(), ex); } - @ExceptionHandler(MalformedIdentifierException.class) - public ResponseEntity handleMalformedIdentifierException(MalformedIdentifierException ex) { - return buildAndLog(BAD_REQUEST, FORMAT_ERROR, ex.getMessage(), ex); - } - @ExceptionHandler(IllegalArgumentException.class) public ResponseEntity handleMalformedIdentifierException(IllegalArgumentException ex) { return buildAndLog(BAD_REQUEST, FORMAT_ERROR, ex.getMessage(), ex); @@ -64,11 +58,6 @@ public class ServiceErrorControllerAdvice extends AbstractErrorControllerAdvice return buildAndLog(UNAUTHORIZED, ErrorBusinessCode.UNAUTHORIZED, ex.getMessage() + " - Only SMP Admin or owner of given ServiceGroup is allowed to perform this action", ex); } - @ExceptionHandler(XmlInvalidAgainstSchemaException.class) - public ResponseEntity handleXmlInvalidAgainstSchemaException(XmlInvalidAgainstSchemaException ex) { - return buildAndLog(BAD_REQUEST, XSD_INVALID, ex.getMessage(), ex); - } - ResponseEntity buildAndLog(HttpStatus status, ErrorBusinessCode businessCode, String msg, Exception exception) { ResponseEntity response = ErrorResponseBuilder.status(status) 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 80dfb192e6409b6c526d8f01b98f5a70f490ea73..291cfb0115d5399a522e915f1f745d358d839b6a 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 @@ -13,6 +13,7 @@ public class ResourceConstants { // public public static final String CONTEXT_PATH_PUBLIC_SEARCH_PARTICIPANT = CONTEXT_PATH_PUBLIC + "search"; public static final String CONTEXT_PATH_PUBLIC_DOMAIN = CONTEXT_PATH_PUBLIC + "domain"; + public static final String CONTEXT_PATH_PUBLIC_GROUP = CONTEXT_PATH_PUBLIC + "group"; public static final String CONTEXT_PATH_PUBLIC_APPLICATION = CONTEXT_PATH_PUBLIC + "application"; public static final String CONTEXT_PATH_PUBLIC_USER = CONTEXT_PATH_PUBLIC + "user"; public static final String CONTEXT_PATH_PUBLIC_TRUSTSTORE = CONTEXT_PATH_PUBLIC + "truststore"; diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java index 6f39fbbea56fb9162dde89585a287edf68a63738..22f91ec2665f3110efff241133c6219d6f91944a 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java @@ -52,7 +52,7 @@ public class DomainResource { } @GetMapping(path = "/{user-enc-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) - @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and (@smpAuthorizationService.systemAdministrator or @smpAuthorizationService.isDomainAdministrator(#domainEncId))") + @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.anyDomainAdministrator") public List<DomainRO> getAllDomainList(@PathVariable("user-enc-id") String userEncId) { logAdminAccess("getAllDomainListForUser"); Long userId = SessionSecurityUtils.decryptEntityId(userEncId); diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/GroupResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/GroupResource.java new file mode 100644 index 0000000000000000000000000000000000000000..c175020fb8d0eacf7b0d38bd0bc04d8585a8c909 --- /dev/null +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/GroupResource.java @@ -0,0 +1,70 @@ +package eu.europa.ec.edelivery.smp.ui.external; + + +import eu.europa.ec.edelivery.smp.data.ui.GroupRO; +import eu.europa.ec.edelivery.smp.logging.SMPLogger; +import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; +import eu.europa.ec.edelivery.smp.services.ui.UIGroupPublicService; +import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.MimeTypeUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.CONTEXT_PATH_PUBLIC_GROUP; + +/** + * Purpose of the DomainResource is to provide search method to retrieve configured domains in SMP. + * + * @author Joze Rihtarsic + * @since 4.1 + */ +@RestController +@RequestMapping(value = CONTEXT_PATH_PUBLIC_GROUP) +public class GroupResource { + + private static final SMPLogger LOG = SMPLoggerFactory.getLogger(GroupResource.class); + + private final UIGroupPublicService uiGroupPublicService; + + public GroupResource(UIGroupPublicService uiGroupPublicService) { + this.uiGroupPublicService = uiGroupPublicService; + } + + + @GetMapping(path = "/{user-enc-id}/domain/{domain-enc-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isDomainAdministrator(#userEncId)") + public List<GroupRO> getAllGroupsForDomain(@PathVariable("user-enc-id") String userEncId, + @PathVariable("domain-enc-id") String domainEncId) { + logAdminAccess("getAllGroupsForDomain"); + Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId); + return uiGroupPublicService.getAllGroupsForDomain(domainId); + } + + @PutMapping(path = "/{user-enc-id}/domain/{domain-enc-id}/create", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isDomainAdministrator(#userEncId)") + public GroupRO putGroupForDomain(@PathVariable("user-enc-id") String userEncId, + @PathVariable("domain-enc-id") String domainEncId, + @RequestBody GroupRO group) { + logAdminAccess("putGroupForDomain"); + Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId); + return uiGroupPublicService.createGroupForDomain(domainId, group); + } + + @DeleteMapping(path = "/{user-enc-id}/{group-enc-id}/domain/{domain-enc-id}/delete", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isDomainAdministrator(#userEncId)") + public GroupRO deleteGroupFromDomain(@PathVariable("user-enc-id") String userEncId, + @PathVariable("domain-enc-id") String domainEncId, + @PathVariable("group-enc-id") String groupEncId) { + logAdminAccess("deleteGroupFromDomain"); + Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId); + Long groupId = SessionSecurityUtils.decryptEntityId(groupEncId); + return uiGroupPublicService.deleteGroupFromDomain(domainId, groupId); + } + + + protected void logAdminAccess(String action) { + LOG.info(SMPLogger.SECURITY_MARKER, "Admin Domain action [{}] by user [{}], ", action, SessionSecurityUtils.getSessionUserDetails()); + } +} diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java index 2f2b797b034bcac940ada12f02e4e49b5969e3c2..2951303d027654b290a46f485fcfd7694f95b8af 100644 --- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java +++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java @@ -276,14 +276,14 @@ public class UserResource { node.addChild(new NavigationTreeNodeRO("system-admin-keystore", "Keystore", "key", "keystore")); node.addChild(new NavigationTreeNodeRO("system-admin-truststore", "Truststore", "article", "truststore")); node.addChild(new NavigationTreeNodeRO("system-admin-extension", "Extensions", "extension", "extension")); - node.addChild(new NavigationTreeNodeRO("system-admin-properties", "Properties", "properties", "properties")); + node.addChild(new NavigationTreeNodeRO("system-admin-properties", "Properties", "settings", "properties")); // node.addChild(new NavigationTreeNodeRO("system-admin-authentication", "Authentication", "shield", "authentication")); node.addChild(new NavigationTreeNodeRO("system-admin-alert", "Alerts", "notifications", "alert")); return node; } protected NavigationTreeNodeRO createEditNavigationTreeNode() { - NavigationTreeNodeRO node = new NavigationTreeNodeRO("edit", "Administration", "settings", "edit"); + NavigationTreeNodeRO node = new NavigationTreeNodeRO("edit", "Administration", "tune", "edit"); // is domain admin if (authorizationService.isAnyDomainAdministrator()) { node.addChild(new NavigationTreeNodeRO("edit-domain", "Edit domains", "account_circle", "edit-domain")); diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java index 8fa34c91d63f3095d8f3e747486057029c34a84e..5fadb083429d550e02022f50fd5f7f58df744ba3 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java @@ -6,7 +6,6 @@ import eu.europa.ec.edelivery.smp.data.model.user.DBUser; import eu.europa.ec.edelivery.smp.data.ui.UserRO; import eu.europa.ec.edelivery.smp.data.ui.auth.SMPAuthority; import eu.europa.ec.edelivery.smp.services.ConfigurationService; -import eu.europa.ec.edelivery.smp.services.ServiceGroupService; import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; import org.junit.Assert; import org.junit.Before; @@ -30,13 +29,12 @@ public class SMPAuthorizationServiceTest { UserRO user = null; SecurityContext mockSecurityContextSystemAdmin = null; SecurityContext mockSecurityContextSMPAdmin = null; - ServiceGroupService serviceGroupService = Mockito.mock(ServiceGroupService.class); ConversionService conversionService = Mockito.mock(ConversionService.class); ConfigurationService configurationService = Mockito.mock(ConfigurationService.class); UserDao userDao = Mockito.mock(UserDao.class); DomainMemberDao domainMemberDao = Mockito.mock(DomainMemberDao.class); - SMPAuthorizationService testInstance = new SMPAuthorizationService(serviceGroupService, conversionService, + SMPAuthorizationService testInstance = new SMPAuthorizationService(conversionService, configurationService, userDao, domainMemberDao); diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java index f9a894288b3d43c6d7951e417994e9a8c8ef38f9..544f9fb42fc470d04b245ccb2b8b8f99de707530 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java @@ -3,8 +3,6 @@ package eu.europa.ec.edelivery.smp.error; import ec.services.smp._1.ErrorResponse; import eu.europa.ec.edelivery.smp.exceptions.BadRequestException; import eu.europa.ec.edelivery.smp.exceptions.*; -import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException; -import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException; import org.junit.Test; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; @@ -67,7 +65,7 @@ public class ServiceErrorControllerAdviceTest { assertEquals(ErrorBusinessCode.UNAUTHORIZED.toString(), ((ErrorResponse)re.getBody()).getBusinessCode()); } - +/* @Test public void handleXmlInvalidAgainstSchemaException() { ResponseEntity re = testIntance.handleXmlInvalidAgainstSchemaException( @@ -76,4 +74,6 @@ public class ServiceErrorControllerAdviceTest { assertEquals(BAD_REQUEST, re.getStatusCode()); assertEquals(ErrorBusinessCode.XSD_INVALID.toString(), ((ErrorResponse)re.getBody()).getBusinessCode()); } + + */ } diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java index cef73d18755e42a28af33aed1ec3d52741a23e8a..b53d8c877b1226a3a1f5aa066567ddc4a681a122 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java @@ -16,7 +16,7 @@ package eu.europa.ec.edelivery.smp.validation; import eu.europa.ec.edelivery.smp.conversion.IdentifierService; import eu.europa.ec.edelivery.smp.identifiers.Identifier; import eu.europa.ec.edelivery.smp.services.ConfigurationService; -import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException; + import org.hamcrest.CoreMatchers; import org.hamcrest.MatcherAssert; import org.junit.Assert; @@ -26,8 +26,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.mockito.Mockito; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; import java.util.Arrays; import java.util.Collection;