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.lang.StringUtils;
028
029import org.ametys.core.util.I18nUtils;
030import org.ametys.runtime.i18n.I18nizableTextParameter;
031import org.ametys.runtime.i18n.I18nizableText;
032import org.ametys.runtime.plugin.component.PluginAware;
033
034/**
035 * The default user sign up configuration
036 */
037public class DefaultUserSignUpConfiguration implements UserSignUpConfiguration, Configurable, Serviceable, PluginAware, Component
038{
039    /** The i18n utils */
040    protected I18nUtils _i18nUtils;
041    
042    private int _tokenValidity;
043    private String _subjectKeyForSignupEmail;
044    private String _textBodyKeyForSignupEmail;
045    private String _htmlBodyKeyForSignupEmail;
046    private String _subjectKeyForSignupValidationEmail;
047    private String _textBodyKeyForSignupValidationEmail;
048    private String _htmlBodyKeyForSignupValidationEmail;
049    private String _subjectKeyForResetPwd;
050    private String _textBodyKeyForResetPwd;
051    private String _htmlBodyKeyForResetPwd;
052
053    private String _pluginName;
054    
055    @Override
056    public void service(ServiceManager manager) throws ServiceException
057    {
058        _i18nUtils = (I18nUtils) manager.lookup(I18nUtils.ROLE);        
059    }
060    
061    @Override
062    public void setPluginInfo(String pluginName, String featureName, String id)
063    {
064        _pluginName = pluginName;
065    }
066    
067    @Override
068    public void configure(Configuration configuration) throws ConfigurationException
069    {
070        _tokenValidity = Integer.parseInt(configuration.getChild("token-validity").getValue(null));
071        _subjectKeyForSignupEmail = configuration.getChild("signup-email-subject").getValue(null);
072        _textBodyKeyForSignupEmail = configuration.getChild("signup-email-text-body").getValue(null);
073        _htmlBodyKeyForSignupEmail = configuration.getChild("signup-email-html-body").getValue(null);
074        _subjectKeyForSignupValidationEmail = configuration.getChild("signup-validation-email-subject").getValue(null);
075        _textBodyKeyForSignupValidationEmail = configuration.getChild("signup-validation-email-text-body").getValue(null);
076        _htmlBodyKeyForSignupValidationEmail = configuration.getChild("signup-validation-email-html-body").getValue(null);
077        _subjectKeyForResetPwd = configuration.getChild("reset-pwd-email-subject").getValue(null);
078        _textBodyKeyForResetPwd = configuration.getChild("reset-pwd-email-text-body").getValue(null);
079        _htmlBodyKeyForResetPwd = configuration.getChild("reset-pwd-email-html-body").getValue(null);
080    }
081    
082    @Override
083    public int getTokenValidity()
084    {
085        return _tokenValidity;
086    }
087
088    @Override
089    public String getSubjectForSignUpEmail (Map<String, I18nizableTextParameter> defaultI18nParams , String language)
090    {
091        if (StringUtils.isNotBlank(_subjectKeyForSignupEmail))
092        {
093            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForSignupEmail, defaultI18nParams), language);
094        }
095        
096        return null;
097    }
098
099    @Override
100    public String getTextBodyForSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
101    {
102        if (StringUtils.isNotBlank(_textBodyKeyForSignupEmail))
103        {
104            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForSignupEmail, defaultI18nParams), language);
105        }
106        
107        return null;
108    }
109
110    @Override
111    public String getHtmlBodyForSignUpEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
112    {
113        if (StringUtils.isNotBlank(_htmlBodyKeyForSignupEmail))
114        {
115            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForSignupEmail, defaultI18nParams), language);
116        }
117        
118        return null;
119    }
120    
121    @Override
122    public String getSubjectForSignUpValidatedEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
123    {
124        if (StringUtils.isNotBlank(_subjectKeyForSignupValidationEmail))
125        {
126            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForSignupValidationEmail, defaultI18nParams), language);
127        }
128        
129        return null;
130    }
131    
132    @Override
133    public String getTextBodyForSignUpValidatedEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
134    {
135        if (StringUtils.isNotBlank(_textBodyKeyForSignupValidationEmail))
136        {
137            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForSignupValidationEmail, defaultI18nParams), language);
138        }
139        
140        return null;
141    }
142    
143    @Override
144    public String getHtmlBodyForSignUpValidatedEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
145    {
146        if (StringUtils.isNotBlank(_htmlBodyKeyForSignupValidationEmail))
147        {
148            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForSignupValidationEmail, defaultI18nParams), language);
149        }
150        
151        return null;
152    }
153    
154    @Override
155    public String getSubjectForResetPwdEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
156    {
157        if (StringUtils.isNotBlank(_subjectKeyForResetPwd))
158        {
159            return _i18nUtils.translate(_getI18nizableText(_subjectKeyForResetPwd, defaultI18nParams), language);
160        }
161        
162        return null;
163    }
164
165    @Override
166    public String getTextBodyForResetPwdEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
167    {
168        if (StringUtils.isNotBlank(_textBodyKeyForResetPwd))
169        {
170            return _i18nUtils.translate(_getI18nizableText(_textBodyKeyForResetPwd, defaultI18nParams), language);
171        }
172        
173        return null;
174    }
175
176    @Override
177    public String getHtmlBodyForResetPwdEmail(Map<String, I18nizableTextParameter> defaultI18nParams, String language)
178    {
179        if (StringUtils.isNotBlank(_htmlBodyKeyForResetPwd))
180        {
181            return _i18nUtils.translate(_getI18nizableText(_htmlBodyKeyForResetPwd, defaultI18nParams), language);
182        }
183        
184        return null;
185    }
186    
187    /**
188     * Get the {@link I18nizableText} from the configured key and i18n parameters
189     * @param fullI18nKey the configured i18n key
190     * @param i18nParams the i18n parameters
191     * @return the i18nizable text
192     */
193    protected I18nizableText _getI18nizableText(String fullI18nKey, Map<String, I18nizableTextParameter> i18nParams)
194    {
195        String catalogue = StringUtils.contains(fullI18nKey, ":") ? StringUtils.substringBefore(fullI18nKey, ":") : "plugin." + _pluginName;
196        String i18nKey = StringUtils.contains(fullI18nKey, ":") ? StringUtils.substringAfter(fullI18nKey, ":") : fullI18nKey;
197        
198        return new I18nizableText(catalogue, i18nKey, i18nParams);
199    }
200}