View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.crm.modules.mylutecedirectory.service;
35  
36  import fr.paris.lutece.plugins.crm.modules.mylutece.service.IMyLuteceUserService;
37  import fr.paris.lutece.plugins.mylutece.modules.directory.authentication.business.MyluteceDirectoryUser;
38  import fr.paris.lutece.plugins.mylutece.modules.directory.authentication.business.MyluteceDirectoryUserHome;
39  import fr.paris.lutece.plugins.mylutece.modules.directory.authentication.service.IMyluteceDirectoryService;
40  import fr.paris.lutece.plugins.mylutece.modules.directory.authentication.service.MyluteceDirectoryAnonymizationService;
41  import fr.paris.lutece.plugins.mylutece.modules.directory.authentication.service.MyluteceDirectoryPlugin;
42  import fr.paris.lutece.plugins.mylutece.modules.directory.authentication.service.parameter.IMyluteceDirectoryParameterService;
43  import fr.paris.lutece.plugins.mylutece.service.IAnonymizationService;
44  import fr.paris.lutece.plugins.mylutece.service.attribute.MyLuteceUserFieldService;
45  import fr.paris.lutece.plugins.mylutece.util.SecurityUtils;
46  import fr.paris.lutece.portal.service.admin.AdminAuthenticationService;
47  import fr.paris.lutece.portal.service.i18n.I18nService;
48  import fr.paris.lutece.portal.service.mail.MailService;
49  import fr.paris.lutece.portal.service.plugin.Plugin;
50  import fr.paris.lutece.portal.service.plugin.PluginService;
51  import fr.paris.lutece.portal.service.template.AppTemplateService;
52  import fr.paris.lutece.portal.service.util.AppPathService;
53  import fr.paris.lutece.portal.service.util.AppPropertiesService;
54  import fr.paris.lutece.util.html.HtmlTemplate;
55  import fr.paris.lutece.util.password.PasswordUtil;
56  
57  import java.util.Collection;
58  import java.util.HashMap;
59  import java.util.List;
60  import java.util.Locale;
61  import java.util.Map;
62  
63  import javax.inject.Inject;
64  import javax.inject.Named;
65  
66  import javax.servlet.http.HttpServletRequest;
67  
68  
69  /**
70   *
71   * MyLuteceDirectoryUserService
72   *
73   */
74  public class MyLuteceDirectoryUserService implements IMyLuteceUserService<Collection<MyluteceDirectoryUser>>
75  {
76      // PROPERTIES
77      private static final String PROPERTY_NO_REPLY_EMAIL = "mail.noreply.email";
78      private static final String PROPERTY_MESSAGE_EMAIL_SUBJECT = "module.mylutece.directory.forgot_password.email.subject";
79  
80      // MARKS
81      private static final String MARK_NEW_PASSWORD = "new_password";
82      private static final String MARK_LOGIN_URL = "login_url";
83  
84      // TEMPLATES
85      private static final String TEMPLATE_EMAIL_FORGOT_PASSWORD = "admin/plugins/mylutece/modules/directory/email_forgot_password.html";
86      @Inject
87      private IMyluteceDirectoryService _myluteceDirectoryService;
88      @Inject
89      private IMyluteceDirectoryParameterService _parameterService;
90      @Inject
91      @Named( MyluteceDirectoryAnonymizationService.BEAN_SERVICE )
92      private IAnonymizationService _anonymizationService;
93  
94      /**
95       * {@inheritDoc}
96       */
97      @Override
98      public Collection<MyluteceDirectoryUser> getMyLuteceUserByUserGuid( String strUserGuid )
99      {
100         return _myluteceDirectoryService.getMyluteceDirectoryUsersForLogin( strUserGuid,
101             PluginService.getPlugin( MyluteceDirectoryPlugin.PLUGIN_NAME ) );
102     }
103 
104     /**
105      * {@inheritDoc}
106      */
107     @Override
108     public void doRemoveMyLuteceUser( Collection<MyluteceDirectoryUser> listMyLuteceUsers, HttpServletRequest request,
109         Locale locale )
110     {
111         if ( ( listMyLuteceUsers != null ) && !listMyLuteceUsers.isEmpty(  ) )
112         {
113             for ( MyluteceDirectoryUser user : listMyLuteceUsers )
114             {
115                 _myluteceDirectoryService.doRemoveMyluteceDirectoryUser( user,
116                     PluginService.getPlugin( MyluteceDirectoryPlugin.PLUGIN_NAME ), true );
117                 MyLuteceUserFieldService.doRemoveUserFields( user.getIdRecord(  ), request, locale );
118             }
119         }
120     }
121 
122     /**
123      * {@inheritDoc}
124      */
125     @Override
126     public void doAnonymizeMyLuteceUser( Collection<MyluteceDirectoryUser> listMyLuteceUsers,
127         HttpServletRequest request, Locale locale )
128     {
129         if ( ( listMyLuteceUsers != null ) && !listMyLuteceUsers.isEmpty(  ) )
130         {
131             for ( MyluteceDirectoryUser user : listMyLuteceUsers )
132             {
133                 _anonymizationService.anonymizeUser( user.getIdRecord(  ), locale );
134             }
135         }
136     }
137 
138     /**
139      * {@inheritDoc}
140      */
141     @Override
142     public void doReinitPassword( Collection<MyluteceDirectoryUser> listMyLuteceUsers, HttpServletRequest request,
143         Locale locale )
144     {
145         if ( ( listMyLuteceUsers != null ) && !listMyLuteceUsers.isEmpty(  ) )
146         {
147             Plugin plugin = PluginService.getPlugin( MyluteceDirectoryPlugin.PLUGIN_NAME );
148 
149             for ( MyluteceDirectoryUser user : listMyLuteceUsers )
150             {
151                 // make password
152                 String strPassword = PasswordUtil.makePassword(  );
153 
154                 MyluteceDirectoryUser userStored = _myluteceDirectoryService.getMyluteceDirectoryUser( user.getIdRecord(  ),
155                         plugin );
156                 userStored.setPasswordMaxValidDate( SecurityUtils.getPasswordMaxValidDate( _parameterService, plugin ) );
157                 strPassword = SecurityUtils.buildPassword( _parameterService, plugin, strPassword );
158                 MyluteceDirectoryUserHome.updatePassword( userStored, strPassword, plugin );
159 
160                 List<String> listEmails = _myluteceDirectoryService.getListEmails( userStored, plugin, locale );
161 
162                 if ( ( listEmails != null ) && !listEmails.isEmpty(  ) )
163                 {
164                     //send password by e-mail
165                     String strSenderEmail = AppPropertiesService.getProperty( PROPERTY_NO_REPLY_EMAIL );
166                     String strEmailSubject = I18nService.getLocalizedString( PROPERTY_MESSAGE_EMAIL_SUBJECT, locale );
167                     Map<String, Object> model = new HashMap<String, Object>(  );
168                     model.put( MARK_NEW_PASSWORD, strPassword );
169                     model.put( MARK_LOGIN_URL,
170                         AppPathService.getBaseUrl( request ) +
171                         AdminAuthenticationService.getInstance(  ).getLoginPageUrl(  ) );
172 
173                     HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_EMAIL_FORGOT_PASSWORD, locale,
174                             model );
175 
176                     for ( String email : listEmails )
177                     {
178                         MailService.sendMailHtml( email, strSenderEmail, strSenderEmail, strEmailSubject,
179                             template.getHtml(  ) );
180                     }
181                 }
182             }
183         }
184     }
185 }