Author: snoopdave
Date: Tue Apr  3 16:52:13 2007
New Revision: 525334

URL: http://svn.apache.org/viewvc?view=rev&rev=525334
Log:
More merging account activation code from trunk

Modified:
    incubator/roller/branches/roller_4.0_newbackend/merges.txt
    
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/3xx-to-400-migration.vm
    
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/createdb.vm
    
incubator/roller/branches/roller_4.0_newbackend/metadata/xdoclet/global-forwards.xml
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/UserManager.java
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/datamapper/DatamapperUserManagerImpl.java
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/hibernate/HibernateUserManagerImpl.java
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/jpa/JPAUserManagerImpl.java
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.java
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.orm.xml
    
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/ui/core/struts/actions/UserNewAction.java
    
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/ApplicationResources.properties
    
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
    
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/jsps/core/welcome.jsp

Modified: incubator/roller/branches/roller_4.0_newbackend/merges.txt
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/merges.txt?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- incubator/roller/branches/roller_4.0_newbackend/merges.txt (original)
+++ incubator/roller/branches/roller_4.0_newbackend/merges.txt Tue Apr  3 
16:52:13 2007
@@ -4,6 +4,7 @@
 Temporary file to track merges from trunk into the roller_4.0_newbackend 
branch. 
 
 April 3, 2007: merging latest from trunk
+svn merge -r 525008:525301 
https://svn.apache.org/repos/asf/incubator/roller/trunk
 svn merge -r 520487:525007 
https://svn.apache.org/repos/asf/incubator/roller/trunk
 
 March 20, 2007: merging latest from trunk (including template editor changes)

Modified: 
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/3xx-to-400-migration.vm
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/3xx-to-400-migration.vm?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/3xx-to-400-migration.vm
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/3xx-to-400-migration.vm
 Tue Apr  3 16:52:13 2007
@@ -4,6 +4,8 @@
 DON'T RUN THIS, IT'S NOT A DATABASE CREATION SCRIPT!!!
 **#
 
+#addColumnNull("rolleruser" "activationcode" "varchar(48)")
+
 #addColumnNull("webpage" "outputtype" "varchar(48)")
 
 -- add new action column to webpage table, default value is custom

Modified: 
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/createdb.vm
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/createdb.vm?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/createdb.vm
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/metadata/database/tmpls/createdb.vm
 Tue Apr  3 16:52:13 2007
@@ -21,6 +21,7 @@
     passphrase      varchar(255) not null,
     fullname        varchar(255) not null,
     emailaddress    varchar(255) not null,
+    activationcode     varchar(48),
     datecreated     $db.TIMESTAMP_SQL_TYPE not null,
     locale          varchar(20),  
     timezone        varchar(50),    

Modified: 
incubator/roller/branches/roller_4.0_newbackend/metadata/xdoclet/global-forwards.xml
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/metadata/xdoclet/global-forwards.xml?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/metadata/xdoclet/global-forwards.xml
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/metadata/xdoclet/global-forwards.xml
 Tue Apr  3 16:52:13 2007
@@ -19,6 +19,7 @@
 <forward name="yourProfile"            
path="/roller-ui/yourProfile.do?method=edit" />
 <forward name="createWebsite"          
path="/roller-ui/createWebsite.do?method=create" />
 <forward name="yourWebsites"           
path="/roller-ui/yourWebsites.do?method=edit" />
+<forward name="activateUser"           
path="/rollerui/user.do?method=activateUser"/>
 
 <!--  LIMITED/AUTHOR weblog UI actions -->
 

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/UserManager.java
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/UserManager.java?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/UserManager.java
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/UserManager.java
 Tue Apr  3 16:52:13 2007
@@ -394,4 +394,13 @@
      */
     public void release();
     
+    
+    /**
+     * get a user by activation code
+     * @param activationCode
+     * @return
+     * @throws RollerException
+     */
+    public UserData getUserByActivationCode(String activationCode) throws 
RollerException;
+
 }

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/datamapper/DatamapperUserManagerImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/datamapper/DatamapperUserManagerImpl.java?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/datamapper/DatamapperUserManagerImpl.java
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/datamapper/DatamapperUserManagerImpl.java
 Tue Apr  3 16:52:13 2007
@@ -296,6 +296,11 @@
         newUser.grantRole("editor");
         if(adminUser) {
             newUser.grantRole("admin");
+            
+            //if user was disabled (because of activation user 
+            // account with e-mail property), enable it for admin user
+            newUser.setEnabled(Boolean.TRUE);
+            newUser.setActivationCode(null);
         }
 
         this.strategy.store(newUser);
@@ -1128,5 +1133,19 @@
 
         return ret;
     }
+    
+       public UserData getUserByActivationCode(String activationCode) throws 
RollerException {
+               if (activationCode == null)
+                       throw new RollerException("activationcode is null");
+        try {
+            DatamapperQuery q = 
strategy.newQuery(UserData.class,"UserData.getUserByActivationCode");
+            q.setRange(0, 1);
+            List list = (List)q.execute(new Object[] {activationCode}); 
+            return list.size()!=0? (UserData)list.get(0) : null;
+        
+        } catch (Exception e) {
+            return null;
+        }              
+       } 
     
 }

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/hibernate/HibernateUserManagerImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/hibernate/HibernateUserManagerImpl.java?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/hibernate/HibernateUserManagerImpl.java
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/hibernate/HibernateUserManagerImpl.java
 Tue Apr  3 16:52:13 2007
@@ -264,6 +264,11 @@
         newUser.grantRole("editor");
         if(adminUser) {
             newUser.grantRole("admin");
+            
+            //if user was disabled (because of activation user account with 
e-mail property), 
+            //enable it for admin user
+            newUser.setEnabled(Boolean.TRUE);
+            newUser.setActivationCode(null);
         }
         
         this.strategy.store(newUser);
@@ -1024,6 +1029,27 @@
             super(property, value, "=", true);
         }
     }
+
+
+       public UserData getUserByActivationCode(String activationCode) throws 
RollerException {
+
+               if (activationCode == null)
+                       throw new RollerException("activationcode is null");
+
+               try {
+                       Session session = ((HibernatePersistenceStrategy) 
this.strategy)
+                                       .getSession();
+                       Criteria criteria = 
session.createCriteria(UserData.class);
+
+                       criteria.add(Expression.eq("activationCode", 
activationCode));
+
+                       UserData user = (UserData) criteria.uniqueResult();
+
+                       return user;
+               } catch (HibernateException e) {
+                       throw new RollerException(e);
+               }               
+       }
 }
 
 

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/jpa/JPAUserManagerImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/jpa/JPAUserManagerImpl.java?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/jpa/JPAUserManagerImpl.java
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/business/jpa/JPAUserManagerImpl.java
 Tue Apr  3 16:52:13 2007
@@ -309,6 +309,11 @@
         if(existingUsers.size() == 0) {
             // Make first user an admin
             adminUser = true;
+            
+            //if user was disabled (because of activation user 
+            // account with e-mail property), enable it for admin user
+            newUser.setEnabled(Boolean.TRUE);
+            newUser.setActivationCode(null);
         }
         
         if(getUserByUserName(newUser.getUserName()) != null ||
@@ -1128,8 +1133,7 @@
      */
     public long getUserCount() throws RollerException {
         long ret = 0;
-        Query q = strategy.getNamedQuery(
-                "UserData.getCountEnabledDistinct");
+        Query q = strategy.getNamedQuery("UserData.getCountEnabledDistinct");
         q.setParameter(1, Boolean.TRUE);
         List results = q.getResultList();
         ret =((Long)results.get(0)).longValue(); 
@@ -1137,4 +1141,16 @@
         return ret;
     }
     
+       public UserData getUserByActivationCode(String activationCode) throws 
RollerException {
+               if (activationCode == null)
+                       throw new RollerException("activationcode is null");
+        Query q = strategy.getNamedQuery("UserData.getUserByActivationCode");
+        q.setParameter(1, activationCode);
+        try {
+            return (UserData)q.getSingleResult();
+        } catch (NoResultException e) {
+            return null;
+        }              
+       }    
 }
+

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.java
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.java?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.java
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.java
 Tue Apr  3 16:52:13 2007
@@ -65,10 +65,12 @@
     private String  locale;
     private String  timeZone;
     private Boolean enabled = Boolean.TRUE;
+    private String  activationCode; 
     
     private Set roles = new HashSet();
     private List permissions = new ArrayList();
     
+    
     public UserData() {
     }
     
@@ -276,6 +278,7 @@
         this.locale = other.getLocale();
         this.timeZone = other.getTimeZone();
         this.dateCreated = other.getDateCreated()!=null ? 
(Date)other.getDateCreated().clone() : null;
+        this.activationCode = other.getActivationCode();
     }
     
     
@@ -342,6 +345,22 @@
             role.setUser(this);
         }
     }
+    
+    /** activation code 
+     * @ejb:persistent-field
+     * @hibernate.property column="activationcode" non-null="false"
+     * @roller.wrapPojoMethod type="simple"
+     */
+       public String getActivationCode() { 
+               return activationCode;
+       }
+       
+       /** @ejb:persistent-field */
+       public void setActivationCode(String activationCode) {
+               this.activationCode = activationCode;
+       }
+
+
     
     //------------------------------------------------------- Good citizenship
 

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.orm.xml
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.orm.xml?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.orm.xml
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/pojos/UserData.orm.xml
 Tue Apr  3 16:52:13 2007
@@ -17,6 +17,9 @@
         <named-query name="UserData.getByEnabled">
             <query>SELECT u FROM UserData u WHERE u.enabled = ?1</query>
         </named-query>
+        <named-query name="UserData.getUserByActivationCode">
+            <query>SELECT u FROM UserData u WHERE u.activationCode = ?1</query>
+        </named-query>
         <named-query 
name="UserData.getByEnabled&amp;EndDateOrderByStartDateDesc">
             <query>SELECT u FROM UserData u WHERE u.enabled = ?1 AND 
u.dateCreated &lt; ?2 ORDER BY u.dateCreated DESC</query>
         </named-query>
@@ -77,6 +80,9 @@
             </basic>
             <basic name="userName">
                 <column name="username" insertable="true" updatable="true" 
unique="true"/>
+            </basic>
+            <basic name="activationCode">
+                <column name="activationcode" insertable="true" 
updatable="true" unique="true"/>
             </basic>
             <basic name="password">
                 <column name="passphrase" insertable="true" updatable="true" 
unique="false"/>

Modified: 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/ui/core/struts/actions/UserNewAction.java
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/ui/core/struts/actions/UserNewAction.java?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/ui/core/struts/actions/UserNewAction.java
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/src/org/apache/roller/ui/core/struts/actions/UserNewAction.java
 Tue Apr  3 16:52:13 2007
@@ -19,10 +19,17 @@
 package org.apache.roller.ui.core.struts.actions;
 
 import java.io.IOException;
-import java.util.HashMap;
+import java.net.MalformedURLException;
+import java.text.MessageFormat;
 import java.util.Locale;
+import java.util.ResourceBundle;
 import java.util.TimeZone;
+import java.util.UUID;
 
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -37,6 +44,7 @@
 import org.apache.struts.action.ActionMapping;
 import org.apache.struts.action.ActionMessage;
 import org.apache.struts.action.ActionMessages;
+import org.apache.struts.util.RequestUtils;
 import org.apache.roller.RollerException;
 import org.apache.roller.config.RollerConfig;
 import org.apache.roller.config.RollerRuntimeConfig;
@@ -47,6 +55,7 @@
 import org.apache.roller.ui.core.RollerRequest;
 import org.apache.roller.ui.core.security.CustomUserRegistry;
 import org.apache.roller.ui.authoring.struts.formbeans.UserFormEx;
+import org.apache.roller.util.MailUtil;
 import org.apache.commons.lang.StringUtils;
 
 
@@ -107,12 +116,12 @@
             // Let's see if there's any user-authentication available from 
Acegi
             // and retrieve custom user data to pre-populate form.
             boolean usingSSO = 
RollerConfig.getBooleanProperty("users.sso.enabled");
-            if(usingSSO) {            
-              UserData fromSSO = 
CustomUserRegistry.getUserDetailsFromAuthentication();
-              if(fromSSO != null) {
-                userForm.copyFrom(fromSSO, request.getLocale());
-                userForm.setDataFromSSO(true);
-              }
+            if(usingSSO) {
+                UserData fromSSO = 
CustomUserRegistry.getUserDetailsFromAuthentication();
+                if(fromSSO != null) {
+                    userForm.copyFrom(fromSSO, request.getLocale());
+                    userForm.setDataFromSSO(true);
+                }
             }
             
             userForm.setPasswordText(null);
@@ -161,35 +170,81 @@
             ud.setEnabled(Boolean.TRUE);
             
             // If user set both password and passwordConfirm then reset 
password
-            if (    !StringUtils.isEmpty(form.getPasswordText())
-            && !StringUtils.isEmpty(form.getPasswordConfirm())) {
+            if (   !StringUtils.isEmpty(form.getPasswordText())
+                && !StringUtils.isEmpty(form.getPasswordConfirm())) {
                 ud.resetPassword(RollerFactory.getRoller(),
                         form.getPasswordText(), form.getPasswordConfirm());
             }
             
-            // save new user
-            mgr.addUser(ud);
-            RollerFactory.getRoller().flush();
-            
-            if (form.getAdminCreated()) {
-                // User created for admin, so return to new user page with 
empty form
-                msgs.add(ActionMessages.GLOBAL_MESSAGE,
-                        new ActionMessage("newUser.created"));
-                saveMessages(request, msgs);
-                form.reset(mapping, request);
-                return createUser(mapping, actionForm, request, response);
-            } else {
-                // User registered, so go to welcome page
-                request.setAttribute("contextURL",
-                        RollerRuntimeConfig.getAbsoluteContextURL());
+            boolean activationEnabled = RollerConfig.getBooleanProperty(
+                    "user.account.activation.enabled");
+            if (activationEnabled) {
+                // User account will be enabled after the activation process
+                ud.setEnabled(Boolean.FALSE);
+                
+                // Create & save the activation data
+                String activationCode = UUID.randomUUID().toString();
                 
-                // Invalidate session, otherwise new user who was originally 
authenticated 
-                // via LDAP/SSO will remain logged in with a but without a 
valid Roller role.
-                request.getSession().invalidate();
+                if (mgr.getUserByActivationCode(activationCode) != null) {
+                    // In the *extremely* unlikely event that we generate an
+                    // activation code that is already use, we'll retry 3 
times.
+                    int numOfRetries = 3;                    
+                    if (numOfRetries < 1) numOfRetries = 1;                    
+                    for (int i = 0; i < numOfRetries; i++) {
+                        activationCode = UUID.randomUUID().toString();
+                        if (mgr.getUserByActivationCode(activationCode) == 
null) {
+                            break;
+                        } else {
+                            activationCode = null;
+                        }
+                    }
+                    // In more unlikely event that three retries isn't enough  
                
+                    if (activationCode == null){
+                        throw new 
RollerException("error.add.user.activationCodeInUse");
+                    }
+                }                
+                ud.setActivationCode(activationCode);
+            }
+                        
+            if (activationEnabled && ud.getActivationCode() != null) {
+                // send activation mail to the user
+                sendActivationMail(request, ud, errors);
                 
-                return mapping.findForward("welcome.page");
+                // activationStatus = 1:activated, 0:has to be activated, 
-1:error
+                request.setAttribute("activationStatus", "0");
             }
-                       
+            
+            if (errors.size() > 0) {
+                // Error occured so save it and bail out
+                saveErrors(request, errors);
+                
+            } else {
+                // save new user
+                mgr.addUser(ud);
+                RollerFactory.getRoller().flush();
+
+                if (form.getAdminCreated()) {
+                    // User created for admin, so return to new user page with 
empty form
+                    msgs.add(ActionMessages.GLOBAL_MESSAGE,
+                            new ActionMessage("newUser.created"));
+                    saveMessages(request, msgs);
+                    form.reset(mapping, request);
+                    return createUser(mapping, actionForm, request, response);
+                    
+                } else {
+                    // User registered, so go to welcome page
+                    request.setAttribute("contextURL",
+                            RollerRuntimeConfig.getAbsoluteContextURL());
+
+                    // Invalidate session, otherwise new user who was 
originally 
+                    // authenticated via LDAP/SSO will remain logged in with 
+                    // a but without a valid Roller role.
+                    request.getSession().invalidate();
+
+                    return mapping.findForward("welcome.page");
+                }
+            }
+            
         } catch (RollerException e) {
             errors.add(ActionErrors.GLOBAL_ERROR, new 
ActionError(e.getMessage()));
             saveErrors(request,errors);
@@ -208,25 +263,25 @@
     
     /** Validate user form. TODO: replace with Struts validation. */
     protected ActionMessages validate( UserFormEx form, ActionMessages errors 
) {
-      
+        
         // if usingSSO, we don't want to error on empty password/username from 
HTML form.
         form.setDataFromSSO(false);
         boolean usingSSO = 
RollerConfig.getBooleanProperty("users.sso.enabled");
         if(usingSSO) {
-          boolean storePassword = 
RollerConfig.getBooleanProperty("users.sso.passwords.saveInRollerDb");
-          UserData fromSSO = 
CustomUserRegistry.getUserDetailsFromAuthentication();
-          if(fromSSO != null) {
-            String password = 
RollerConfig.getProperty("users.sso.passwords.defaultValue", "<unknown>");
-            if(storePassword) {
-              password = fromSSO.getPassword();
-            }
-            form.setPasswordText(password);
-            form.setPasswordConfirm(password);
-            form.setUserName(fromSSO.getUserName());
-            form.setDataFromSSO(true);
-          }
+            boolean storePassword = 
RollerConfig.getBooleanProperty("users.sso.passwords.saveInRollerDb");
+            UserData fromSSO = 
CustomUserRegistry.getUserDetailsFromAuthentication();
+            if(fromSSO != null) {
+                String password = 
RollerConfig.getProperty("users.sso.passwords.defaultValue", "<unknown>");
+                if(storePassword) {
+                    password = fromSSO.getPassword();
+                }
+                form.setPasswordText(password);
+                form.setPasswordConfirm(password);
+                form.setUserName(fromSSO.getUserName());
+                form.setDataFromSSO(true);
+            }
         }
-      
+        
         super.validate(form, errors);
         if (    StringUtils.isEmpty(form.getPasswordText())
         && StringUtils.isEmpty(form.getPasswordConfirm())) {
@@ -234,6 +289,153 @@
                     new ActionError("error.add.user.missingPassword"));
         }
         return errors;
+    }
+    
+    /**
+     * Send activation mail
+     */
+    private void sendActivationMail(
+            HttpServletRequest request, UserData user, ActionMessages errors) {
+        
+        try {
+            javax.naming.Context ctx = (javax.naming.Context)
+                new InitialContext().lookup("java:comp/env");
+            Session mailSession = (Session) ctx.lookup("mail/Session");
+            if (mailSession != null) {
+                ResourceBundle resources = ResourceBundle.getBundle(
+                        "ApplicationResources", 
getLocaleInstance(user.getLocale()));
+                
+                String from = RollerRuntimeConfig.getProperty(
+                        "user.account.activation.mail.from");
+                
+                String cc[] = new String[0];
+                String bcc[] = new String[0];
+                String to[] = new String[] { user.getEmailAddress() };
+                String subject = resources.getString(
+                        "user.account.activation.mail.subject");
+                String content;
+                
+                String rootURL = RollerRuntimeConfig.getAbsoluteContextURL();
+                
+                if (rootURL == null || rootURL.trim().length() == 0) {
+                    rootURL = RequestUtils.serverURL(request)
+                    + request.getContextPath();
+                }
+                
+                StringBuffer sb = new StringBuffer();
+                
+                // activationURL=
+                // 
rootURL/roller-ui/user.do?method=activateUser&activationCode=*****
+                String activationURL = rootURL
+                        + 
"/roller-ui/user.do?method=activateUser&activationCode="
+                        + user.getActivationCode();
+                sb.append(MessageFormat.format(
+                        
resources.getString("user.account.activation.mail.content"),
+                        new Object[] { user.getFullName(), user.getUserName(),
+                        activationURL }));
+                content = sb.toString();
+
+                MailUtil.sendHTMLMessage(mailSession, from, to, cc, bcc, 
subject, content);
+            }
+            
+        } catch (MessagingException me) {
+            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+                "error.add.user.mailSendException"));      
+            log.debug("ERROR sending email", me);
+        } catch (NamingException ne) {
+            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+                "error.add.user.mailSetupException"));
+            log.error("ERROR in mail setup?", ne);
+        } catch (MalformedURLException ue) {
+            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+                "error.add.user.mailSetupException"));
+            log.error("ERROR in absolute URL setting?", ue);
+        }
+    }
+    
+    /**
+     * Process GET of new user account activation page
+     * (allows to activate the user account )
+     */
+    public ActionForward activateUser(ActionMapping mapping,
+            ActionForm actionForm, HttpServletRequest request,
+            HttpServletResponse response) throws IOException, ServletException 
{
+        
+        ActionMessages errors = new ActionMessages();
+        
+        try {
+            UserManager mgr = RollerFactory.getRoller().getUserManager();
+            
+            if (request.getParameter("activationCode") == null) {
+                errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+                        "error.activate.user.missingActivationCode"));
+            } else {
+                String activationCode = 
request.getParameter("activationCode").toString();                
+                UserData user = mgr.getUserByActivationCode(activationCode);
+                
+                if (user != null) {
+                    // enable user account
+                    user.setEnabled(Boolean.TRUE);
+                    user.setActivationCode(null);
+                    mgr.saveUser(user);
+                    RollerFactory.getRoller().flush();
+                    
+                    /**
+                     * activationStatus = 1:activated, 0:has to be activated,
+                     * -1:error
+                     */
+                    request.setAttribute("activationStatus", "1");
+                    
+                } else {
+                    errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+                            "error.activate.user.invalidActivationCode"));
+                }
+            }
+            
+        } catch (RollerException e) {
+            errors.add(ActionErrors.GLOBAL_ERROR, new 
ActionError(e.getMessage()));
+            saveErrors(request, errors);
+            mLogger.error("ERROR in activateUser", e);
+        }
+        
+        if (!errors.isEmpty()) {
+            saveErrors(request, errors);
+            /**
+             * activationStatus = 1:activated, 0:has to be activated, -1:error
+             */
+            request.setAttribute("activationStatus", "-1");
+        }
+        
+        return mapping.findForward("welcome.page");
+    }
+    
+    /**
+     * Copied from WebsiteData.java by sedat
+     */
+    private Locale getLocaleInstance(String locale) {
+        if (locale != null) {
+            String[] localeStr = StringUtils.split(locale, "_");
+            if (localeStr.length == 1) {
+                if (localeStr[0] == null)
+                    localeStr[0] = "";
+                return new Locale(localeStr[0]);
+            } else if (localeStr.length == 2) {
+                if (localeStr[0] == null)
+                    localeStr[0] = "";
+                if (localeStr[1] == null)
+                    localeStr[1] = "";
+                return new Locale(localeStr[0], localeStr[1]);
+            } else if (localeStr.length == 3) {
+                if (localeStr[0] == null)
+                    localeStr[0] = "";
+                if (localeStr[1] == null)
+                    localeStr[1] = "";
+                if (localeStr[2] == null)
+                    localeStr[2] = "";
+                return new Locale(localeStr[0], localeStr[1], localeStr[2]);
+            }
+        }
+        return Locale.getDefault();
     }
     
 }

Modified: 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/ApplicationResources.properties
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/ApplicationResources.properties?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/ApplicationResources.properties
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/ApplicationResources.properties
 Tue Apr  3 16:52:13 2007
@@ -335,6 +335,8 @@
 configForm.debugMode=Enable debug mode?
 
 configForm.userSettings=User Settings
+configForm.accountActivation=Require new users to activate accounts via email
+configForm.accountActivationFromAddress=Email address for account activation 
messages
 configForm.allowNewUsers=Allow New Users?
 configForm.registrationUrl=External registration url
 configForm.editorPages=Editor Pages
@@ -1849,4 +1851,29 @@
 
 yourWebsites.userCount=Members:
 yourWebsites.todaysHits=Todays hits:
+
+# ---------------------------------------------------------------- Activating 
User Account with E-mail
+
+error.add.user.mailSendException=ERROR sending email, is your address valid?
+error.add.user.mailSetupException=ERROR in email configuration, contact Roller 
administrator
+error.add.user.activationCodeInUse=\
+An error occured while generating an activation code for your user account. \
+Please try again.
+error.activate.user.missingActivationCode=Activation code is missing.
+error.activate.user.invalidActivationCode=\
+Invalid activation code. You must have already activated your account. \
+If not, please contact your Roller administrator for assistance.
+
+user.account.activation.mail.subject=Roller: Activation Code for your user 
account
+user.account.activation.mail.content=\
+<html><body style=\"background: white; color: black; font-size: 12px\"> \
+<p>To activate your new Roller user account with username [{1}], please click 
the link below:</p> \
+<p><a href=\"{2}\">{2}</a></p></body></html>
+
+welcome.user.account.activated=Your user account is activated.
+welcome.user.account.not.activated=In order to login to the system, you have 
to \
+activate your user account by clicking the link that is sent to you via e-mail.
+
+
+
 

Modified: 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
 Tue Apr  3 16:52:13 2007
@@ -94,6 +94,14 @@
          <type>boolean</type>
          <default-value>true</default-value>
       </property-def>
+      <property-def  name="user.account.activation.enabled"  
key="configForm.accountActivation">
+         <type>boolean</type>
+         <default-value>true</default-value>
+      </property-def>
+      <property-def  name="user.account.activation.mail.from"  
key="configForm.accountActivationFromAddress">
+         <type>string</type>
+         <default-value></default-value>
+      </property-def>
       <property-def  name="users.registration.url"  
key="configForm.registrationUrl">
           <type>string</type>
           <default-value></default-value>

Modified: 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/jsps/core/welcome.jsp
URL: 
http://svn.apache.org/viewvc/incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/jsps/core/welcome.jsp?view=diff&rev=525334&r1=525333&r2=525334
==============================================================================
--- 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/jsps/core/welcome.jsp
 (original)
+++ 
incubator/roller/branches/roller_4.0_newbackend/web/WEB-INF/jsps/core/welcome.jsp
 Tue Apr  3 16:52:13 2007
@@ -19,13 +19,35 @@
 
 <h2><fmt:message key="welcome.title" /></h2>
 
-<p><fmt:message key="welcome.accountCreated" /></p>
+<% 
 
-<p><html:link forward="login-redirect"><fmt:message key="welcome.clickHere" 
/></html:link> 
-<fmt:message key="welcome.toLoginAndPost" /></p>
-<br />
-<br />
-<br />
+       String activationStatus = (String) 
request.getAttribute("activationStatus"); 
+       if (activationStatus != null){
+               if (activationStatus.equals("0")) {
+                       %>
+                       <p><fmt:message key="welcome.accountCreated" /></p>
+                       <p><fmt:message 
key="welcome.user.account.not.activated" /></p>
+                       <% 
+               } else if(activationStatus.equals("1")) {
+                       %>                      
+                       <p><fmt:message key="welcome.user.account.activated" 
/></p>
+                       <p><html:link forward="login-redirect"><fmt:message 
key="welcome.clickHere" /></html:link> 
+                       <fmt:message key="welcome.toLoginAndPost" /></p>
+                       <%
+               } else if(activationStatus.equals("-1")) {
+                       //error
+               }
+       } else {
+               %>
+               <p><fmt:message key="welcome.accountCreated" /></p>
+               <p><html:link forward="login-redirect"><fmt:message 
key="welcome.clickHere" /></html:link> 
+               <fmt:message key="welcome.toLoginAndPost" /></p>
+               <% 
+       }
 
+%>
 
 
+<br />
+<br />
+<br />


Reply via email to