001/*
002 *  Copyright 2016 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.web.usermanagement;
017
018import java.util.Map;
019
020import org.apache.avalon.framework.component.Component;
021import org.apache.avalon.framework.configuration.Configurable;
022import org.apache.avalon.framework.configuration.Configuration;
023import org.apache.avalon.framework.configuration.ConfigurationException;
024import org.apache.avalon.framework.service.ServiceException;
025import org.apache.avalon.framework.service.ServiceManager;
026import org.apache.avalon.framework.service.Serviceable;
027import org.apache.commons.lang3.StringUtils;
028import org.apache.commons.lang3.Strings;
029
030import org.ametys.core.util.I18nUtils;
031import org.ametys.runtime.i18n.I18nizableTextParameter;
032import org.ametys.runtime.i18n.I18nizableText;
033import org.ametys.runtime.plugin.component.PluginAware;
034
035/**
036 * The default user sign up configuration
037 */
038public class DefaultUserSignUpConfiguration implements UserSignUpConfiguration, Configurable, Serviceable, PluginAware, Component
039{
040    /** The i18n utils */
041    protected I18nUtils _i18nUtils;
042    
043    private int _tokenValidity;
044    private String _subjectKeyForSignupEmail;
045    private String _textBodyKeyForSignupEmail;
046    private String _htmlBodyKeyForSignupEmail;
047    private String _subjectKeyForInvitToSignupEmail;
048    private String _textBodyKeyForInvitToSignupEmail;
049    private String _htmlBodyKeyForInvitToSignupEmail;
050    private String _subjectKeyForSignupValidationEmail;
051    private String _textBodyKeyForSignupValidationEmail;
052    private String _htmlBodyKeyForSignupValidationEmail;
053    private String _subjectKeyForResetPwd;
054    private String _textBodyKeyForResetPwd;
055    private String _htmlBodyKeyForResetPwd;
056
057    private String _pluginName;
058
059    
060    @Override
061    public void service(ServiceManager manager) throws ServiceException
062    {
063        _i18nUtils = (I18nUtils) manager.lookup(I18nUtils.ROLE);        
064    }
065    
066    @Override
067    public void setPluginInfo(String pluginName, String featureName, String id)
068    {
069        _pluginName = pluginName;
070    }
071    
072    @Override
073    public void configure(Configuration configuration) throws ConfigurationException
074    {
075        _tokenValidity = Integer.parseInt(configuration.getChild("token-validity").getValue(null));
076        _subjectKeyForSignupEmail = configuration.getChild("signup-email-subject").getValue(null);
077        _textBodyKeyForSignupEmail = configuration.getChild("signup-email-text-body").getValue(null);
078        _htmlBodyKeyForSignupEmail = configuration.getChild("signup-email-html-body").getValue(null);
079        _subjectKeyForInvitToSignupEmail = configuration.getChild("invit-to-signup-email-subject").getValue(null);
080        _textBodyKeyForInvitToSignupEmail = configuration.getChild("invit-to-signup-email-text-body").getValue(null);
081        _htmlBodyKeyForInvitToSignupEmail = configuration.getChild("invit-to-signup-email-html-body").getValue(null);
082        _subjectKeyForSignupValidationEmail = configuration.getChild("signup-validation-email-subject").getValue(null);
083        _textBodyKeyForSignupValidationEmail = configuration.getChild("signup-validation-email-text-body").getValue(null);
084        _htmlBodyKeyForSignupValidationEmail = configuration.getChild("signup-validation-email-html-body").getValue(null);
085        _subjectKeyForResetPwd = configuration.getChild("reset-pwd-email-subject").getValue(null);
086        _textBodyKeyForResetPwd = configuration.getChild("reset-pwd-email-text-body").getValue(null);
087        _htmlBodyKeyForResetPwd = configuration.getChild("reset-pwd-email-html-body").getValue(null);
088    }
089    
090    @Override
091    public int getTokenValidity()
092    {
093        return _tokenValidity;
094    }
095
096    @Override
097    public String getSubjectForSignUpEmail (Map<String, I18nizableTextParameter> defaultI18nParams , String language)
098    {
099        if (StringUtils.isNotBlank(_subjectKeyForSignupEmail))
100        {
101            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForSignupEmail, defaultI18nParams), language);
102        }
103        
104        return null;
105    }
106
107    @Override
108    public String getTextBodyForSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
109    {
110        if (StringUtils.isNotBlank(_textBodyKeyForSignupEmail))
111        {
112            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForSignupEmail, defaultI18nParams), language);
113        }
114        
115        return null;
116    }
117
118    @Override
119    public String getHtmlBodyForSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
120    {
121        if (StringUtils.isNotBlank(_htmlBodyKeyForSignupEmail))
122        {
123            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForSignupEmail, defaultI18nParams), language);
124        }
125        
126        return null;
127    }
128    
129    public String getSubjectForInvitationToSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
130    {
131        if (StringUtils.isNotBlank(_subjectKeyForInvitToSignupEmail))
132        {
133            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForInvitToSignupEmail, defaultI18nParams), language);
134        }
135        
136        return null;
137    }
138    
139    public String getTextBodyForInvitationToSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
140    {
141        if (StringUtils.isNotBlank(_textBodyKeyForInvitToSignupEmail))
142        {
143            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForInvitToSignupEmail, defaultI18nParams), language);
144        }
145        
146        return null;
147    }
148    
149    public String getHtmlBodyForInvitationToSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
150    {
151        if (StringUtils.isNotBlank(_htmlBodyKeyForInvitToSignupEmail))
152        {
153            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForInvitToSignupEmail, defaultI18nParams), language);
154        }
155        
156        return null;
157    }
158    
159    @Override
160    public String getSubjectForSignUpValidatedEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
161    {
162        if (StringUtils.isNotBlank(_subjectKeyForSignupValidationEmail))
163        {
164            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForSignupValidationEmail, defaultI18nParams), language);
165        }
166        
167        return null;
168    }
169    
170    @Override
171    public String getTextBodyForSignUpValidatedEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
172    {
173        if (StringUtils.isNotBlank(_textBodyKeyForSignupValidationEmail))
174        {
175            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForSignupValidationEmail, defaultI18nParams), language);
176        }
177        
178        return null;
179    }
180    
181    @Override
182    public String getHtmlBodyForSignUpValidatedEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
183    {
184        if (StringUtils.isNotBlank(_htmlBodyKeyForSignupValidationEmail))
185        {
186            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForSignupValidationEmail, defaultI18nParams), language);
187        }
188        
189        return null;
190    }
191    
192    @Override
193    public String getSubjectForResetPwdEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
194    {
195        if (StringUtils.isNotBlank(_subjectKeyForResetPwd))
196        {
197            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForResetPwd, defaultI18nParams), language);
198        }
199        
200        return null;
201    }
202
203    @Override
204    public String getTextBodyForResetPwdEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
205    {
206        if (StringUtils.isNotBlank(_textBodyKeyForResetPwd))
207        {
208            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForResetPwd, defaultI18nParams), language);
209        }
210        
211        return null;
212    }
213
214    @Override
215    public String getHtmlBodyForResetPwdEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
216    {
217        if (StringUtils.isNotBlank(_htmlBodyKeyForResetPwd))
218        {
219            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForResetPwd, defaultI18nParams), language);
220        }
221        
222        return null;
223    }
224    
225    /**
226     * Get the {@link I18nizableText} from the configured key and i18n parameters
227     * @param fullI18nKey the configured i18n key
228     * @param i18nParams the i18n parameters
229     * @return the i18nizable text
230     */
231    protected I18nizableText _getI18nizableText(String fullI18nKey, Map<String, I18nizableTextParameter> i18nParams)
232    {
233        String catalogue = Strings.CS.contains(fullI18nKey, ":") ? StringUtils.substringBefore(fullI18nKey, ":") : "plugin." + _pluginName;
234        String i18nKey = Strings.CS.contains(fullI18nKey, ":") ? StringUtils.substringAfter(fullI18nKey, ":") : fullI18nKey;
235        
236        return new I18nizableText(catalogue, i18nKey, i18nParams);
237    }
238}