1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ü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
101 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
102
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
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
170 if (log.isDebugEnabled())
171 {
172 log.debug(" Forwarding to 'activated' page");
173 }
174
175 return (mapping.findForward("activated"));
176 }
177 }
178 }
179
180
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
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
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
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
432 if (log.isDebugEnabled())
433 {
434 log.debug(" Forwarding to 'success' page");
435 }
436
437 return (mapping.findForward("success"));
438 }
439 }