From 90063cafec15a444d348fc293f1f1c21e53a875c Mon Sep 17 00:00:00 2001 From: Stian Thorgersen Date: Wed, 14 Oct 2015 20:27:47 +0200 Subject: [PATCH] KEYCLOAK-1965 Include the user resource in the attribute map used by email provider freemarker --- .../freemarker/FreeMarkerEmailProvider.java | 5 ++ .../email/freemarker/beans/ProfileBean.java | 77 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100755 forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/beans/ProfileBean.java 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 f049085452..9f55e37187 100755 --- 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 @@ -20,6 +20,7 @@ import org.jboss.logging.Logger; import org.keycloak.email.EmailException; import org.keycloak.email.EmailProvider; import org.keycloak.email.freemarker.beans.EventBean; +import org.keycloak.email.freemarker.beans.ProfileBean; import org.keycloak.events.Event; import org.keycloak.events.EventType; import org.keycloak.freemarker.FreeMarkerException; @@ -63,6 +64,7 @@ public class FreeMarkerEmailProvider implements EmailProvider { @Override public void sendEvent(Event event) throws EmailException { Map attributes = new HashMap(); + attributes.put("user", new ProfileBean(user)); attributes.put("event", new EventBean(event)); send(toCamelCase(event.getType()) + "Subject", "event-" + event.getType().toString().toLowerCase() + ".ftl", attributes); @@ -71,6 +73,7 @@ public class FreeMarkerEmailProvider implements EmailProvider { @Override public void sendPasswordReset(String link, long expirationInMinutes) throws EmailException { Map attributes = new HashMap(); + attributes.put("user", new ProfileBean(user)); attributes.put("link", link); attributes.put("linkExpiration", expirationInMinutes); @@ -83,6 +86,7 @@ public class FreeMarkerEmailProvider implements EmailProvider { @Override public void sendExecuteActions(String link, long expirationInMinutes) throws EmailException { Map attributes = new HashMap(); + attributes.put("user", new ProfileBean(user)); attributes.put("link", link); attributes.put("linkExpiration", expirationInMinutes); @@ -96,6 +100,7 @@ public class FreeMarkerEmailProvider implements EmailProvider { @Override public void sendVerifyEmail(String link, long expirationInMinutes) throws EmailException { Map attributes = new HashMap(); + attributes.put("user", new ProfileBean(user)); attributes.put("link", link); attributes.put("linkExpiration", expirationInMinutes); diff --git a/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/beans/ProfileBean.java b/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/beans/ProfileBean.java new file mode 100755 index 0000000000..812fb44291 --- /dev/null +++ b/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/beans/ProfileBean.java @@ -0,0 +1,77 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2012, Red Hat, Inc., and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ +package org.keycloak.email.freemarker.beans; + +import org.jboss.logging.Logger; +import org.keycloak.models.UserModel; + +import javax.ws.rs.core.MultivaluedMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Stian Thorgersen + * @author Vlastimil Elias (velias at redhat dot com) + */ +public class ProfileBean { + + private static final Logger logger = Logger.getLogger(ProfileBean.class); + + private UserModel user; + private final Map attributes = new HashMap<>(); + + public ProfileBean(UserModel user) { + this.user = user; + + if (user.getAttributes() != null) { + for (Map.Entry> attr : user.getAttributes().entrySet()) { + List attrValue = attr.getValue(); + if (attrValue != null && attrValue.size() > 0) { + attributes.put(attr.getKey(), attrValue.get(0)); + } + + if (attrValue != null && attrValue.size() > 1) { + logger.warnf("There are more values for attribute '%s' of user '%s' . Will display just first value", attr.getKey(), user.getUsername()); + } + } + } + } + + public String getUsername() { return user.getUsername(); } + + public String getFirstName() { + return user.getFirstName(); + } + + public String getLastName() { + return user.getLastName(); + } + + public String getEmail() { + return user.getEmail(); + } + + public Map getAttributes() { + return attributes; + } +}