keycloak-uncached

Details

diff --git a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ExtendingThemeManager.java b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ExtendingThemeManager.java
index eacf266..533b631 100644
--- a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ExtendingThemeManager.java
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ExtendingThemeManager.java
@@ -1,5 +1,6 @@
 package org.keycloak.freemarker;
 
+import org.jboss.logging.Logger;
 import org.keycloak.Config;
 import org.keycloak.models.KeycloakSession;
 
@@ -21,17 +22,17 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public class ExtendingThemeManager implements ThemeProvider {
 
+    private static final Logger log = Logger.getLogger(ExtendingThemeManager.class);
+
     private final KeycloakSession session;
     private final ConcurrentHashMap<ExtendingThemeManagerFactory.ThemeKey, Theme> themeCache;
     private List<ThemeProvider> providers;
     private String defaultTheme;
-    private int staticMaxAge;
 
     public ExtendingThemeManager(KeycloakSession session, ConcurrentHashMap<ExtendingThemeManagerFactory.ThemeKey, Theme> themeCache) {
         this.session = session;
         this.themeCache = themeCache;
         this.defaultTheme = Config.scope("theme").get("default", "keycloak");
-        this.staticMaxAge = Config.scope("theme").getInt("staticMaxAge", -1);
     }
 
     private List<ThemeProvider> getProviders() {
@@ -57,10 +58,6 @@ public class ExtendingThemeManager implements ThemeProvider {
         return providers;
     }
 
-    public int getStaticMaxAge() {
-        return staticMaxAge;
-    }
-
     @Override
     public int getProviderPriority() {
         return 0;
@@ -77,7 +74,13 @@ public class ExtendingThemeManager implements ThemeProvider {
             Theme theme = themeCache.get(key);
             if (theme == null) {
                 theme = loadTheme(name, type);
-                if (themeCache.putIfAbsent(key, theme) != null) {
+                if (theme == null) {
+                    theme = loadTheme("keycloak", type);
+                    if (theme == null) {
+                        theme = loadTheme("base", type);
+                    }
+                    log.errorv("Failed to find {0} theme {1}, using built-in themes", type, name);
+                } else if (themeCache.putIfAbsent(key, theme) != null) {
                     theme = themeCache.get(key);
                 }
             }
@@ -89,7 +92,7 @@ public class ExtendingThemeManager implements ThemeProvider {
 
     private Theme loadTheme(String name, Theme.Type type) throws IOException {
         Theme theme = findTheme(name, type);
-        if (theme.getParentName() != null) {
+        if (theme != null && theme.getParentName() != null) {
             List<Theme> themes = new LinkedList<Theme>();
             themes.add(theme);
 
@@ -144,11 +147,11 @@ public class ExtendingThemeManager implements ThemeProvider {
                 try {
                     return p.getTheme(name, type);
                 } catch (IOException e) {
-                    throw new RuntimeException("Failed to create " + type.toString().toLowerCase() + " theme", e);
+                    log.errorv(e, p.getClass() + " failed to load theme, type={0}, name={1}", type, name);
                 }
             }
         }
-        throw new RuntimeException(type.toString().toLowerCase() + " theme '" + name + "' not found");
+        return null;
     }
 
     public static class ExtendingTheme implements Theme {