<?xml version="1.0" encoding="UTF-8"?>
<project name="New User Send Email" default="package-amp" basedir=".">
<property name="project.dir" value="."/>
<property name="build.dir" value="${project.dir}/build"/>
<property name="config.dir" value="${project.dir}/config"/>
<property name="jar.file" value="${build.dir}/lib/newuser-email.jar"/>
<property name="amp.file" value="${build.dir}/dist/newuser-email.amp"/>
<target name="mkdirs">
<mkdir dir="${build.dir}/dist" />
<mkdir dir="${build.dir}/lib" />
</target>
<target name="clean" description="removes all generated files">
<delete dir="${build.dir}" />
</target>
<path id="class.path">
<dirset dir="${build.dir}" />
<fileset dir="/alfresco-community-sdk-3.4.d/lib/server" includes="**/*.jar"/>
<!– Tiene que indicar la ruta a esa carpeta dentro de alfresco-community-sdk-3.4.d –>
</path>
<target name="compile">
<mkdir dir="${build.dir}/classes" />
<javac classpathref="class.path" srcdir="${project.dir}/source/java" destdir="${build.dir}/classes" />
</target>
<target name="package-jar" depends="compile">
<jar destfile="${jar.file}" >
<fileset dir="${build.dir}/classes" excludes="**/custom*,**/*Test*" includes="**/*.class" />
</jar>
</target>
<target name="package-amp" depends="mkdirs, package-jar" description="Package the Module" >
<zip destfile="${amp.file}" >
<fileset dir="${project.dir}/build" includes="lib/*.jar" />
<fileset dir="${project.dir}" includes="config/**/*.*" excludes="**/module.properties" />
<fileset dir="${project.dir}/config/alfresco/module/ampmodule" includes="module.properties" />
</zip>
</target>
<target name="update-war" depends="package-amp" description="Update the WAR file. Set -Dwar.file=…" >
<echo>Installing New User Send Email AMP into WAR</echo>
<java dir="." fork="true" classname="org.alfresco.repo.module.tool.ModuleManagementTool">
<classpath refid="class.path" />
<arg line="install ${amp.file} ${war.file} -force -verbose"/>
</java>
</target>
</project>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<import resource="classpath:alfresco/module/ampmodule/context/service-context.xml" />
</beans>
module.id=org.alfresco.module.ampmodule.SendEmail
module.title=Send Email New User
module.description=Envio de email con los datos de acceso al crear un nuevo usuario.
module.version=1.0
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!– A simple class that is initialized by Spring –>
<bean id="NewUserEmail" class="org.alfresco.module.ampmodule.NewUserEmail" init-method="init" >
<property name="nodeService">
<ref bean="nodeService" />
</property>
<property name="policyComponent">
<ref bean="policyComponent" />
</property>
<property name="serviceRegistry" ref="ServiceRegistry"/>
</bean>
</beans>
<html>
<body>
<p>A new Alfresco User has been created.</p>
<p>Hello, ${firstName} ${lastName}</p>
<p>Your username is ${username} and your password is ${password} </p>
<p>${url.serverPath}${url.context}/faces/jsp/login.jsp</p>
<p>We strongly advise you to change your password when you log in for the first time.</p>
<p>Your Space Home is ${url.serverPath}${url.context}/navigate/browse/workspace/SpacesStore/${id} </p>
Regards
</body>
</html>
package org.alfresco.module.ampmodule;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.jscript.ClasspathScriptLocation;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.web.app.servlet.BaseTemplateContentServlet;
import org.alfresco.web.app.servlet.FacesHelper;
import org.apache.log4j.Logger;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
/**
* Java class to send an email with access data to a new created user
*
*/
public class NewUserEmail implements NodeServicePolicies.OnCreateNodePolicy {
/**
* Log variable
*/
private Logger logger = Logger.getLogger(NewUserEmail.class);
/**
* Policy Component for managing Policies and Behaviours
*/
private PolicyComponent policyComponent;
/**
* NodeService for public and internal node and store operations.
*/
private NodeService nodeService;
/**
* ServiceRegistry represents the registry of public Repository Services.
* The registry provides meta-data about each service and provides access to the service interface.
*/
private ServiceRegistry serviceRegistry;
/**
* User Home Directory
*/
protected NodeRef homeFolder = null;
/**
* User Login
*/
protected String userName = null;
/**
* User Password
*/
protected String password = null;
/**
* User First Name
*/
protected String firstName = null;
/**
* User Last Name
*/
protected String lastName = null;
/**
* User Email
*/
protected String email = null;
/**
* Email Subject
*/
protected String subject = null;
/**
* Email Body
*/
protected String body = null;
/**
* Email Template
*/
private static final String NEW_USER_EMAIL_TEMPLATE = "alfresco/module/ampmodule/template/new_user_email.ftl";
/**
* Email From
*/
private static final String EMAIL_FROM = "alfresco@gmail.com";
/**
* Initialises the dialog bean
*/
public void init()
{
this.email = "";
this.userName = "";
this.password = "";
this.firstName = "";
this.lastName = "";
this.subject = "New User Alfresco";
this.body = "";
/**
* Associate the behavior of the class. When you create a user calls the method notificarUsuario
*/
this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI,"onCreateNode"), ContentModel.TYPE_PERSON, new JavaBehaviour(this,"notificarUsuario", org.alfresco.repo.policy.JavaBehaviour.NotificationFrequency.TRANSACTION_COMMIT));
}
/**
* Called when a new node has been created.
*/
public void onCreateNode(ChildAssociationRef childAssocRef)
{
if (logger.isInfoEnabled()) logger.info(" NewUserEmail Node create policy fired");
}
/**
* Set the node service
*
* @param nodeService the node service
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/**
* Set the policy component
*
* @param policyComponent the policy component
*/
public void setPolicyComponent(PolicyComponent policyComponent) {
this.policyComponent = policyComponent;
}
/**
* Set the service registry
*
* @param serviceRegistry the service registry
*/
public void setServiceRegistry(ServiceRegistry serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
/**
* Get email subject
* @return email subject.
*/
public String getSubject()
{
return this.subject;
}
/**
* Get email body
* @return email body.
*/
public String getBody()
{
return this.body;
}
/**
* Get user email
* @return user email.
*/
public String getEmail()
{
return this.email;
}
/**
* Get user login
* @return user login .
*/
public String getUserName()
{
return this.userName;
}
/**
* Get user first name
* @return user first name.
*/
public String getFirstName()
{
return this.firstName;
}
/**
* Get user last name
* @return user last name.
*/
public String getLastName()
{
return this.lastName;
}
/**
* Get user password
* @return user password
*/
public String getPassword() {
return password;
}
/**
* Set user password
* @param password user password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* get user home folder
* @return user home folder
*/
public NodeRef getHomeFolder() {
return homeFolder;
}
/**
* Retrieves user data from a node and call sendEmail() function
* @param childAssocRef the primary parent-child association of the created node
*/
public void notificarUsuario(ChildAssociationRef childAssocRef)
{
NodeRef personRef = childAssocRef.getChildRef();
this.userName = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_USERNAME);
this.email = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_EMAIL);
this.firstName = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_FIRSTNAME);
this.lastName = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_LASTNAME);
this.homeFolder = DefaultTypeConverter.INSTANCE.convert(NodeRef.class, nodeService.getProperty(personRef, ContentModel.PROP_HOMEFOLDER));
sendEmail();
}
/**
* Build Email and call send() function
* @throws AlfrescoRuntimeException If template isn't found, email is constructed "manually"
*/
public void sendEmail() throws AlfrescoRuntimeException
{
Map<String, Object> model = new HashMap<String, Object>();
if (getEmail() != null && getEmail() != "")
{
// Search user by email
Set<NodeRef> result = serviceRegistry.getPersonService().getPeopleFilteredByProperty(ContentModel.PROP_EMAIL,getEmail());
if (result.size() == 1)
{
// Generate a random password for the user
cambiarPassword(getUserName());
// Get application url
FacesContext fc = FacesContext.getCurrentInstance();
BaseTemplateContentServlet.URLHelper url = new BaseTemplateContentServlet.URLHelper(fc);
ClasspathScriptLocation location = new ClasspathScriptLocation(NEW_USER_EMAIL_TEMPLATE);
try
{
if(location.getInputStream() != null) // Check that there is a template
{
// build the email template model
model.put("username", getUserName());
model.put("firstName", getFirstName());
model.put("lastName", getLastName());
model.put("id",getHomeFolder().getId());
model.put("url",url );
model.put("password",getPassword());
this.body = serviceRegistry.getTemplateService().processTemplate("freemarker", NEW_USER_EMAIL_TEMPLATE, model);
send();
}
}
catch(AlfrescoRuntimeException e) // If template isn't found, email is constructed "manually"
{
logger.error("Email Template no encontrado " + NEW_USER_EMAIL_TEMPLATE );
this.body = "<html> <body> <p> A new Alfresco User has been created.</p>" +
"<p>Hello, " +getFirstName() +" "+ getLastName()+ " </p><p>Your username is " +getUserName() + " and your " +
"passowrd is " + getPassword() + "</p> " +
"<p>" +url.getServerPath() + url.getContext() + "/faces/jsp/login.jsp</p>" +
"<p>We strongly advise you to change your password when you log in for the first time.</p>" +
"<p>Your Space Home is" + url.getServerPath() + url.getContext() +
"/navigate/browse/workspace/SpacesStore/" +getHomeFolder().getId() + "</p>" +
"Regards</body> </html>";
send();
}
}
}
}
/**
* Java function to send email
*/
protected void send()
{
MimeMessagePreparator mailPreparer = new MimeMessagePreparator()
{
public void prepare(MimeMessage mimeMessage) throws MessagingException
{
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(getEmail());
message.setSubject(getSubject());
message.setText(getBody(),true);
message.setFrom(EMAIL_FROM);
}
};
// Send the message
this.getMailSender().send(mailPreparer);
}
/**
* Get mail sender
* @return JavaMailSender
*/
protected JavaMailSender getMailSender() {
JavaMailSender mailSender = null;
if (mailSender == null) {
mailSender = (JavaMailSender) FacesHelper.getManagedBean(FacesContext.getCurrentInstance(), "mailService");
}
return mailSender;
}
/**
*
* Generates a random password, and saves the information
* @param userName user that the password is changed
*/
public void cambiarPassword(String userName)
{
//Set the system user as the currently running user for authentication purposes.
AuthenticationUtil.setRunAsUserSystem();
//Check that the person exists by email
Set<NodeRef> result = serviceRegistry.getPersonService().getPeopleFilteredByProperty(ContentModel.PROP_EMAIL,getEmail());
if (result.size() == 1)
{
Object[] userNodeRefs = result.toArray();
eNodeRef userNodeRef = (NodeRef) userNodeRefs[0];
String username = (String) serviceRegistry.getNodeService().getProperty(userNodeRef,ContentModel.PROP_USERNAME);
// Generate random password
String nuevoPassword = Password.generarPassword();
char[] cadenaChars = new char[nuevoPassword.length()];
for (int i=0; i<nuevoPassword.length(); i++)
{
cadenaChars[i] = nuevoPassword.charAt(i);
}
// Save new password
serviceRegistry.getAuthenticationService().setAuthentication(username, nuevoPassword.toCharArray());
// Save new password
setPassword(nuevoPassword);
}
}
}
package org.alfresco.module.ampmodule;
/**
* Java class that generates a random password of 8 characters
*
*/
public class Password
{
/**
* Password length
*/
private static final int length = 8;
/**
* Numbers that can be part of a generated password
*/
private static final String NUMEROS = "0123456789";
/**
* Capital letters that can be part of a generated password
*/
private static final String MAYUSCULAS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/**
* Lowercase letters that can be part of a generated password
*/
private static final String MINUSCULAS = "abcdefghijklmnopqrstuvwxyz";
/**
* Generate a random password
* @return random password
*/
public static String generarPassword() {
String key = NUMEROS + MAYUSCULAS + MINUSCULAS;
String pswd = "";
for (int i = 0; i < length; i++) {
pswd+=(key.charAt((int)(Math.random() * key.length())));
}
return pswd;
}
}
ant
java -jar alfresco-mmt-3.3g.jar install build/dist/newuser-email.amp alfresco.war -verbose
He creado una clase NewUserEmail.java para generar automáticamente un correo electrónico con nombre de usuario y contraseña al crear un nuevo usuario. Soy capaz de crear la contraseña, pero cuando intento iniciar sesión con esa contraseña, no se está ingresando. No puedo generar mi correo.
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.jscript.ClasspathScriptLocation;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.apache.log4j.Logger;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class NewUserEmail implements NodeServicePolicies.OnCreateNodePolicy {
private Logger logger = Logger.getLogger(NewUserEmail.class);
private PolicyComponent policyComponent;
private NodeService nodeService;
private PersonService personService;
private ServiceRegistry serviceRegistry;
protected String userName = null;
protected String password = null;
protected String email = null;
protected String subject = null;
protected String body = null;
private static final String NEW_USER_EMAIL_TEMPLATE = "alfresco/module/demoact1-repo/template/new_user_email.ftl";
private static final String EMAIL_FROM = "no-reply@eisenvault.com";
public void init()
{
this.email = "";
this.userName = "";
this.password = "";
this.subject = "New User Alfresco";
this.body = "";
this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI,"onCreateNode"), ContentModel.TYPE_PERSON, new JavaBehaviour(this,"ReportUser", org.alfresco.repo.policy.JavaBehaviour.NotificationFrequency.EVERY_EVENT));
}
public void onCreateNode(ChildAssociationRef childAssocRef)
{
if (logger.isInfoEnabled()) logger.info(" NewUserEmail Node create policy fired");
}
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
public void setPolicyComponent(PolicyComponent policyComponent) {
this.policyComponent = policyComponent;
}
public void setServiceRegistry(ServiceRegistry serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
public String getSubject()
{
return this.subject;
}
public String getBody()
{
return this.body;
}
public String getEmail()
{
return this.email;
}
public String getUserName()
{
return this.userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void ReportUser(ChildAssociationRef childAssocRef)
{
NodeRef personRef = childAssocRef.getChildRef();
this.userName = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_USERNAME);
this.email = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_EMAIL);
sendEmail();
}
public void sendEmail() throws AlfrescoRuntimeException
{
Map<String, Object> templateModel = new HashMap<String, Object>();
if (getEmail() != null && getEmail() != "")
{
Set<NodeRef> result = serviceRegistry.getPersonService().getPeopleFilteredByProperty(ContentModel.PROP_EMAIL,getEmail(),1);
if (result.size() == 1)
{
changePassword(getUserName());
ClasspathScriptLocation location = new ClasspathScriptLocation(NEW_USER_EMAIL_TEMPLATE);
try
{
if(location.getInputStream() != null) // Check that there is a template
{
templateModel.put("userName", getUserName());
templateModel.put("password",getPassword());
this.body = serviceRegistry.getTemplateService().processTemplate("freemarker", NEW_USER_EMAIL_TEMPLATE, templateModel);
}
}
catch(AlfrescoRuntimeException e) // If template isn't found, email is constructed "manually"
{
logger.error("Email Template not found " + NEW_USER_EMAIL_TEMPLATE );
this.body = "<html> <body> <p> A new User has been created.</p>" +
"<p>Hello, </p><p>Your username is " +getUserName() + " and your " +
"password is " + getPassword() + "</p> " +
"<p>We strongly advise you to change your password when you log in for the first time.</p>" +
"Regards</body> </html>";
//send();
}
}
}
}
protected void send()
{
MimeMessagePreparator mailPreparer = new MimeMessagePreparator()
{
public void prepare(MimeMessage mimeMessage) throws MessagingException
{
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(getEmail());
message.setSubject(getSubject());
message.setText(getBody(),true);
message.setFrom(EMAIL_FROM);
}
};
}
public void changePassword(String password)
{
AuthenticationUtil.setRunAsUserSystem();
Set<NodeRef> result = serviceRegistry.getPersonService().getPeopleFilteredByProperty(ContentModel.PROP_EMAIL,getEmail(),1);
if (result.size() == 1)
{
Object[] userNodeRefs = result.toArray();
NodeRef userNodeRef = (NodeRef) userNodeRefs[0];
String username = (String) serviceRegistry.getNodeService().getProperty(userNodeRef,ContentModel.PROP_USERNAME);
// Generate random password
String newPassword = Password.generatePassword();
char[] cadChars = new char[newPassword.length()];
for (int i=0; i<newPassword.length(); i++)
{
cadChars[i] = newPassword.charAt(i);
}
serviceRegistry.getAuthenticationService().setAuthentication(username, newPassword.toCharArray());
setPassword(newPassword);
System.out.println("Password is :" + newPassword);
}
}
}
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.