keycloak-uncached

KEYCLOAK-7047: Fix RegistrationEmailAsUsername and EditUserNameAllowed

4/4/2018 10:31:38 AM

Details

diff --git a/services/src/main/java/org/keycloak/services/resources/account/AccountConsole.java b/services/src/main/java/org/keycloak/services/resources/account/AccountConsole.java
index 85cf2a7..e073848 100644
--- a/services/src/main/java/org/keycloak/services/resources/account/AccountConsole.java
+++ b/services/src/main/java/org/keycloak/services/resources/account/AccountConsole.java
@@ -89,6 +89,8 @@ public class AccountConsole {
             map.put("authUrl", session.getContext().getContextPath());
             map.put("baseUrl", session.getContext().getContextPath() + "/realms/" + realm.getName() + "/account");
             map.put("realm", realm.getName());
+            map.put("isRegistrationEmailAsUsername", realm.isRegistrationEmailAsUsername());
+            map.put("isEditUserNameAllowed", realm.isEditUsernameAllowed());
             map.put("resourceUrl", Urls.themeRoot(baseUri).getPath() + "/account/" + theme.getName());
             map.put("resourceVersion", Version.RESOURCES_VERSION);
             
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/index.ftl b/themes/src/main/resources/theme/keycloak-preview/account/index.ftl
index 4183d14..bbf4fd5 100644
--- a/themes/src/main/resources/theme/keycloak-preview/account/index.ftl
+++ b/themes/src/main/resources/theme/keycloak-preview/account/index.ftl
@@ -8,6 +8,8 @@
             var baseUrl = '${baseUrl}';
             var realm = '${realm}';
             var resourceUrl = '${resourceUrl}';
+            var isRegistrationEmailAsUsername = ${isRegistrationEmailAsUsername?c};
+            var isEditUserNameAllowed = ${isEditUserNameAllowed?c};
 
             <#if referrer??>
                 var referrer = '${referrer}';
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.html b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.html
index 7d2ffb1..94a356e 100644
--- a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.html
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.html
@@ -15,13 +15,14 @@
 
     <form #formGroup="ngForm" (ngSubmit)="saveAccount()" class="form-horizontal">
 
-        <div class="form-group ">
+        <div *ngIf="!isRegistrationEmailAsUsername" class="form-group ">
             <div class="col-sm-2 col-md-2">
-                <label for="username" class="control-label">{{'username' | translate}}</label>
+                <label for="username" class="control-label">{{'username' | translate}}</label><span *ngIf="isEditUserNameAllowed" class="required">*</span>
             </div>
 
             <div class="col-sm-10 col-md-10">
-                <input type="text" class="form-control" id="username" name="username" disabled value="{{username}}" >
+                <input *ngIf="isEditUserNameAllowed" type="text" class="form-control" required ngModel id="username" name="username" value="{{username}}" >
+                <span *ngIf="!isEditUserNameAllowed">{{ username }}</span>
             </div>
         </div>
 
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.ts b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.ts
index eeae139..ab51ab6 100644
--- a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.ts
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/content/account-page/account-page.component.ts
@@ -20,18 +20,22 @@ import {FormGroup} from '@angular/forms';
 
 import {AccountServiceClient} from '../../account-service/account.service';
 
+declare const isRegistrationEmailAsUsername: boolean;
+declare const isEditUserNameAllowed: boolean;
+
 @Component({
     selector: 'app-account-page',
     templateUrl: './account-page.component.html',
     styleUrls: ['./account-page.component.css']
 })
 export class AccountPageComponent implements OnInit {
+    private isRegistrationEmailAsUsername: boolean = isRegistrationEmailAsUsername;
+    private isEditUserNameAllowed: boolean = isEditUserNameAllowed;
     
     @ViewChild('formGroup') private formGroup: FormGroup;
     
-    // using ordinary variable here
-    // disabled fields not working properly with FormGroup
-    // FormGroup.getRawValue() causes page refresh.  Not sure why?
+    // using ordinary variable here for case where username
+    // is not editable and not controlled by formGroup
     private username: string;
 
     constructor(private accountSvc: AccountServiceClient ) {