KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > portal > core > portlet > user > UserPortlet


1 /*****************************************
2  * *
3  * JBoss Portal: The OpenSource Portal *
4  * *
5  * Distributable under LGPL license. *
6  * See terms of license at gnu.org. *
7  * *
8  *****************************************/

9 package org.jboss.portal.core.portlet.user;
10
11 import org.jboss.logging.Logger;
12 import org.jboss.portal.common.context.DelegateContext;
13 import org.jboss.portal.common.util.Tools;
14 import org.jboss.portal.core.CoreConstants;
15 import org.jboss.portal.core.model.Role;
16 import org.jboss.portal.core.model.User;
17 import org.jboss.portal.core.modules.*;
18 import org.jboss.portal.core.portlet.PortletHelper;
19 import org.jboss.portal.core.servlet.jsp.PortalJsp;
20 import org.jboss.portal.core.util.Parameters;
21 import org.jboss.portlet.*;
22
23 import javax.naming.InitialContext JavaDoc;
24 import javax.naming.NamingException JavaDoc;
25 import javax.portlet.*;
26 import java.io.IOException JavaDoc;
27 import java.io.PrintWriter JavaDoc;
28 import java.util.*;
29
30 /**
31  * This portlet aims at managing users
32  *
33  * @author <a HREF="mailto:julien@jboss.org">Julien Viet</a>
34  * @author <a HREF="mailto:theute@jboss.org">Thomas Heute </a>
35  * @version $Revision: 1.26 $
36  */

37 public class UserPortlet
38    extends JBossPortlet
39 {
40    /**
41     * the class logger
42     */

43    public static final Logger log = Logger.getLogger(JBossPortlet.class);
44
45    // Render op
46

47    /**
48     * Render operation to show the login screen
49     */

50    public static final String JavaDoc OP_SHOWLOGIN = "showLogin";
51
52    /**
53     * Render operation to show the register screen
54     */

55    public static final String JavaDoc OP_SHOWREGISTER = "showRegister";
56
57    /**
58     * Render operation to show the user menu screen
59     */

60    public static final String JavaDoc OP_SHOWMENU = "showMenu";
61
62    /**
63     * Render operation to show the user profile to edit
64     */

65    public static final String JavaDoc OP_SHOWPROFILE = "showProfile";
66
67    /**
68     * Render operation to show the screen to assign roles to a user
69     */

70    public static final String JavaDoc OP_SHOWADDROLESTOUSER = "showAddRolesToUser";
71
72    /**
73     * Render operation to show the list of users
74     */

75    public static final String JavaDoc OP_SHOWLISTUSERS = "showListUsers";
76
77    private UserModule userModule;
78    private RoleModule roleModule;
79    private MailModule mailModule;
80    private PortletHelper portletHelper;
81
82    /**
83     * init method of the portlet, Setting up the diffrent modules used.
84     *
85     * @throws PortletException If a module cannot be looked up.
86     */

87    public void init()
88       throws PortletException
89    {
90       super.init();
91       try
92       {
93          userModule = (UserModule)new InitialContext JavaDoc().lookup(ModuleConstants.USERMODULE_JNDINAME);
94          roleModule = (RoleModule)new InitialContext JavaDoc().lookup(ModuleConstants.ROLEMODULE_JNDINAME);
95          mailModule = (MailModule)new InitialContext JavaDoc().lookup(ModuleConstants.MAILMODULE_JNDINAME);
96       }
97       catch (NamingException JavaDoc e)
98       {
99          throw new PortletException(e);
100       }
101
102       portletHelper = new PortletHelper(this);
103    }
104
105    public String JavaDoc getDefaultOperation()
106    {
107       return OP_SHOWLOGIN;
108    }
109
110    /**
111     * doView method
112     *
113     * @param req Render request
114     * @param resp render response
115     * @throws PortletException DOCUMENT_ME
116     * @throws PortletSecurityException DOCUMENT_ME
117     * @throws IOException DOCUMENT_ME
118     */

119    protected void doView(JBossRenderRequest req, JBossRenderResponse resp)
120       throws PortletException,
121       PortletSecurityException,
122       IOException JavaDoc
123    {
124       String JavaDoc op;
125       resp.setContentType("text/html");
126       PrintWriter JavaDoc writer = resp.getWriter();
127
128       if ((req.getUser() != null) && (!req.getUser().getEnabled()))
129       {
130          req.getPortletSession().invalidate();
131          PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/login.jsp");
132          if ("1".equals(getPortletConfig().getInitParameter("useSSL")))
133          {
134             req.setAttribute("secureURL", req.getURL(Boolean.TRUE, Boolean.TRUE));
135          }
136          req.setAttribute("URL", req.getURL(Boolean.TRUE, null));
137          rd.include(req, resp);
138          return;
139       }
140
141       if (req.getRemoteUser() != null)
142       {
143          if (req.getWindowState() != WindowState.MAXIMIZED)
144          {
145             op = OP_SHOWMENU;
146          }
147          else
148          {
149             op = req.getParameters().get(getOperationName(),
150                OP_SHOWMENU);
151             // Because of the automatic redirection
152
if (op.equals(OP_SHOWLOGIN))
153             {
154                op = OP_SHOWMENU;
155             }
156          }
157
158          Locale locale = req.getLocale();
159          ResourceBundle bundle = getResourceBundle(locale);
160          if (OP_SHOWPROFILE.equals(op))
161          {
162             Integer JavaDoc userid = req.getParameters().getIntObject("userid");
163             User user = null;
164             if (userid != null)
165             {
166                try
167                {
168                   user = userModule.findUserByID(userid);
169                }
170                catch (Exception JavaDoc e)
171                {
172                   log.error("Cannot retrive user", e);
173                }
174             }
175             else
176             {
177                user = req.getUser();
178             }
179
180             // Validate we have a user object
181
if (user == null)
182             {
183                throw new PortletException("Not user object found");
184             }
185
186             //
187
DelegateContext ctx = new DelegateContext();
188
189             //
190
ctx.put("userid", user.getID());
191             fillContextWithuserProfile(user, ctx);
192
193             //
194
DelegateContext timeZoneCtx = null;
195             String JavaDoc selected = req.getParameter("SELECTEDTIMEZONE");
196             for (int i = 0; i < UserPortletConstants.TIME_ZONE_OFFSETS.length; i++)
197             {
198                if (UserPortletConstants.TIME_ZONE_OFFSETS[i] != null)
199                {
200                   timeZoneCtx = ctx.next("timezone");
201                   timeZoneCtx.put("name", UserPortletConstants.TIME_ZONE_OFFSETS[i]);
202                   timeZoneCtx.put("id", "" + i);
203                   if ((selected != null) && selected.equals("" + i))
204                   {
205                      timeZoneCtx.put("selected", "selected");
206                   }
207                }
208             }
209
210             //
211
req.setAttribute(PortalJsp.CTX_REQUEST, ctx);
212             resp.setTitle(bundle.getString("REGISTER_PERSONALINFO"));
213             PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/editProfile.jsp");
214             rd.include(req, resp);
215          }
216          else if (OP_SHOWMENU.equals(op))
217          {
218             DelegateContext ctx = new DelegateContext();
219             if (req.hasPermission("Admin"))
220             {
221                ctx.next("admin");
222             }
223             req.setAttribute(PortalJsp.CTX_REQUEST, ctx);
224             PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/menu.jsp");
225             rd.include(req, resp);
226
227          }
228          else if (OP_SHOWLISTUSERS.equals(op))
229          {
230             if (req.hasPermission("Admin"))
231             {
232                try
233                {
234                   int offset = req.getParameters().getInt("offset", 0);
235                   int usersPerPage = req.getParameters().getInt("usersperpage", UserPortletConstants.DEFAULT_USERSPERPAGE);
236                   String JavaDoc usernameFilter = req.getParameters().get("usernamefilter", "");
237
238                   // We get usersPerPage + 1 entries so we can know if there is
239
// a next page
240
// It's tricky but it avoids to make 2 queries.
241
Set users = null;
242                   if (usernameFilter.trim().length() == 0)
243                   {
244                      users = userModule.findUsers(offset, usersPerPage + 1);
245                   }
246                   else
247                   {
248                      users = userModule.findUsersFilteredByUsername(usernameFilter, offset, usersPerPage + 1);
249                   }
250
251                   User[] usersArray = new User[users.size()];
252                   usersArray = (User[])users.toArray(usersArray);
253                   DelegateContext ctx = new DelegateContext();
254
255                   DelegateContext rowCtx = null;
256                   for (int i = 0; i < Math.min(usersArray.length, usersPerPage); i++)
257                   {
258                      int oddeven = i % 2;
259                      User user = usersArray[i];
260                      if (oddeven == 0)
261                      {
262                         rowCtx = ctx.next("row");
263                      }
264
265                      rowCtx.put("fullname" + oddeven, getFullName(bundle, user));
266                      rowCtx.put("username" + oddeven, user.getUserName());
267
268                      //
269
Iterator itRoles = user.getRoles().iterator();
270                      while (itRoles.hasNext())
271                      {
272                         DelegateContext rolesCtx = rowCtx.next("roles" + oddeven);
273                         rolesCtx.put("name", ((Role)itRoles.next()).getDisplayName());
274                      }
275
276                      PortletURL editURL = resp.createRenderURL();
277                      editURL.setParameter(getOperationName(), OP_SHOWPROFILE);
278                      editURL.setParameter("userid", "" + user.getID());
279
280                      PortletURL rolesURL = resp.createRenderURL();
281                      rolesURL.setParameter(getOperationName(), OP_SHOWADDROLESTOUSER);
282                      rolesURL.setParameter("userid", "" + user.getID());
283
284                      rowCtx.put("editURL" + oddeven, editURL.toString());
285                      rowCtx.put("rolesURL" + oddeven, rolesURL.toString());
286                   }
287
288                   if (offset != 0)
289                   {
290                      PortletURL previousPageLink = resp.createRenderURL();
291                      previousPageLink.setParameter(getOperationName(), OP_SHOWLISTUSERS);
292                      previousPageLink.setParameter("offset", "" + Math.max(0, offset - usersPerPage));
293                      previousPageLink.setParameter("usersperpage", "" + usersPerPage);
294                      previousPageLink.setParameter("usernamefilter", usernameFilter);
295                      DelegateContext previousCtx = ctx.next("previouspage");
296                      previousCtx.put("link", previousPageLink.toString());
297                   }
298
299                   if (usersArray.length > usersPerPage)
300                   {
301                      PortletURL nextPageLink = resp.createRenderURL();
302                      nextPageLink.setParameter(getOperationName(), OP_SHOWLISTUSERS);
303                      nextPageLink.setParameter("offset", "" + (offset + usersPerPage));
304                      nextPageLink.setParameter("usersperpage", "" + usersPerPage);
305                      nextPageLink.setParameter("usernamefilter", usernameFilter);
306                      DelegateContext nextCtx = ctx.next("nextpage");
307                      nextCtx.put("link", nextPageLink.toString());
308                   }
309
310                   ctx.put("usernamefilter", usernameFilter);
311                   req.setAttribute(PortalJsp.CTX_REQUEST, ctx);
312                }
313                catch (IllegalArgumentException JavaDoc e)
314                {
315                   // TODO Auto-generated catch block
316
e.printStackTrace();
317                }
318                catch (ModuleException e)
319                {
320                   // TODO Auto-generated catch block
321
e.printStackTrace();
322                }
323
324                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/listUsers.jsp");
325                rd.include(req, resp);
326             }
327          }
328          else if (OP_SHOWADDROLESTOUSER.equals(op))
329          {
330             if (req.hasPermission("Admin"))
331             {
332                DelegateContext ctx = new DelegateContext();
333
334                try
335                {
336                   User user = userModule.findUserByID(req.getParameters().getIntObject("userid"));
337                   ctx.put("userid", user.getID());
338                   ctx.put("username", user.getUserName());
339                   ctx.put("userfullname", getFullName(bundle, user));
340                   Set userRoles = user.getRoles();
341
342                   Set roles = roleModule.findRoles();
343                   Role[] rolesArray = new Role[roles.size()];
344                   rolesArray = (Role[])roles.toArray(rolesArray);
345                   Role role = null;
346                   DelegateContext rowCtx = null;
347                   for (int i = 0; i < rolesArray.length; i++)
348                   {
349                      int oddeven = i % 3;
350                      role = rolesArray[i];
351                      if (oddeven == 0)
352                      {
353                         rowCtx = ctx.next("row");
354                      }
355
356                      DelegateContext colCtx = rowCtx.next("col");
357                      if (userRoles.contains(role))
358                      {
359                         colCtx.put("ischecked", "checked");
360                      }
361
362                      colCtx.put("name", role.getName());
363                      colCtx.put("displayname", role.getDisplayName());
364                   }
365                }
366                catch (IllegalArgumentException JavaDoc e)
367                {
368                   // TODO Auto-generated catch block
369
e.printStackTrace();
370                }
371                catch (ModuleException e)
372                {
373                   // TODO Auto-generated catch block
374
e.printStackTrace();
375                }
376
377                req.setAttribute(PortalJsp.CTX_REQUEST, ctx);
378                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/editUserRoles.jsp");
379                rd.include(req, resp);
380             }
381          }
382          else
383          {
384             log.error("This operation does not exist when user is logged in:" + op);
385          }
386       }
387       else
388       {
389          // User is not logged in
390
if (req.getWindowState() != WindowState.MAXIMIZED)
391          {
392             op = OP_SHOWLOGIN;
393          }
394          else
395          {
396             op = req.getParameters().get(getOperationName(), OP_SHOWLOGIN);
397          }
398
399          if (OP_SHOWREGISTER.equals(op))
400          {
401             PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/register.jsp");
402             rd.include(req, resp);
403          }
404          else if (OP_SHOWLOGIN.equals(op))
405          {
406             PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/login.jsp");
407             if ("1".equals(getPortletConfig().getInitParameter("useSSL")))
408             {
409                req.setAttribute("secureURL", req.getURL(Boolean.TRUE, Boolean.TRUE));
410             }
411             req.setAttribute("URL", req.getURL(Boolean.TRUE, null));
412             rd.include(req, resp);
413          }
414          else
415          {
416             log.error("This operation does not exist when user is not logged in:" + op);
417          }
418       }
419
420       writer.close();
421    }
422
423    /**
424     * Performs a log out.
425     */

426    public void userLogout(JBossActionRequest req, JBossActionResponse resp) throws IOException JavaDoc
427    {
428       req.signOut();
429       String JavaDoc contextPath = (String JavaDoc)req.getAttribute(CoreConstants.REQ_ATT_CONTEXT_PATH);
430       String JavaDoc home = contextPath;
431       resp.sendRedirect("/" + home);
432    }
433
434    /**
435     * Action when a user register
436     *
437     * @param req JBoss action request
438     * @param resp JBoss action response
439     */

440    public void userRegister(JBossActionRequest req, JBossActionResponse resp)
441    {
442       // TODO: Check that a bot is not creating many accounts
443
String JavaDoc uname = req.getParameter("uname");
444       int nbErrors = 0;
445       if ((uname == null) || (uname.length() == 0))
446       {
447          nbErrors++;
448          resp.setRenderParameter("uname_error", "REGISTER_ERROR_INVALIDUSERNAME");
449       }
450       else
451       {
452          try
453          {
454             User user = userModule.findUserByUserName(uname);
455             if (user != null)
456             {
457                nbErrors++;
458                resp.setRenderParameter("uname_error", "REGISTER_ERROR_EXISTINGUSERNAME");
459             }
460          }
461          catch (IllegalArgumentException JavaDoc e)
462          {
463             log.error("", e);
464          }
465          catch (ModuleException e)
466          {
467             // Ok the user does not exist yet
468
}
469       }
470
471       String JavaDoc pass1 = req.getParameter("pass1");
472       if ((pass1 == null) || (pass1.length() == 0))
473       {
474          nbErrors++;
475          resp.setRenderParameter("pass1_error", "REGISTER_ERROR_INVALIDPASSWORD1");
476       }
477
478       String JavaDoc pass2 = req.getParameter("pass2");
479       if ((pass2 == null) || (pass2.length() == 0))
480       {
481          nbErrors++;
482          resp.setRenderParameter("pass2_error", "REGISTER_ERROR_INVALIDPASSWORD2");
483       }
484       else if (!pass1.equals(pass2))
485       {
486          nbErrors++;
487          resp.setRenderParameter("pass2_error", "REGISTER_ERROR_PASSWORDMISMATCH");
488       }
489
490       String JavaDoc realEmail = req.getParameter("realemail");
491       if (!Tools.isEmailValid(realEmail))
492       {
493          nbErrors++;
494          resp.setRenderParameter("realemail_error", "REGISTER_ERROR_INVALIDREALEMAIL");
495       }
496
497       String JavaDoc fakeEmail = req.getParameter("fakeemail");
498       String JavaDoc question = req.getParameter("question");
499       String JavaDoc answer = req.getParameter("answer");
500       User user = null;
501       if (nbErrors == 0)
502       {
503          try
504          {
505             user = userModule.createUser(uname, Tools.md5AsHexString(pass1), realEmail);
506             user.setFakeEmail(fakeEmail);
507
508             //user.setRegistrationDate(new Date());
509
String JavaDoc subscriptionMode = getPortletConfig().getInitParameter(UserPortletConstants.SUBSCRIPTIONMODE);
510             if (subscriptionMode == null)
511             {
512                subscriptionMode = UserPortletConstants.SUBSCRIPTIONMODE_AUTOMATIC;
513             }
514
515             if (UserPortletConstants.SUBSCRIPTIONMODE_AUTOMATIC.equals(subscriptionMode))
516             {
517                user.setEnabled(true);
518             }
519
520             else if (UserPortletConstants.SUBSCRIPTIONMODE_EMAILVERIFICATION.equals(subscriptionMode))
521             {
522                user.setEnabled(false);
523                String JavaDoc emailText = generateValidationEmail(req, resp, user, pass1);
524                String JavaDoc from = getPortletConfig().getInitParameter(UserPortletConstants.EMAILFROM);
525                Locale locale = req.getLocale();
526                ResourceBundle bundle = getResourceBundle(locale);
527                String JavaDoc subject = bundle.getString("REGISTER_CONFIRMATIONEMAIL");
528                mailModule.send(from, user.getRealEmail(), subject, emailText);
529             }
530
531             /*
532              * Have to define the link to /login Have to redirect after the
533              * login try { resp.sendRedirect("/portal/login?username=" + uname +
534              * "&password=" + pass1); } catch (IOException e1) { // TODO
535              * Auto-generated catch block e1.printStackTrace(); }
536              */

537
538             // Add the user to the default user role
539
String JavaDoc defaultRole = getPortletConfig().getInitParameter(UserPortletConstants.DEFAULT_ROLE);
540             if (defaultRole != null)
541             {
542                Set roleSet = new HashSet();
543                Role role = roleModule.findRoleByName(defaultRole);
544                if (role != null)
545                {
546                   roleSet.add(role);
547                   user.setRoles(roleSet);
548                }
549                else
550                {
551                   log.error("The role you specified as default role does not exist, check your portlet configuration");
552                }
553             }
554             else
555             {
556                log.info("You didn't specify a default role in the portlet init configuration, please refer to the documentation");
557             }
558          }
559          catch (IllegalArgumentException JavaDoc e)
560          {
561             log.error("Cannot create user " + uname, e);
562          }
563          catch (ModuleException e)
564          {
565             log.error("Cannot create user " + uname, e);
566          }
567       }
568       else
569       {
570          portletHelper.setRenderParameter(resp, "USERNAME", uname);
571          portletHelper.setRenderParameter(resp, "REALEMAIL", realEmail);
572          portletHelper.setRenderParameter(resp, "FAKEEMAIL", fakeEmail);
573          portletHelper.setRenderParameter(resp, "QUESTION", question);
574          portletHelper.setRenderParameter(resp, "ANSWER", answer);
575          portletHelper.setRenderParameter(resp, getOperationName(), OP_SHOWREGISTER);
576       }
577    }
578
579    private void fillContextWithuserProfile(User user, DelegateContext ctx)
580    {
581       ctx.put("GIVENNAME", user.getGivenName());
582       ctx.put("FAMILYNAME", user.getFamilyName());
583       ctx.put("REALEMAIL", user.getRealEmail());
584       ctx.put("FAKEEMAIL", user.getFakeEmail());
585       ctx.put("VIEWREALEMAIL", user.getViewRealEmail() ? "checked=\"checked\"": "");
586       ctx.put("HOMEPAGE", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_HOMEPAGE)));
587       ctx.put("SELECTEDTIMEZONE", (String JavaDoc)user.getProperties().get(CoreConstants.INFO_USER_TIME_ZONE_OFFSET));
588       ctx.put("ICQ", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_IM_ICQ)));
589       ctx.put("AIM", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_IM_AIM)));
590       ctx.put("YIM", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_IM_YIM)));
591       ctx.put("MSNM", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_IM_MSNM)));
592       ctx.put("SKYPE", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_IM_SKYPE)));
593       ctx.put("SIGNATURE", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_SIGNATURE)));
594       ctx.put("LOCATION", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_LOCATION)));
595       ctx.put("OCCUPATION", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_OCCUPATION)));
596       ctx.put("INTERESTS", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_INTERESTS)));
597       ctx.put("EXTRA", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_EXTRA)));
598       ctx.put("QUESTION", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_SECURITY_QUESTION)));
599       ctx.put("ANSWER", (String JavaDoc)(user.getProperties().get(CoreConstants.INFO_USER_SECURITY_ANSWER)));
600    }
601
602    /**
603     * DOCUMENT_ME
604     *
605     * @param req DOCUMENT_ME
606     * @param resp DOCUMENT_ME
607     */

608    public void storeProfile(JBossActionRequest req, JBossActionResponse resp) throws PortletException
609    {
610       User currentUser = req.getUser();
611       if (currentUser == null)
612       {
613          throw new PortletException("No user");
614       }
615
616       // Get the user
617
User user = null;
618       try
619       {
620          Integer JavaDoc userid = req.getParameters().getIntObject("userid");
621          user = userModule.findUserByID(userid);
622       }
623       catch (Exception JavaDoc e)
624       {
625          throw new PortletException("blah", e);
626       }
627
628       // Are we editing ourself ?
629
boolean self = currentUser.getID().equals(user.getID());
630       if (!self && !req.hasPermission("Admin"))
631       {
632          throw new PortletException();
633       }
634
635
636       int nbErrors = 0;
637       boolean changePassword = false;
638       String JavaDoc givenName = req.getParameter("givenname");
639       String JavaDoc familyName = req.getParameter("familyname");
640       String JavaDoc pass1 = req.getParameter("pass1");
641       String JavaDoc pass2 = req.getParameter("pass2");
642       if (!(((pass2 == null) || (pass2.length() == 0)) && ((pass1 == null) || (pass1.length() == 0))))
643       {
644          changePassword = true;
645          if ((pass1 == null) || (pass1.length() == 0))
646          {
647             nbErrors++;
648             resp.setRenderParameter("pass1_error", "REGISTER_ERROR_INVALIDPASSWORD1");
649          }
650
651          if ((pass2 == null) || (pass2.length() == 0))
652          {
653             nbErrors++;
654             resp.setRenderParameter("pass2_error", "REGISTER_ERROR_INVALIDPASSWORD2");
655          }
656          else if (!pass1.equals(pass2))
657          {
658             nbErrors++;
659             resp.setRenderParameter("pass2_error", "REGISTER_ERROR_PASSWORDMISMATCH");
660          }
661       }
662
663       String JavaDoc realEmail = req.getParameter("realemail");
664       if (!Tools.isEmailValid(realEmail))
665       {
666          nbErrors++;
667          resp.setRenderParameter("realemail_error", "REGISTER_ERROR_INVALIDREALEMAIL");
668       }
669
670       String JavaDoc fakeEmail = req.getParameter("fakeemail");
671       boolean viewRealEmail = req.getParameters().getBoolean("viewrealemail", false);
672       String JavaDoc homepage = req.getParameter("homepage");
673       short UNDEFINEDTIMEZONE = (short)0;
674       Short JavaDoc timezoneoffset = req.getParameters().getShortObject("timezoneoffset", UNDEFINEDTIMEZONE);
675       String JavaDoc question = req.getParameter("question");
676       String JavaDoc answer = req.getParameter("answer");
677       String JavaDoc icq = req.getParameter("icq");
678       String JavaDoc msnm = req.getParameter("msnm");
679       String JavaDoc yim = req.getParameter("yim");
680       String JavaDoc aim = req.getParameter("aim");
681       String JavaDoc skype = req.getParameter("skype");
682       String JavaDoc location = req.getParameter("location");
683       String JavaDoc occupation = req.getParameter("occupation");
684       String JavaDoc interests = req.getParameter("interests");
685       String JavaDoc signature = req.getParameter("signature");
686       String JavaDoc extra = req.getParameter("extra");
687
688       if (nbErrors == 0)
689       {
690          if (givenName.trim().length() != 0)
691          {
692             user.setGivenName(givenName);
693          }
694
695          if (familyName.trim().length() != 0)
696          {
697             user.setFamilyName(familyName);
698          }
699
700          if (realEmail.trim().length() != 0)
701          {
702             user.setRealEmail(realEmail);
703          }
704
705          if (fakeEmail.trim().length() != 0)
706          {
707             user.setFakeEmail(fakeEmail);
708          }
709
710          user.setViewRealEmail(viewRealEmail);
711          if (changePassword)
712          {
713             user.setPassword(Tools.md5AsHexString(pass1));
714          }
715
716          putNonEmptyProperty(user, CoreConstants.INFO_USER_HOMEPAGE, homepage);
717          if (timezoneoffset.shortValue() != UNDEFINEDTIMEZONE)
718          {
719             user.getProperties().put(CoreConstants.INFO_USER_TIME_ZONE_OFFSET, timezoneoffset.toString());
720          }
721
722          putNonEmptyProperty(user, CoreConstants.INFO_USER_SECURITY_QUESTION, question);
723          putNonEmptyProperty(user, CoreConstants.INFO_USER_SECURITY_ANSWER, answer);
724          putNonEmptyProperty(user, CoreConstants.INFO_USER_IM_ICQ, icq);
725          putNonEmptyProperty(user, CoreConstants.INFO_USER_IM_MSNM, msnm);
726          putNonEmptyProperty(user, CoreConstants.INFO_USER_IM_YIM, yim);
727          putNonEmptyProperty(user, CoreConstants.INFO_USER_IM_AIM, aim);
728          putNonEmptyProperty(user, CoreConstants.INFO_USER_IM_SKYPE, skype);
729          putNonEmptyProperty(user, CoreConstants.INFO_USER_SIGNATURE, signature);
730          putNonEmptyProperty(user, CoreConstants.INFO_USER_LOCATION, location);
731          putNonEmptyProperty(user, CoreConstants.INFO_USER_OCCUPATION, occupation);
732          putNonEmptyProperty(user, CoreConstants.INFO_USER_INTERESTS, interests);
733          putNonEmptyProperty(user, CoreConstants.INFO_USER_EXTRA, extra);
734       }
735       else
736       {
737          portletHelper.setRenderParameter(resp, "GIVENNAME", givenName);
738          portletHelper.setRenderParameter(resp, "FAMILYNAME", familyName);
739          portletHelper.setRenderParameter(resp, "REALEMAIL", realEmail);
740          portletHelper.setRenderParameter(resp, "FAKEEMAIL", fakeEmail);
741          if (user.getViewRealEmail())
742          {
743             portletHelper.setRenderParameter(resp, "VIEWREALEMAIL", "checked=\"checked\"");
744          }
745          else
746          {
747             portletHelper.setRenderParameter(resp, "VIEWREALEMAIL", "");
748          }
749
750          portletHelper.setRenderParameter(resp, "HOMEPAGE", homepage);
751          portletHelper.setRenderParameter(resp, "SELECTEDTIMEZONE", "" + timezoneoffset);
752          portletHelper.setRenderParameter(resp, "ICQ", icq);
753          portletHelper.setRenderParameter(resp, "AIM", aim);
754          portletHelper.setRenderParameter(resp, "YIM", yim);
755          portletHelper.setRenderParameter(resp, "MSNM", msnm);
756          portletHelper.setRenderParameter(resp, "SKYPE", skype);
757          portletHelper.setRenderParameter(resp, "SIGNATURE", signature);
758          portletHelper.setRenderParameter(resp, "LOCATION", location);
759          portletHelper.setRenderParameter(resp, "OCCUPATION", occupation);
760          portletHelper.setRenderParameter(resp, "INTERESTS", interests);
761          portletHelper.setRenderParameter(resp, "EXTRA", extra);
762          portletHelper.setRenderParameter(resp, getOperationName(), OP_SHOWPROFILE);
763       }
764    }
765
766    /**
767     * DOCUMENT_ME
768     *
769     * @param request DOCUMENT_ME
770     * @param response DOCUMENT_ME
771     */

772    public void addRolesToUser(JBossActionRequest request, JBossActionResponse response)
773    {
774       if (request.hasPermission("Admin"))
775       {
776          String JavaDoc[] selectedRoles = request.getParameterValues("roles");
777          Integer JavaDoc userId = request.getParameters().getIntObject("userid");
778          try
779          {
780             User user = userModule.findUserByID(userId);
781             Set roles = roleModule.findRolesByNames(selectedRoles);
782             user.setRoles(roles);
783          }
784          catch (IllegalArgumentException JavaDoc e)
785          {
786             // TODO Auto-generated catch block
787
e.printStackTrace();
788          }
789          catch (ModuleException e)
790          {
791             // TODO Auto-generated catch block
792
e.printStackTrace();
793          }
794       }
795    }
796
797    /*
798     * TODO: The email verification needs an email service. This is not done yet.
799     * It also needs a way to generate portlet URL or some kind of URL. Once all
800     * of this made, it will be quick to implement.
801     */

802    /*
803     * * Generates the body of the email sent for user activation.
804     *
805     * @param user user @param password unencrypted password @return email body
806     *
807     */

808    private String JavaDoc generateValidationEmail(JBossActionRequest req,
809                                           JBossActionResponse resp,
810                                           User user,
811                                           String JavaDoc clearPassword)
812    {
813       // gen link using username, encrypted pw, and a salt.
814
String JavaDoc hash = Tools.md5AsHexString(user.getUserName() + user.getPassword() + UserPortletConstants.SALT);
815
816       String JavaDoc rootURL = getPortletConfig().getInitParameter("emailDomain");
817
818       PortletURL link = resp.createActionURL();
819       link.setParameter("op", "activate");
820       link.setParameter(UserPortletConstants.USERID, "" + user.getID());
821       link.setParameter(UserPortletConstants.HASH, hash);
822
823       String JavaDoc absURL = resp.createAbsoluteURL(link);
824
825       // TODO: refactor to have a simple text file outside the code that can be
826
// easily changed
827
StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
828       Locale locale = req.getLocale();
829       ResourceBundle bundle = getResourceBundle(locale);
830       try
831       {
832          sb.append(bundle.getString("VALIDATIONEMAIL_1") + " - ");
833          sb.append(rootURL);
834          sb.append("\n\n");
835          sb.append(bundle.getString("VALIDATIONEMAIL_2") + ":\n\n");
836          sb.append("----------------------------\n");
837          sb.append(bundle.getString("USERNAME") + ": " + user.getUserName() + "\n");
838          sb.append(bundle.getString("PASSWORD") + ": " + clearPassword + "\n");
839          sb.append("----------------------------\n\n");
840          sb.append(bundle.getString("VALIDATIONEMAIL_3") + ": \n");
841          sb.append(absURL);
842          sb.append("\n\n");
843          sb.append(bundle.getString("VALIDATIONEMAIL_4"));
844          sb.append("\n\n");
845          sb.append(bundle.getString("VALIDATIONEMAIL_5") + "\n");
846       }
847       catch (Exception JavaDoc e)
848       {
849          log.error("Cannot generate an email notification", e);
850       }
851
852       return sb.toString();
853    }
854
855    /**
856     * DOCUMENT_ME
857     *
858     * @param req DOCUMENT_ME
859     * @param resp DOCUMENT_ME
860     */

861    public void activate(JBossActionRequest req,
862                         JBossActionResponse resp)
863    {
864       String JavaDoc hash = req.getParameter(UserPortletConstants.HASH);
865       Integer JavaDoc userId = req.getParameters().getIntObject(UserPortletConstants.USERID, -1);
866
867       User user = null;
868       try
869       {
870          user = userModule.findUserByID(userId);
871          String JavaDoc hexCompare = Tools.md5AsHexString(user.getUserName() + user.getPassword() + UserPortletConstants.SALT);
872          if (hash.equals(hexCompare))
873          {
874             user.setEnabled(true);
875             portletHelper.setI18nRenderParameter(req, resp, UserPortletConstants.INFOMESSAGE, "INFOMESSAGE_CONGRATULATIONACTIVATED");
876          }
877          else
878          {
879             portletHelper.setI18nRenderParameter(req, resp, UserPortletConstants.ERRORMESSAGE, "ERRORMESSAGE_UNABLEACTIVATE");
880          }
881       }
882       catch (Exception JavaDoc e)
883       {
884          portletHelper.setI18nRenderParameter(req, resp, UserPortletConstants.ERRORMESSAGE, "ERRORMESSAGE_UNABLEACTIVATE");
885       }
886    }
887
888    private String JavaDoc getFullName(ResourceBundle bundle,
889                               User user)
890    {
891       if ((user.getGivenName() != null) && (user.getGivenName().trim().length() != 0))
892       {
893          if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
894          {
895             return user.getGivenName() + " " + user.getFamilyName();
896          }
897          else
898          {
899             return user.getGivenName().trim();
900          }
901       }
902       else
903       {
904          if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
905          {
906             return user.getFamilyName().trim();
907          }
908          else
909          {
910             return bundle.getString("NAMENOTAVAILABLE");
911          }
912       }
913    }
914
915    private void putNonEmptyProperty(User user, String JavaDoc key, String JavaDoc value)
916    {
917       if ((value != null) && (value.trim().length() != 0))
918       {
919          user.getProperties().put(key, value);
920       }
921    }
922
923    /*
924     * private String getTimezoneOffsetString(short timezoneOffset) {
925     * StringBuffer timeZone = new StringBuffer(); for (int i = 0; i <
926     * UserPortletConstants.TIME_ZONE_OFFSETS.length; i++) { if
927     * (UserPortletConstants.TIME_ZONE_OFFSETS[i] != null) { timeZone.append("
928     * <option value=\"").append(i); if (timezoneOffset == i) {
929     * timeZone.append("\" selected>"); } else { timeZone.append("\">"); }
930     * timeZone.append(UserPortletConstants.TIME_ZONE_OFFSETS[i]).append("
931     * </option>"); } } return timeZone.toString(); }
932     *
933     * private String getTimezoneOffsetString() { return
934     * getTimezoneOffsetString((short)0); }
935     *
936     * private String getTimezoneOffsetString(String timezoneOffset) { short
937     * offset = Short.parseShort(timezoneOffset); return
938     * getTimezoneOffsetString(offset); }
939     */

940 }
Popular Tags