Commit 8e88fb87 authored by Ryan Graham's avatar Ryan Graham Committed by ryang

added the ability to allow users to create accounts via a web page

git-svn-id: http://svn.igniterealtime.org/svn/repos/wildfire/trunk@3261 b35dd754-fafc-0310-a699-88a17e54d16e
parent 04adb4c8
...@@ -44,6 +44,11 @@ ...@@ -44,6 +44,11 @@
Registration Plugin Changelog Registration Plugin Changelog
</h1> </h1>
<p><b>1.3.0</b> -- January 6, 2006</p>
<ul>
<li>Added the ability to allow users to create accounts via a web page.</li>
</ul>
<p><b>1.2.1</b> -- December 15, 2005</p> <p><b>1.2.1</b> -- December 15, 2005</p>
<ul> <ul>
<li>Now requires Wildfire 2.4.0</li> <li>Now requires Wildfire 2.4.0</li>
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
<name>Registration</name> <name>Registration</name>
<description>Performs various actions whenever a new user account is created.</description> <description>Performs various actions whenever a new user account is created.</description>
<author>Ryan Graham</author> <author>Ryan Graham</author>
<version>1.2.1</version> <version>1.3.0</version>
<date>12/15/2005</date> <date>01/05/2005</date>
<minServerVersion>2.4.0</minServerVersion> <minServerVersion>2.4.0</minServerVersion>
<adminconsole> <adminconsole>
<tab id="tab-users"> <tab id="tab-users">
<sidebar id="sidebar-users"> <sidebar id="sidebar-users">
<item id="registration-props-form" name="Registration Properties" <item id="registration-props-form" name="Registration Properties"
......
...@@ -67,6 +67,7 @@ The registration plugin has three items that can be configured: ...@@ -67,6 +67,7 @@ The registration plugin has three items that can be configured:
notify them whenever a new user registers.</li> notify them whenever a new user registers.</li>
<li>Welcome Message - A message that will be sent to a user when they first register.</li> <li>Welcome Message - A message that will be sent to a user when they first register.</li>
<li>Default Group - A group that all users will be added to when they first register.</li> <li>Default Group - A group that all users will be added to when they first register.</li>
<li>Web Page Registration - Allows users to create accounts via a web page.
<h2>Using the Plugin</h2> <h2>Using the Plugin</h2>
<p> <p>
......
...@@ -17,12 +17,12 @@ import org.jivesoftware.wildfire.group.Group; ...@@ -17,12 +17,12 @@ import org.jivesoftware.wildfire.group.Group;
import org.jivesoftware.wildfire.group.GroupManager; import org.jivesoftware.wildfire.group.GroupManager;
import org.jivesoftware.wildfire.group.GroupNotFoundException; import org.jivesoftware.wildfire.group.GroupNotFoundException;
import org.jivesoftware.wildfire.user.User; import org.jivesoftware.wildfire.user.User;
import org.jivesoftware.admin.AuthCheckFilter;
import org.jivesoftware.util.EmailService; import org.jivesoftware.util.EmailService;
import org.jivesoftware.util.JiveGlobals; import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
import org.xmpp.packet.Message; import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -43,6 +43,8 @@ import javax.mail.internet.MimeUtility; ...@@ -43,6 +43,8 @@ import javax.mail.internet.MimeUtility;
* @author Ryan Graham. * @author Ryan Graham.
*/ */
public class RegistrationPlugin implements Plugin { public class RegistrationPlugin implements Plugin {
private static final String URL = "registration/sign-up.jsp";
/** /**
* The expected value is a boolean, if true all contacts specified in the property #IM_CONTACTS * The expected value is a boolean, if true all contacts specified in the property #IM_CONTACTS
* will receive a notification when a new user registers. The default value is false. * will receive a notification when a new user registers. The default value is false.
...@@ -67,6 +69,12 @@ public class RegistrationPlugin implements Plugin { ...@@ -67,6 +69,12 @@ public class RegistrationPlugin implements Plugin {
*/ */
private static final String GROUP_ENABLED = "registration.group.enabled"; private static final String GROUP_ENABLED = "registration.group.enabled";
/**
* The expected value is a boolean, if true any users will be able to register at the following
* url http://[SERVER_NAME}:9090/plugins/registration/sign-up.jsp
*/
private static final String WEB_ENABLED = "registration.web.enabled";
/** /**
* The expected value is a comma separated String of usernames who will receive a instant * The expected value is a comma separated String of usernames who will receive a instant
* message when a new user registers if the property #IM_NOTIFICATION_ENABLED is set to true. * message when a new user registers if the property #IM_NOTIFICATION_ENABLED is set to true.
...@@ -90,6 +98,12 @@ public class RegistrationPlugin implements Plugin { ...@@ -90,6 +98,12 @@ public class RegistrationPlugin implements Plugin {
* be added to when they register, if the property #GROUP_ENABLED is set to true. * be added to when they register, if the property #GROUP_ENABLED is set to true.
*/ */
private static final String REGISTRAION_GROUP = "registration.group"; private static final String REGISTRAION_GROUP = "registration.group";
/**
* The expected value is a String that contains the text that will be displayed in the header
* of the sign-up.jsp, if the property #WEB_ENABLED is set to true.
*/
private static final String HEADER = "registration.header";
private RegistrationUserEventListener listener = new RegistrationUserEventListener(); private RegistrationUserEventListener listener = new RegistrationUserEventListener();
...@@ -122,13 +136,12 @@ public class RegistrationPlugin implements Plugin { ...@@ -122,13 +136,12 @@ public class RegistrationPlugin implements Plugin {
JiveGlobals.deleteProperty("registration.notification.enabled"); JiveGlobals.deleteProperty("registration.notification.enabled");
} }
public void processPacket(Packet packet) {
}
public void initializePlugin(PluginManager manager, File pluginDirectory) { public void initializePlugin(PluginManager manager, File pluginDirectory) {
AuthCheckFilter.addExclude(URL);
} }
public void destroyPlugin() { public void destroyPlugin() {
AuthCheckFilter.removeExclude(URL);
UserEventDispatcher.removeListener(listener); UserEventDispatcher.removeListener(listener);
serverAddress = null; serverAddress = null;
listener = null; listener = null;
...@@ -196,7 +209,7 @@ public class RegistrationPlugin implements Plugin { ...@@ -196,7 +209,7 @@ public class RegistrationPlugin implements Plugin {
} }
public void setWelcomeEnabled(boolean enable) { public void setWelcomeEnabled(boolean enable) {
JiveGlobals.setProperty(WELCOME_ENABLED, enable ? "true" : "false"); JiveGlobals.setProperty(WELCOME_ENABLED, enable ? "true" : "false");
} }
public boolean welcomeEnabled() { public boolean welcomeEnabled() {
...@@ -219,6 +232,19 @@ public class RegistrationPlugin implements Plugin { ...@@ -219,6 +232,19 @@ public class RegistrationPlugin implements Plugin {
return JiveGlobals.getBooleanProperty(GROUP_ENABLED, false); return JiveGlobals.getBooleanProperty(GROUP_ENABLED, false);
} }
public void setWebEnabled(boolean enable) {
JiveGlobals.setProperty(WEB_ENABLED, enable ? "true" : "false");
}
public boolean webEnabled() {
return JiveGlobals.getBooleanProperty(WEB_ENABLED, false);
}
public String webRegistrationAddress() {
return "http://" + XMPPServer.getInstance().getServerInfo().getName() + ":"
+ JiveGlobals.getXMLProperty("adminConsole.port") + "/plugins/" + URL;
}
public void setGroup(String group) { public void setGroup(String group) {
JiveGlobals.setProperty(REGISTRAION_GROUP, group); JiveGlobals.setProperty(REGISTRAION_GROUP, group);
} }
...@@ -227,6 +253,14 @@ public class RegistrationPlugin implements Plugin { ...@@ -227,6 +253,14 @@ public class RegistrationPlugin implements Plugin {
return JiveGlobals.getProperty(REGISTRAION_GROUP); return JiveGlobals.getProperty(REGISTRAION_GROUP);
} }
public void setHeader(String message) {
JiveGlobals.setProperty(HEADER, message);
}
public String getHeader() {
return JiveGlobals.getProperty(HEADER, "Web Sign-In");
}
private class RegistrationUserEventListener implements UserEventListener { private class RegistrationUserEventListener implements UserEventListener {
public void userCreated(User user, Map params) { public void userCreated(User user, Map params) {
if (imNotificationEnabled()) { if (imNotificationEnabled()) {
...@@ -304,8 +338,7 @@ public class RegistrationPlugin implements Plugin { ...@@ -304,8 +338,7 @@ public class RegistrationPlugin implements Plugin {
try { try {
GroupManager groupManager = GroupManager.getInstance(); GroupManager groupManager = GroupManager.getInstance();
Group group = groupManager.getGroup(getGroup()); Group group = groupManager.getGroup(getGroup());
group.getMembers() group.getMembers().add(XMPPServer.getInstance().createJID(user.getUsername(), null));
.add(XMPPServer.getInstance().createJID(user.getUsername(), null));
} }
catch (GroupNotFoundException e) { catch (GroupNotFoundException e) {
Log.error(e); Log.error(e);
......
<%--
- Copyright (C) 2005 Jive Software. All rights reserved.
-
- This software is published under the terms of the GNU Public License (GPL),
- a copy of which is included in this distribution.
--%>
<%@ page import="org.jivesoftware.wildfire.user.*,
org.jivesoftware.wildfire.plugin.RegistrationPlugin,
org.jivesoftware.util.*,
org.jivesoftware.stringprep.Stringprep,
org.jivesoftware.stringprep.StringprepException"
%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<html>
<head>
<title>Jive Wifdfire Web Registration</title>
<link rel="stylesheet" type="text/css" href="/style/global.css">
<style type="text/css">
.drop-shadow {
font-weight: bold;
font-size: 14pt;
color: white;
text-shadow: black 0.1em 0.1em 0.2em;
padding-top: 21px;}
</style>
<meta name="decorator" content="none"/>
</head>
<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager" />
<jsp:useBean id="errors" class="java.util.HashMap" />
<% webManager.init(request, response, session, application, out);
boolean create = request.getParameter("create") != null;
String username = ParamUtils.getParameter(request,"username");
String name = ParamUtils.getParameter(request,"name");
String email = ParamUtils.getParameter(request,"email");
String password = ParamUtils.getParameter(request,"password");
String passwordConfirm = ParamUtils.getParameter(request,"passwordConfirm");
// Handle a request to create a user:
if (create) {
// Validate
if (username == null) {
errors.put("username","");
}
else {
try {
username = username.trim().toLowerCase();
username = Stringprep.nodeprep(username);
}
catch (StringprepException se) {
errors.put("username", "");
}
}
if (password == null) {
errors.put("password","");
}
if (passwordConfirm == null) {
errors.put("passwordConfirm","");
}
if (password != null && passwordConfirm != null && !password.equals(passwordConfirm)) {
errors.put("passwordMatch","");
}
// do a create if there were no errors
if (errors.size() == 0) {
try {
webManager.getUserManager().createUser(username, password, name, email);
response.sendRedirect("sign-up.jsp?success=true");
return;
}
catch (UserAlreadyExistsException e) {
errors.put("usernameAlreadyExists","");
}
catch (Exception e) {
errors.put("general","");
Log.error(e);
}
}
}
RegistrationPlugin plugin = (RegistrationPlugin) webManager.getXMPPServer().getPluginManager().getPlugin("registration");
%>
<body>
<div id="jive-header">
<table cellpadding="0" cellspacing="0" width="100%" border="0">
<tbody>
<tr><td class="drop-shadow">&nbsp;<%=plugin.getHeader() %></td></tr>
</tbody>
</table>
</div>
<div id="jive-content">
<% if (!plugin.webEnabled()) { %>
This service is currently unavailable.
<% } else { %>
<p>Use the form below to create a new user account</p>
<c:set var="submit" value="${param.create}"/>
<c:set var="errors" value="${errors}"/>
<% if (!errors.isEmpty()) { %>
<div class="jive-error">
<table cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td class="jive-icon"><img src="images/error-16x16.gif" width="16" height="16" border="0"/></td>
<td class="jive-icon-label">
<% if (errors.get("general") != null) { %>
<fmt:message key="user.create.error_creating_account" />
<% } else if (errors.get("username") != null) { %>
<fmt:message key="user.create.invalid_username" />
<% } else if (errors.get("usernameAlreadyExists") != null) { %>
<fmt:message key="user.create.user_exist" />
<% } else if (errors.get("name") != null) { %>
<fmt:message key="user.create.invalid_name" />
<% } else if (errors.get("email") != null) { %>
<fmt:message key="user.create.invalid_email" />
<% } else if (errors.get("password") != null) { %>
<fmt:message key="user.create.invalid_password" />
<% } else if (errors.get("passwordMatch") != null) { %>
<fmt:message key="user.create.invalid_match_password" />
<% } else if (errors.get("passwordConfirm") != null) { %>
<fmt:message key="user.create.invalid_password_confirm" />
<% } %>
</td>
</tr>
</tbody>
</table>
</div>
<br>
<% } else if (request.getParameter("success") != null) { %>
<div class="jive-success">
<table cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td class="jive-icon"><img src="images/success-16x16.gif" width="16" height="16" border="0"></td>
<td class="jive-icon-label">New account successfully created.</td>
</tr>
</tbody>
</table>
</div><br>
<% } %>
<form name="f" action="sign-up.jsp" method="get">
<fieldset>
<legend>Create Account</legend>
<div>
<table cellpadding="3" cellspacing="0" border="0" width="100%">
<tbody>
<tr>
<td width="1%" nowrap><label for="usernametf">Username:</label> *</td>
<td width="99%">
<input type="text" name="username" size="30" maxlength="75" value="<%= ((username!=null) ? username : "") %>"
id="usernametf" autocomplete="off">
</td>
</tr>
<tr>
<td width="1%" nowrap>
<label for="nametf">Name:</label>
</td>
<td width="99%">
<input type="text" name="name" size="30" maxlength="75" value="<%= ((name!=null) ? name : "") %>"
id="nametf">
</td>
</tr>
<tr>
<td width="1%" nowrap>
<label for="emailtf">Email:</label></td>
<td width="99%">
<input type="text" name="email" size="30" maxlength="75" value="<%= ((email!=null) ? email : "") %>"
id="emailtf">
</td>
</tr>
<tr>
<td nowrap>
<label for="passtf">Password:</label> *
</td>
<td width="99%">
<input type="password" name="password" value="" size="20" maxlength="75"
id="passtf">
</td>
</tr>
<tr>
<td width="1%" nowrap>
<label for="confpasstf">Confirm Password:</label> *
</td>
<td width="99%">
<input type="password" name="passwordConfirm" value="" size="20" maxlength="75"
id="confpasstf">
</td>
</tr>
</tbody>
</table>
<br>
<span class="jive-description">
* Required Fields
</span>
</div>
</fieldset>
<br><br>
<input type="submit" name="create" value="Create Account">
</form>
<script language="JavaScript" type="text/javascript">
document.f.username.focus();
</script>
<% } %>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment