keycloak-aplcache
Changes
services/src/main/java/org/keycloak/services/resources/account/AccountCredentialResource.java 2(+2 -0)
Details
diff --git a/services/src/main/java/org/keycloak/services/resources/account/AccountCredentialResource.java b/services/src/main/java/org/keycloak/services/resources/account/AccountCredentialResource.java
index 42cf4e4..3af53c5 100644
--- a/services/src/main/java/org/keycloak/services/resources/account/AccountCredentialResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/account/AccountCredentialResource.java
@@ -1,5 +1,6 @@
package org.keycloak.services.resources.account;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.keycloak.credential.CredentialModel;
import org.keycloak.credential.CredentialProvider;
import org.keycloak.credential.PasswordCredentialProvider;
@@ -92,6 +93,7 @@ public class AccountCredentialResource {
}
+ @JsonIgnoreProperties(ignoreUnknown=true)
public static class PasswordUpdate {
private String currentPassword;
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.html b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.html
index 8e4aceb..c10d780 100644
--- a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.html
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.html
@@ -5,7 +5,7 @@
<div class="col-sm-12 card-pf">
<div class="card-pf-body p-b">
<span class="i pficon pficon-info"></span>
- {{'passwordLastUpdateMessage' | translate}} <strong></strong>
+ {{'passwordLastUpdateMessage' | translate}} <strong>{{lastPasswordUpdate | date:'medium'}}</strong>
</div>
</div>
@@ -26,17 +26,17 @@
<input readonly="" value="this is not a login form" style="display: none;" type="text">
<input readonly="" value="this is not a login form" style="display: none;" type="password">
<div class="form-group">
- <label for="password" class="control-label">{{'currentPassword' | translate}}</label>
- <input ngModel class="form-control" id="password" name="password" autofocus="" autocomplete="off" type="password">
+ <label for="password" class="control-label">{{'currentPassword' | translate}}</label><span class="required">*</span>
+ <input ngModel class="form-control" #password id="password" name="currentPassword" autofocus="" autocomplete="off" type="password">
</div>
<div class="form-group">
- <label for="password-new" class="control-label">{{'passwordNew' | translate}}</label>
+ <label for="password-new" class="control-label">{{'passwordNew' | translate}}</label><span class="required">*</span>
<input ngModel class="form-control" id="newPassword" name="newPassword" autocomplete="off" type="password">
</div>
<div class="form-group">
- <label for="password-confirm" class="control-label">{{'passwordConfirm' | translate}}</label>
+ <label for="password-confirm" class="control-label">{{'passwordConfirm' | translate}}</label><span class="required">*</span>
<input ngModel class="form-control" id="confirmation" name="confirmation" autocomplete="off" type="password">
</div>
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.ts b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.ts
index dc9e62c..177298f 100644
--- a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.ts
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/password-page/password-page.component.ts
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import {Component, OnInit, ViewChild} from '@angular/core';
+import {Component, OnInit, ViewChild, Renderer2} from '@angular/core';
import {Response} from '@angular/http';
import {FormGroup} from '@angular/forms';
@@ -28,19 +28,31 @@ import {AccountServiceClient} from '../../account-service/account.service';
export class PasswordPageComponent implements OnInit {
@ViewChild('formGroup') private formGroup: FormGroup;
+ private lastPasswordUpdate: number;
- constructor(private accountSvc: AccountServiceClient) {
+ constructor(private accountSvc: AccountServiceClient, private renderer: Renderer2) {
+ this.accountSvc.doGetRequest("/credentials/password", (res: Response) => this.handleGetResponse(res));
}
public changePassword() {
console.log("posting: " + JSON.stringify(this.formGroup.value));
- this.accountSvc.doPostRequest("/credentials", (res: Response) => this.handlePostResponse(res), this.formGroup.value);
+ this.accountSvc.doPostRequest("/credentials/password", (res: Response) => this.handlePostResponse(res), this.formGroup.value);
+ this.renderer.selectRootElement('#password').focus();
}
protected handlePostResponse(res: Response) {
console.log('**** response from account POST ***');
console.log(JSON.stringify(res));
console.log('***************************************');
+ this.formGroup.reset();
+ this.accountSvc.doGetRequest("/credentials/password", (res: Response) => this.handleGetResponse(res));
+ }
+
+ protected handleGetResponse(res: Response) {
+ console.log('**** response from account POST ***');
+ console.log(JSON.stringify(res));
+ console.log('***************************************');
+ this.lastPasswordUpdate = res.json()['lastUpdate'];
}
ngOnInit() {