keycloak-uncached

Details

diff --git a/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java b/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java
index f0ad4d8..723ef2e 100644
--- a/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java
+++ b/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java
@@ -17,6 +17,7 @@ import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -130,6 +131,7 @@ public class FreeMarkerEmailProvider implements EmailProvider {
             msg.setSubject(subject);
             msg.setText(body);
             msg.saveChanges();
+            msg.setSentDate(new Date());
 
             Transport transport = session.getTransport("smtp");
             if (auth) {
diff --git a/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java b/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java
index 6571037..9591e6f 100755
--- a/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java
+++ b/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java
@@ -42,6 +42,7 @@ import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.services.managers.AccessCodeEntry;
 import org.keycloak.services.managers.AuthenticationManager;
 import org.keycloak.services.managers.TokenManager;
+import org.keycloak.services.util.CookieHelper;
 
 import javax.ws.rs.core.Cookie;
 import javax.ws.rs.core.MultivaluedMap;
diff --git a/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java b/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
index 0247410..269fa51 100755
--- a/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
+++ b/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
@@ -224,6 +224,13 @@ public class RequiredActionsService {
 
         audit.clone().event(EventType.UPDATE_PASSWORD).success();
 
+        // Password reset through email won't have an associated session
+        if (accessCode.getSessionState() == null) {
+            UserSessionModel userSession = realm.createUserSession(realm.getUserById(accessCode.getUser().getId()), clientConnection.getRemoteAddr());
+            accessCode.getToken().setSessionState(userSession.getId());
+            audit.session(userSession);
+        }
+
         return redirectOauth(user, accessCode);
     }
 
@@ -322,10 +329,7 @@ public class RequiredActionsService {
             Set<RequiredAction> requiredActions = new HashSet<RequiredAction>(user.getRequiredActions());
             requiredActions.add(RequiredAction.UPDATE_PASSWORD);
 
-            UserSessionModel session = realm.createUserSession(user, clientConnection.getRemoteAddr());
-            audit.session(session);
-
-            AccessCodeEntry accessCode = tokenManager.createAccessCode(scopeParam, state, redirect, realm, client, user, session);
+            AccessCodeEntry accessCode = tokenManager.createAccessCode(scopeParam, state, redirect, realm, client, user, null);
             accessCode.setRequiredActions(requiredActions);
             accessCode.setAuthMethod("form");
             accessCode.setUsernameUsed(username);
diff --git a/testsuite/tools/src/main/webapp/pages/mail.html b/testsuite/tools/src/main/webapp/pages/mail.html
index b378019..400c63a 100644
--- a/testsuite/tools/src/main/webapp/pages/mail.html
+++ b/testsuite/tools/src/main/webapp/pages/mail.html
@@ -7,17 +7,18 @@
 <table class="table table-striped table-bordered">
     <thead>
     <tr>
-        <th>From</th>
+        <th>Date</th>
         <th>To</th>
+        <th>From</th>
         <th>Subject</th>
         <th>Body</th>
     </tr>
     </thead>
     <tr data-ng-repeat="m in messages|reverse">
-        <td>{{m.from}}</td>
+        <td>{{m.date|date:'medium'}}</td>
         <td>{{m.to}}</td>
+        <td>{{m.from}}</td>
         <td>{{m.subject}}</td>
         <td><pre>{{m.body}}</pre></td>
-        <td>{{m.date|date:'medium'}}</td>
     </tr>
 </table>
\ No newline at end of file