diff --git a/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.html b/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.html index 4a396b8c83e6d81ff470f3a16384f9f38e79bc43..cfdb03cbbb73d7438ed70d157aba9299067e622b 100644 --- a/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.html +++ b/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.html @@ -2,21 +2,20 @@ <mat-dialog-content style="width:700px"> <div *ngIf="message" [ngClass]="{ 'alert-message': message, 'alert-message-success': messageType === 'success', 'alert-message-error':messageType === 'error' }" - id="alertmessage_id"> + id="alertmessage_id" [innerHTML]="message"> <span class="alert-message-close-button" (click)="clearAlert()">×</span> - {{message}} </div> <div *ngIf="!isReadOnly" class="panel" [formGroup]="credentialForm" > <mat-form-field style="width: 100%"> <mat-label>Description</mat-label> - <input matInput placeholder="Description" + <input matInput formControlName="description" maxlength="255"> </mat-form-field> <div style="display: flex;flex-flow: row wrap;"> - <mat-checkbox formControlName="active"> + <mat-checkbox formControlName="active" style="align-self: center; padding-bottom: 1em;padding-right: 2em"> Active </mat-checkbox> <mat-form-field style="flex-grow: 1"> @@ -47,7 +46,7 @@ <mat-form-field class="certificate-subject" style="width:100%"> <mat-label>Subject Name</mat-label> - <input matInput placeholder="Subject Name" formControlName="subject" id="subject_id" + <input matInput formControlName="subject" id="subject_id" readonly="true"> </mat-form-field> <mat-form-field style="width: 100%"> @@ -64,17 +63,17 @@ </mat-form-field> <mat-form-field class="certificate-issuer" style="width:100%"> <mat-label>Issuer Name</mat-label> - <input matInput placeholder="Issuer" formControlName="issuer" id="issuer_id" + <input matInput formControlName="issuer" id="issuer_id" readonly="true"> </mat-form-field> <mat-form-field class="certificate-serial-number" style="width:100%"> <mat-label>Serial Number</mat-label> - <input matInput placeholder="Serial Number" formControlName="serialNumber" + <input matInput formControlName="serialNumber" id="servialNumber_id" readonly="true"> </mat-form-field> <mat-form-field class="certificate-id" style="width:100%"> <mat-label>SMP certificate ID</mat-label> - <input matInput placeholder="SMP certificate ID" formControlName="certificateId" + <input matInput formControlName="certificateId" id="certificateId_id" resizeable="true" readonly="true"> </mat-form-field> diff --git a/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts b/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts index 72c80a152a3287915b723714ea5033e2412a90f8..b76129183c6bcf936336fd5311ae21c45dc6a5da 100644 --- a/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts +++ b/smp-angular/src/app/common/dialogs/credential-dialog/credential-dialog.component.ts @@ -161,7 +161,8 @@ export class CredentialDialogComponent { this.clearAlert(); this.userService.generateUserAccessTokenCredential(this.initCredential).subscribe((response: AccessTokenRo) => { - this.showSuccessMessage("Token with id: [" + response.identifier + "] and value: [" + response.value + "] was generated!") + this.showSuccessMessage("Token with ID: \"" + response.identifier + "\" and value: \"" + response.value + "\" was generated!" + + "<br \><br \>Copy the access token's value and save it in a safe space. <br \><b>You won't be able to see your token's value once you click Close.</b>") this.userService.notifyAccessTokenUpdated(response.credential); this.setDisabled(true); }, (err) => { diff --git a/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.html b/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.html index 040c1590b9fcf9878be64622729261dffbc9d197..2f4807e63bd5d03b41ac2afa4e350dab394e3e59 100644 --- a/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.html +++ b/smp-angular/src/app/common/dialogs/password-change-dialog/password-change-dialog.component.html @@ -12,14 +12,14 @@ <mat-form-field style="width:100%"> <mat-label>Change password for Username</mat-label> - <input matInput placeholder="Username" formControlName="username" id="un_id" readonly="true"> + <input matInput formControlName="username" id="un_id" readonly="true"> </mat-form-field> <div class="password-panel" style="display: flex;flex-direction: column"> <mat-form-field *ngIf="showCurrentPasswordField" style="width:100%"> <mat-label>{{getPasswordTitle}}</mat-label> - <input matInput [placeholder]="getPasswordTitle" [type]="hideCurrPwdFiled ? 'password' : 'text'" + <input matInput [type]="hideCurrPwdFiled ? 'password' : 'text'" formControlName="current-password" required id="cp_id"> <mat-icon matSuffix (click)="hideCurrPwdFiled = !hideCurrPwdFiled">{{hideCurrPwdFiled ? 'visibility_off' : 'visibility'}}</mat-icon> @@ -27,7 +27,7 @@ <mat-form-field style="width:100%"> <mat-label>New Password</mat-label> - <input matInput placeholder="New Password" [type]="hideNewPwdFiled ? 'password' : 'text'" + <input matInput [type]="hideNewPwdFiled ? 'password' : 'text'" formControlName="new-password" required id="np_id" auto-focus-directive> <mat-icon matSuffix (click)="hideNewPwdFiled = !hideNewPwdFiled">{{hideNewPwdFiled ? 'visibility_off' : 'visibility'}}</mat-icon> @@ -40,7 +40,7 @@ <mat-form-field style="width:100%"> <mat-label>Confirm New Password</mat-label> - <input matInput placeholder="Confirm New Password" [type]="hideConfPwdFiled ? 'password' : 'text'" + <input matInput [type]="hideConfPwdFiled ? 'password' : 'text'" formControlName="confirm-new-password" required id="cnp_id"> <mat-icon matSuffix (click)="hideConfPwdFiled = !hideConfPwdFiled">{{hideConfPwdFiled ? 'visibility_off' : 'visibility'}}</mat-icon> diff --git a/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.html b/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.html index 2404d2f2e299e6815c267c2521f256ede53f3323..e5406f5fdaa88a71a168e941b340fdbae02fd305 100644 --- a/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.html +++ b/smp-angular/src/app/common/panels/user-settings-panel/user-profile-panel.component.html @@ -3,19 +3,17 @@ <data-panel title="Account" [showTitle]="showDataPanelTitles" text="Account data"> - <div class="panel" *ngIf="isNewUser"><p style="font-weight: bold">Enter user and click 'Save' to create new user - </div> + <div class="panel" *ngIf="isNewUser"><p style="font-weight: bold">Please fill user details and click "Save" to create a new user</div> <mat-form-field class="user-profile-pane-field"> <mat-label>Username</mat-label> - <input id="username_id" matInput placeholder="Username" formControlName="username" #username + <input id="username_id" matInput formControlName="username" #username maxlength="255" required auto-focus-directive> </mat-form-field> <div style="display:flex; flex-direction: row;align-items: center"> <mat-form-field style="width:100%" class="user-profile-pane-field"> <mat-label>Application role</mat-label> - <mat-select placeholder="Application role for the user" - formControlName="role" + <mat-select formControlName="role" matTooltip="application role for the user." id="role_id" required> <mat-option *ngFor="let role of applicationRoles" @@ -23,7 +21,7 @@ {{role.key}} </mat-option> </mat-select> - <mat-hint> Choose member role</mat-hint> + <mat-hint *ngIf="!isUserDataLoggedInUserData"> Choose member role</mat-hint> </mat-form-field> <mat-checkbox @@ -38,7 +36,7 @@ text="User profile data and settings"> <mat-form-field class="user-profile-pane-field"> <mat-label>E-Mail Address</mat-label> - <input id="emailAddress_id" matInput placeholder="EMail Address" formControlName="emailAddress" + <input id="emailAddress_id" matInput formControlName="emailAddress" maxlength="127"> <div *ngIf="userForm.controls['emailAddress'].hasError('pattern') && userForm.controls['emailAddress'].touched" @@ -47,7 +45,7 @@ </mat-form-field> <mat-form-field class="user-profile-pane-field"> <mat-label>Full name (name and last name)</mat-label> - <input id="fullName_id" matInput placeholder="Full name" formControlName="fullName" + <input id="fullName_id" matInput formControlName="fullName" maxlength="127"> </mat-form-field> diff --git a/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.html b/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.html index 65beda36d060414f01b0a31f49f7a72e53d5138b..087bd3ad1322fa50bc95d1d0defd8d1fdf17e362 100644 --- a/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.html +++ b/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.html @@ -2,7 +2,7 @@ <div style="display: flex;flex-flow: row wrap;"> <mat-form-field style="flex-grow: 2"> <mat-label>Access token ID</mat-label> - <input matInput placeholder="Access token ID" + <input matInput [value]="credential?.name" maxlength="255" readonly> </mat-form-field> @@ -24,14 +24,16 @@ </div> <mat-form-field style="width: 100%"> <mat-label>Description</mat-label> - <input matInput placeholder="Description" + <input matInput formControlName="description" maxlength="255"> </mat-form-field> <div style="display: flex;flex-flow: row wrap;"> - <mat-checkbox formControlName="active"> + + <mat-checkbox formControlName="active" style="align-self: center; padding-bottom: 1em;padding-right: 2em"> Active </mat-checkbox> + <mat-form-field appearance="fill" style="flex-grow: 1"> <mat-label>Enter a valid date range</mat-label> <mat-date-range-input [rangePicker]="picker" > @@ -47,19 +49,19 @@ <div style="display: flex;flex-flow: row wrap;"> <mat-form-field style="flex-grow: 1"> <mat-label>Seq. failed attempts</mat-label> - <input matInput placeholder="Seq. failed attempts" + <input matInput [value]="sequentialLoginFailureCount" id="sequentialTokenLoginFailureCount_id" maxlength="255" disabled readonly> </mat-form-field> <mat-form-field style="flex-grow: 2"> <mat-label>Last failed attempt</mat-label> - <input matInput placeholder="Last failed attempt" + <input matInput [value]="lastFailedLoginAttempt" maxlength="255" disabled> </mat-form-field> <mat-form-field style="flex-grow: 2"> <mat-label>Suspended until</mat-label> - <input matInput placeholder="Suspended until" + <input matInput [value]="suspendedUtil" maxlength="255" disabled> </mat-form-field> diff --git a/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.ts b/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.ts index 2df9a93567ba8f430e08156eea3206d190f50b34..c83f2ac85a69e9cf91f35b3bf0077af09081bbbe 100644 --- a/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.ts +++ b/smp-angular/src/app/user-settings/user-access-tokens/access-token-panel/access-token-panel.component.ts @@ -17,7 +17,6 @@ export class AccessTokenPanelComponent implements BeforeLeaveGuard { dateFormat: string = 'yyyy-MM-dd' _credential: CredentialRo; - credentialForm: FormGroup; diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/user/DBCredential.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/user/DBCredential.java index 82880def275ebaa69a297bcd0056d37d2d79e0fd..30adccf87492b363d1de4c33c40ea6b7d90d221d 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/user/DBCredential.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/user/DBCredential.java @@ -26,7 +26,6 @@ import java.time.OffsetDateTime; import java.util.Objects; import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*; - @Entity @Audited @Table(name = "SMP_CREDENTIAL", @@ -39,7 +38,7 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*; @NamedQuery(name = QUERY_CREDENTIALS_BY_CI_USERNAME_CREDENTIAL_TYPE_TARGET, query = "SELECT c FROM DBCredential c " + "WHERE upper(c.user.username) = upper(:username) and c.credentialType = :credential_type and c.credentialTarget = :credential_target"), @NamedQuery(name = QUERY_CREDENTIALS_BY_USERID_CREDENTIAL_TYPE_TARGET, query = "SELECT c FROM DBCredential c " + - "WHERE c.user.id = :user_id and c.credentialType = :credential_type and c.credentialTarget = :credential_target"), + "WHERE c.user.id = :user_id and c.credentialType = :credential_type and c.credentialTarget = :credential_target order by c.id"), // case-insensitive search