DefaultFreeMarkerProviderFactory.java

package org.keycloak.theme.freemarker;

import freemarker.template.Template;
import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.theme.KeycloakSanitizerMethod;

import java.util.concurrent.ConcurrentHashMap;

public class DefaultFreeMarkerProviderFactory implements FreeMarkerProviderFactory {

    private DefaultFreeMarkerProvider provider;
    private ConcurrentHashMap<String, Template> cache;
    private KeycloakSanitizerMethod kcSanitizeMethod;

    @Override
    public DefaultFreeMarkerProvider create(KeycloakSession session) {
        if (provider == null) {
            synchronized (this) {
                if (provider == null) {
                    if (Config.scope("theme").getBoolean("cacheTemplates", true)) {
                        cache = new ConcurrentHashMap<>();
                    }
                    kcSanitizeMethod = new KeycloakSanitizerMethod();
                    provider = new DefaultFreeMarkerProvider(cache, kcSanitizeMethod);
                }
            }
        }
        return provider;
    }

    @Override
    public void init(Config.Scope config) {
    }

    @Override
    public void postInit(KeycloakSessionFactory factory) {
    }

    @Override
    public void close() {
    }

    @Override
    public String getId() {
        return "default";
    }

}