keycloak-memoizeit

Details

diff --git a/docbook/auth-server-docs/reference/en/en-US/modules/MigrationFromOlderVersions.xml b/docbook/auth-server-docs/reference/en/en-US/modules/MigrationFromOlderVersions.xml
index 998a93d..f950ead 100755
--- a/docbook/auth-server-docs/reference/en/en-US/modules/MigrationFromOlderVersions.xml
+++ b/docbook/auth-server-docs/reference/en/en-US/modules/MigrationFromOlderVersions.xml
@@ -80,6 +80,23 @@
     <section>
         <title>Version specific migration</title>
         <section>
+            <title>Migrating to 1.9.0</title>
+            <simplesect>
+                <title>Deprecated OpenID Connect endpoints</title>
+                <para>
+                    In 1.2 we deprecated a number of endpoints that where not consistent with the OpenID Connect
+                    specifications, these have now been removed. This also applies to the validate token endpoints that
+                    was replaced with the new introspect endpoint in 1.8.
+                </para>
+            </simplesect>
+            <simplesect>
+                <title>Updates to theme templates</title>
+                <para>
+                    Feedback in template.ftl has been moved and format has changed slightly.
+                </para>
+            </simplesect>
+        </section>
+        <section>
             <title>Migrating to 1.8.0</title>
             <simplesect>
             <title>Admin account</title>
diff --git a/forms/common-themes/src/main/resources/theme/base/login/template.ftl b/forms/common-themes/src/main/resources/theme/base/login/template.ftl
index a637969..57aab78 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/template.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/template.ftl
@@ -38,18 +38,6 @@
                 <div id="kc-header-wrapper" class="${properties.kcHeaderWrapperClass!}"><#nested "header"></div>
             </div>
 
-            <#if displayMessage && message?has_content>
-                <div id="kc-feedback" class="feedback-${message.type} ${properties.kcFeedBackClass!}">
-                    <div id="kc-feedback-wrapper">
-                        <span class="kc-feedback-text">${message.summary}</span>
-                    </div>
-                </div>
-            <#else>
-                <div id="kc-feedback-placeholder" class="${properties.kcFeedBackPlaceholderClass!}">
-                    <div id="kc-feedback-placeholder-wrapper"></div>
-                </div>
-            </#if>
-
             <#if realm.internationalizationEnabled>
                 <div id="kc-locale" class="${properties.kcLocaleClass!}">
                     <div id="kc-locale-wrapper" class="${properties.kcLocaleWrapperClass!}">
@@ -67,6 +55,18 @@
 
             <div id="kc-content" class="${properties.kcContentClass!}">
                 <div id="kc-content-wrapper" class="${properties.kcContentWrapperClass!}">
+
+                    <#if displayMessage && message?has_content>
+                        <div class="${properties.kcFeedbackAreaClass!}">
+                            <div class="alert alert-${message.type}">
+                                <#if message.type = 'success'><span class="${properties.kcFeedbackSuccessIcon}"></span></#if>
+                                <#if message.type = 'warning'><span class="${properties.kcFeedbackWarningIcon}"></span></#if>
+                                <#if message.type = 'error'><span class="${properties.kcFeedbackErrorIcon}"></span></#if>
+                                <span class="kc-feedback-text">${message.summary}</span>
+                            </div>
+                        </div>
+                    </#if>
+
                     <div id="kc-form" class="${properties.kcFormAreaClass!}">
                         <div id="kc-form-wrapper" class="${properties.kcFormAreaWrapperClass!}">
                             <#nested "form">
diff --git a/forms/common-themes/src/main/resources/theme/keycloak/login/resources/css/login.css b/forms/common-themes/src/main/resources/theme/keycloak/login/resources/css/login.css
index 0c05a4b..cbf5a25 100644
--- a/forms/common-themes/src/main/resources/theme/keycloak/login/resources/css/login.css
+++ b/forms/common-themes/src/main/resources/theme/keycloak/login/resources/css/login.css
@@ -3,6 +3,12 @@
     background-size: 100% auto;
 }
 
+.alert-error {
+    background-color: #ffffff;
+    border-color: #cc0000;
+    color: #333333;
+}
+
 .kc-dropdown{
     position: relative;
     z-index: 9999;
@@ -114,59 +120,10 @@
     display: block;
 }
 
-#kc-feedback-wrapper {
-    display: inline-block;
-    width: auto;
-    background-position: left bottom;
-    background-repeat: no-repeat;
-    padding-bottom: 10px;
-}
-
-#kc-feedback span {
-    display: block;
-    padding: 0.90909090909091em 3.63636363636364em;
-    border-style: solid;
-    border-width: 1px 1px 0px 1px;
-    background-repeat: no-repeat;
-    background-position: 1.27272727272727em center;
-    font-weight: normal;
-    line-height: 1.4em;
-    border-radius: 2px;
-    color: #4d5258;
-    margin-bottom: 0;
-}
-
 #kc-terms-text {
     margin-bottom: 20px;
 }
 
-.feedback-error #kc-feedback-wrapper {
-    background-image: url(../img/feedback-error-arrow-down.png);
-}
-.feedback-error span {
-    border-color: #b91415;
-    background-image: url(../img/feedback-error-sign.png);
-    background-color: #f8e7e7;
-}
-
-.feedback-success #kc-feedback-wrapper {
-    background-image: url(../img/feedback-success-arrow-down.png);
-}
-.feedback-success span {
-    border-color: #4b9e39;
-    background-image: url(../img/feedback-success-sign.png);
-    background-color: #e4f1e1;
-}
-
-.feedback-warning #kc-feedback-wrapper {
-    background-image: url(../img/feedback-warning-arrow-down.png);
-}
-.feedback-warning span {
-    border-color: #f17528;
-    background-image: url(../img/feedback-warning-sign.png);
-    background-color: #fef1e9;
-}
-
 #kc-registration {
     margin-bottom: 15px;
 }
@@ -283,6 +240,10 @@ ol#kc-totp-settings li:first-of-type {
         top: 50px;
         right: 50px;
     }
+
+    .login-pf .container {
+        padding-right: 80px;
+    }
 }
 
 @media (max-width: 767px) {
@@ -300,12 +261,6 @@ ol#kc-totp-settings li:first-of-type {
         text-align: center;
     }
 
-    #kc-feedback {
-        padding-left: 15px;
-        padding-right: 15px;
-        float: none;
-    }
-
     #kc-form {
         float: none;
     }
diff --git a/forms/common-themes/src/main/resources/theme/keycloak/login/theme.properties b/forms/common-themes/src/main/resources/theme/keycloak/login/theme.properties
index b2364e1..6159872 100644
--- a/forms/common-themes/src/main/resources/theme/keycloak/login/theme.properties
+++ b/forms/common-themes/src/main/resources/theme/keycloak/login/theme.properties
@@ -12,12 +12,17 @@ kcContentClass=col-sm-12 col-md-12 col-lg-12 container
 kcContentWrapperClass=row
 
 kcHeaderClass=col-xs-12 col-sm-7 col-md-6 col-lg-5
-kcFeedBackClass=col-xs-12 col-sm-4 col-md-5 col-lg-6
-kcFeedBackPlaceholderClass=col-xs-12 col-sm-4 col-md-5 col-lg-6
+kcFeedbackAreaClass=col-md-12
 kcLocaleClass=col-xs-12 col-sm-1
+kcAlertIconClasserror=pficon pficon-error-circle-o
 
 kcFormAreaClass=col-xs-12 col-sm-8 col-md-8 col-lg-7 login
 
+kcFeedbackErrorIcon=pficon pficon-error-circle-o
+kcFeedbackWarningIcon=pficon pficon-warning-triangle-o
+kcFeedbackSuccessIcon=alert alert-success
+
+
 kcFormClass=form-horizontal
 kcFormGroupClass=form-group
 kcFormGroupErrorClass=has-error
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPage.java
index 04e5ddd..4fdb888 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPage.java
@@ -62,13 +62,13 @@ public class LoginPage extends AbstractPage {
     @FindBy(linkText = "Username")
     private WebElement recoverUsernameLink;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement loginErrorMessage;
 
-    @FindBy(className = "feedback-warning")
+    @FindBy(className = "alert-warning")
     private WebElement loginWarningMessage;
 
-    @FindBy(className = "feedback-success")
+    @FindBy(className = "alert-success")
     private WebElement emailSuccessMessage;
 
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordResetPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordResetPage.java
index a244c32..e60aeb5 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordResetPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordResetPage.java
@@ -35,10 +35,10 @@ public class LoginPasswordResetPage extends AbstractPage {
     @FindBy(css = "input[type=\"submit\"]")
     private WebElement submitButton;
 
-    @FindBy(className = "feedback-success")
+    @FindBy(className = "alert-success")
     private WebElement emailSuccessMessage;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement emailErrorMessage;
 
     @FindBy(partialLinkText = "Back to Login")
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordUpdatePage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordUpdatePage.java
index d8adea4..dafb726 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordUpdatePage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginPasswordUpdatePage.java
@@ -38,7 +38,7 @@ public class LoginPasswordUpdatePage extends AbstractPage {
     @FindBy(css = "input[type=\"submit\"]")
     private WebElement submitButton;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement loginErrorMessage;
 
     public void changePassword(String newPassword, String passwordConfirm) {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginRecoverUsernamePage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginRecoverUsernamePage.java
index 6759070..e8e8014 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginRecoverUsernamePage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginRecoverUsernamePage.java
@@ -35,7 +35,7 @@ public class LoginRecoverUsernamePage extends AbstractPage {
     @FindBy(css = "input[type=\"submit\"]")
     private WebElement submitButton;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement emailErrorMessage;
 
     public void recoverUsername(String email) {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginTotpPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginTotpPage.java
index 09782c9..bc203bc 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginTotpPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginTotpPage.java
@@ -42,7 +42,7 @@ public class LoginTotpPage extends AbstractPage {
     @FindBy(id = "kc-cancel")
     private WebElement cancelButton;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement loginErrorMessage;
 
     public void login(String totp) {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginUpdateProfilePage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginUpdateProfilePage.java
index c9038a4..2f7e9bf 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginUpdateProfilePage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/LoginUpdateProfilePage.java
@@ -43,7 +43,7 @@ public class LoginUpdateProfilePage extends AbstractPage {
     @FindBy(css = "input[type=\"submit\"]")
     private WebElement submitButton;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement loginErrorMessage;
 
     public void update(String firstName, String lastName, String email) {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/RegisterPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/RegisterPage.java
index 456d0a8..29b5f9f 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/RegisterPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/RegisterPage.java
@@ -54,7 +54,7 @@ public class RegisterPage extends AbstractPage {
     @FindBy(css = "input[type=\"submit\"]")
     private WebElement submitButton;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement loginErrorMessage;
 
     public void register(String firstName, String lastName, String email, String username, String password, String passwordConfirm) {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/ValidatePassworrdEmailResetPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/ValidatePassworrdEmailResetPage.java
index 780b704..84c2d4c 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/ValidatePassworrdEmailResetPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/ValidatePassworrdEmailResetPage.java
@@ -38,10 +38,10 @@ public class ValidatePassworrdEmailResetPage extends AbstractPage {
     @FindBy(id="kc-cancel")
     private WebElement cancelButton;
 
-    @FindBy(className = "feedback-success")
+    @FindBy(className = "alert-success")
     private WebElement emailSuccessMessage;
 
-    @FindBy(className = "feedback-error")
+    @FindBy(className = "alert-error")
     private WebElement emailErrorMessage;
 
     public void submitCode(String code) {