View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either
8   //version 2.1 of the License, or (at your option) any later version.
9   //
10  //This library is distributed in the hope that it will be useful,
11  //but WITHOUT ANY WARRANTY; without even the implied warranty of
12  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  //Lesser General Public License for more details.
14  //
15  //You should have received a copy of the GNU Lesser General Public
16  //License along with this library; if not, write to the Free Software
17  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ////////////////////////////////////////////////////////////////////////////////
19  package org.fhw.cabaweb.webfrontend.actions.save;
20  
21  import java.io.IOException;
22  import java.lang.reflect.InvocationTargetException;
23  import java.sql.Timestamp;
24  import java.util.Collection;
25  import java.util.Iterator;
26  import java.util.Properties;
27  
28  import javax.mail.AuthenticationFailedException;
29  import javax.mail.MessagingException;
30  import javax.mail.SendFailedException;
31  import javax.mail.internet.AddressException;
32  import javax.servlet.ServletException;
33  import javax.servlet.http.HttpServletRequest;
34  import javax.servlet.http.HttpServletResponse;
35  import javax.servlet.http.HttpSession;
36  
37  import org.apache.struts.action.Action;
38  import org.apache.struts.action.ActionForm;
39  import org.apache.struts.action.ActionForward;
40  import org.apache.struts.action.ActionMapping;
41  
42  import org.apache.struts.util.MessageResources;
43  
44  import org.apache.commons.beanutils.PropertyUtils;
45  import org.apache.commons.logging.Log;
46  import org.apache.commons.logging.LogFactory;
47  
48  import org.fhw.cabaweb.data.DataInterfaceBenutzerrollen;
49  import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
50  import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
51  
52  import org.fhw.cabaweb.ojb.dataobjects.Benutzerrollen;
53  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
54  import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
55  
56  import org.fhw.cabaweb.tools.MailUtilities;
57  import org.fhw.cabaweb.tools.Password;
58  import org.fhw.cabaweb.tools.StringUtilities;
59  import org.fhw.cabaweb.webfrontend.configs.Keys;
60  import org.fhw.cabaweb.webfrontend.forms.simple.GruppenmitgliedForm;
61  
62  /***
63   * <strong>Action</strong>-Klasse f&uuml;r die Gruppenmitglied Speichern Action .
64   * Die Controller Klasse der Struts Model View Controller Architektur.
65   *
66   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
67   * @version Version 1.0 07.07.2004
68   */
69  public final class GruppenmitgliedSpeichernAction extends Action {
70  
71      /***
72       * The <code>Log</code> instance for this application.
73       */
74      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.save");
75  
76      /***
77       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
78       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort 
79       * erzeugt.  
80       * 
81       * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
82       * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein, 
83       * wenn die Anfrage bereits bearbeitet wurde.
84       * 
85       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
86       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
87       * @param request Die HTTP Anfrage die wir gerade bearbeiten
88       * @param response The HTTP Antwort die wir erzeugen
89       *
90       * @return Die Action zu der wir weiterleiten
91       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
92       *            bzw. die Business Logik einen Fehler verursacht 
93       */
94      public ActionForward execute(ActionMapping mapping,
95  				                 ActionForm form,
96                                   HttpServletRequest request,
97                                   HttpServletResponse response)
98      throws Exception {
99          /*** Forwarding Action Variable mit null initialisieren */
100 //        ActionForward forward = null;
101         /*** Die Locale Variable (Sprache, Formatierung, etc.) */
102 //        Locale locale = getLocale(request);
103 
104         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
105         DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
106         /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
107         DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
108         /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
109         DataInterfaceBenutzerrollen dibr = new DataInterfaceBenutzerrollen();
110         /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
111         MessageResources messages = getResources(request);
112         /*** Die Session der aktuellen Anfrage */
113         HttpSession session = request.getSession();
114         /*** Die übergebene Action */
115 //        String action = gmform.getAction();
116         /*** Die übergebene Action */
117         String action = request.getParameter("action");
118 
119         /*** Zwischenspeichvaribale für den Rückgabewert */
120         boolean returnvalue = false;
121 
122     	if (action == null) 
123     	{
124     	    action = "?";
125         }
126                 
127         if ("Activate".equals(action)) 
128         {
129             /*** Zwischenspeichervaribale für den LogInCode (Request String) */
130             String loginname = null;
131             /*** Zwischenspeichervaribale für den ActivationCode (Request String) */
132             String activationCode = null;
133 
134             try 
135             {
136                 loginname = (String) PropertyUtils.getSimpleProperty(form, "user");
137                 activationCode = (String) PropertyUtils.getSimpleProperty(form, "code");
138             } 
139             catch (Exception e) 
140             {
141                    log.error(e.getMessage(), e);
142             }
143         
144             if (log.isDebugEnabled()) 
145             {
146                 log.debug(" USER ACTIVATION");
147                 log.debug(" User: " + loginname);
148                 log.debug(" Code: " + activationCode);
149             }
150 
151             if(loginname != null && activationCode != null)
152             {
153                 Collection objekte = digm.sucheLogInName(loginname);
154                 Gruppenmitglieder ergebnis = null;
155         
156                 java.util.Iterator iter = objekte.iterator();
157                 if(objekte.size() == 1)
158                 {
159                     ergebnis = (Gruppenmitglieder) iter.next();
160 
161                     if(activationCode.compareTo(ergebnis.getPassworthash()) == 0)
162                     {
163                         ergebnis.setAktiv(Boolean.TRUE);
164                                         
165                         returnvalue = digm.editieren(ergebnis);
166 
167                         if (returnvalue == true) 
168                         {
169                             // Forward control to the specified success URI
170                             if (log.isDebugEnabled()) 
171                             {
172                                 log.debug(" Forwarding to 'activated' page");
173                             }
174         
175                             return (mapping.findForward("activated"));
176                         }
177                     }
178                 }        
179 
180                 // Forward control to the specified success URI
181                 if (log.isDebugEnabled()) 
182                 {
183                     log.debug(" Forwarding to 'activationfailure' page");
184                 }
185     
186                 return (mapping.findForward("activationfailure"));
187             }
188         }
189 
190         if ("Create".equals(action)) 
191         {
192             /*** Das übergebene Formular */
193             GruppenmitgliedForm gmform = (GruppenmitgliedForm) form;
194             /*** Zwischenspeichvaribale für das Gruppenmitglied */
195             Gruppenmitglieder gruppenmitglied = null;
196 
197             if (log.isDebugEnabled()) 
198             {
199                 log.debug("GruppenmitgliedSpeichernAction: Processing " + action + " action");
200                 log.debug(" New User will have Role: User");
201             }
202     
203             // Was this transaction cancelled?
204             if (isCancelled(request)) 
205             {
206                 if (log.isDebugEnabled()) 
207                 {
208                     log.debug(" Transaction '" + action + "' was cancelled");
209                 }
210             
211                 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
212                 return (mapping.findForward("success"));
213             }
214 
215             gruppenmitglied = (Gruppenmitglieder) session.getAttribute(Keys.GRUPPENMITGLIED_KEY);
216 
217             if (gruppenmitglied == null) 
218             {
219                 if (log.isDebugEnabled()) 
220                 {
221                     log.debug(" In Session saved User is NULL.");
222                 }
223             
224                 gruppenmitglied = new Gruppenmitglieder();
225             }
226 
227             // All required validations were done by the form itself
228             if (log.isDebugEnabled()) 
229             {
230                 log.debug(" Populating database from form bean");
231             }
232 
233             try 
234             {
235                 Collection roles = dibr.sucheBenutzerrollenname("Benutzer");
236                 Collection groups = null;
237                 Boolean istZugeordnet = Boolean.FALSE;
238 
239                 if (log.isDebugEnabled() && gmform.getGruppenpasswort() != null) 
240                 {
241                     log.debug(" GRPPASSWD      = \"" + gmform.getGruppenpasswort() + "\"");
242                     log.debug(" GRPPASSWD trim = \"" + gmform.getGruppenpasswort().trim() + "\"");
243                 }
244                 
245                 if(gmform.getGruppenpasswort() == null || gmform.getGruppenpasswort().trim().compareTo("") == 0)
246                 {
247                     if (log.isDebugEnabled()) 
248                     {
249                         log.debug(" GRPPASSWD = NULL");
250                     }
251 
252                     groups = dipg.sucheKombination(null, gmform.getProjektnummer(), "Default", null);
253                 }
254                 else
255                 {
256                     if (log.isDebugEnabled()) 
257                     {
258                         log.debug(" GRPPASSWD != NULL");
259                     }
260 
261                     groups = dipg.sucheKombination(null, null, null, gmform.getGruppenpasswort());
262                     istZugeordnet = Boolean.TRUE;
263                 }
264                 
265                 if(groups == null || groups.size() == 0)
266                 {
267                     throw new Exception("Keine Projektgruppe gefunden");
268                 }
269                 
270                 Benutzerrollen role = null;
271                 Projektgruppen group = null;
272                 
273                 Iterator iter = roles.iterator();
274                 if(iter.hasNext())
275                     role = (Benutzerrollen) iter.next();
276     
277                 if (log.isDebugEnabled()) 
278                 {
279                     log.debug(" ROLE : " + role);
280                 }
281                 
282                 iter = groups.iterator();
283                 if(iter.hasNext())
284                 {
285                     group = (Projektgruppen) iter.next();
286                 }
287 
288                 if(!group.getAktiv().booleanValue())
289                 {
290                     groups = dipg.sucheKombination(null, gmform.getProjektnummer(), "Default", null);
291 
292                     iter = groups.iterator();
293 
294                     if(iter.hasNext())
295                     {
296                         group = (Projektgruppen) iter.next();
297                     }
298                 }
299     
300                 if (log.isDebugEnabled()) 
301                 {
302                     log.debug(" GROUP: " + group);
303                 }
304     
305                 gmform.setLetzterlogin(null);
306                 PropertyUtils.copyProperties(gruppenmitglied, gmform);
307                 gruppenmitglied.setMitgliedsnummer(new Integer(0));
308                 gruppenmitglied.setProjektgruppe(group);
309                 gruppenmitglied.setBenutzerrolle(role);
310                 gruppenmitglied.setLetzterlogin(new Timestamp(System.currentTimeMillis()));
311                 gruppenmitglied.setAktiv(Boolean.FALSE);
312                 gruppenmitglied.setIstZugeordnet(istZugeordnet);
313     
314                 if (log.isDebugEnabled()) 
315                 {
316                     log.debug(" USER : " + gruppenmitglied);
317                 }
318                 
319                 if(gmform.getPasswort() != null && gmform.getPasswort() != "")
320                     gruppenmitglied.setPassworthash(Password.generateMD5(gmform.getPasswort()));
321                 else
322                     gruppenmitglied.setPassworthash(gmform.getPassworthash());
323             } 
324             catch (InvocationTargetException e) 
325             {
326                 Throwable t = e.getTargetException();
327                 if (t == null)
328                     t = e;
329                 log.error("GruppenmitgliedForm.populate", t);
330                 throw new ServletException("GruppenmitgliedForm.populate", t);
331             } 
332             catch (Throwable t) 
333             {
334                 log.error("GruppenmitgliedForm.populate", t);
335                 throw new ServletException("GruppenmitgliedForm.populate", t);
336             }
337     
338             gruppenmitglied.setLoginName(StringUtilities.convertUTF8String(gruppenmitglied.getLoginName()));
339             gruppenmitglied.setMitgliedsadresse1(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsadresse1()));
340             gruppenmitglied.setMitgliedsadresse2(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsadresse2()));
341             gruppenmitglied.setMitgliedsemailadresse(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsemailadresse()));
342             gruppenmitglied.setMitgliedsname(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsname()));
343             gruppenmitglied.setMitgliedsvorname(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsvorname()));
344             gruppenmitglied.setMitgliedsort(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsort()));
345                 
346             returnvalue = digm.erzeugen(gruppenmitglied);
347             session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
348 
349             if (!returnvalue) 
350             {
351                 if (log.isDebugEnabled()) 
352                 {
353                     log.debug(" User creation failed");
354                 }
355 
356                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.gruppenmitglied.create"));
357                 return (null);
358             }
359                 
360             // Remove the obsolete form bean and current project
361             if (mapping.getAttribute() != null) 
362             {
363                 if ("request".equals(mapping.getScope()))
364                     request.removeAttribute(mapping.getAttribute());
365                 else
366                     session.removeAttribute(mapping.getAttribute());
367             }
368             session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
369 
370             Properties properties = StringUtilities.getPropertiesFromFile("cabaweb.properties");
371 
372             String smtphost = properties.getProperty("SMTPHost");
373             String smtpport = properties.getProperty("SMTPPort");
374             String smtpuser = properties.getProperty("SMTPUser");
375             String smtppassword = properties.getProperty("SMTPPassword");
376             String absenderadresse = properties.getProperty("AbsenderAdresse");
377             String absoluteURL = properties.getProperty("AbsoluteURL");
378     
379             try
380             {
381                 MessageResources grpmessages = MessageResources.getMessageResources("org.fhw.cabaweb.webfrontend.resources.GruppenmitgliederResources");
382                 String subject = grpmessages.getMessage("message.de.emailsubject");
383                 String mailbody = grpmessages.getMessage("message.de.emailtop") + "\n\n";
384                 mailbody += grpmessages.getMessage("message.de.emailactivate");
385                 mailbody += grpmessages.getMessage("message.de.activateurl", absoluteURL);
386                 mailbody += "?action=Activate&user=" + gruppenmitglied.getLoginName();
387                 mailbody += "&code=" + gruppenmitglied.getPassworthash() + "\n\n";
388                 mailbody += grpmessages.getMessage("message.de.emailmiddle") + "\n\n";
389                 mailbody += grpmessages.getMessage("message.de.emailnewuser") + gruppenmitglied.getLoginName() + "\n\n";
390                 mailbody += grpmessages.getMessage("message.de.emailbottom") + "\n";
391                 mailbody += "\n-----------------------------------------------------------------\n";
392                 mailbody += grpmessages.getMessage("message.en.emailtop") + "\n\n";
393                 mailbody += grpmessages.getMessage("message.en.emailactivate");
394                 mailbody += grpmessages.getMessage("message.en.emailactivate");
395                 mailbody += grpmessages.getMessage("message.en.activateurl", absoluteURL);
396                 mailbody += "?action=Activate&user=" + gruppenmitglied.getLoginName();
397                 mailbody += "&code=" + gruppenmitglied.getPassworthash() + "\n\n";
398                 mailbody += grpmessages.getMessage("message.en.emailmiddle") + "\n\n";
399                 mailbody += grpmessages.getMessage("message.en.emailnewuser") + gruppenmitglied.getLoginName() + "\n\n";
400                 mailbody += grpmessages.getMessage("message.en.emailbottom") + "\n";
401                 
402                 MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
403             }
404             catch(IOException ex)
405             {
406                 log.error(" IOException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
407                 throw new ServletException("IOException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
408             }
409             catch(AuthenticationFailedException ex)
410             {
411                 log.error(" AuthenticationFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
412                 throw new ServletException("AuthenticationFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
413             }
414             catch(SendFailedException ex)
415             {
416                 log.error(" SendFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
417                 throw new ServletException("SendFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
418             }
419             catch(AddressException ex)
420             {
421                 log.error(" AddressException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
422                 throw new ServletException("AddressException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
423             }
424             catch(MessagingException ex)
425             {
426                 log.error(" MessagingException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
427                 throw new ServletException("MessagingException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
428             }
429         }
430         
431         // Forward control to the specified success URI
432         if (log.isDebugEnabled()) 
433         {
434             log.debug(" Forwarding to 'success' page");
435         }
436         
437         return (mapping.findForward("success"));
438     }
439 }