Skip to content

Instantly share code, notes, and snippets.

@cfalzone
Created September 3, 2015 13:39
Show Gist options
  • Save cfalzone/b67c0d49c349b22256c3 to your computer and use it in GitHub Desktop.
Save cfalzone/b67c0d49c349b22256c3 to your computer and use it in GitHub Desktop.
A User Creation JSP for dotCMS. Create users from CSV File
<%@page import="java.util.Map"%>
<%@page import="com.dotmarketing.util.UUIDGenerator"%>
<%@page import="com.dotmarketing.business.UserProxyAPI"%>
<%@page import="com.dotmarketing.cms.factories.PublicCompanyFactory"%>
<%@page import="com.dotmarketing.cms.factories.PublicAddressFactory"%>
<%@page import="com.liferay.portal.model.Address"%>
<%@page import="com.dotmarketing.factories.InodeFactory"%>
<%@page import="com.dotmarketing.beans.UserProxy"%>
<%@page import="com.dotmarketing.cms.factories.PublicEncryptionFactory"%>
<%@page import="java.util.Date"%>
<%@page import="com.dotmarketing.business.UserAPI"%>
<%@page import="com.dotmarketing.business.APILocator"%>
<%@page import="com.liferay.portal.model.User"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Scanner"%>
<%@page import="com.dotmarketing.util.UtilMethods"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="com.dotmarketing.util.Logger"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.ByteArrayInputStream"%>
<%@page import="java.io.InputStream"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bulk Create Users</title>
</head>
<body>
<h1>Bulk Create Users</h1>
<%
UserAPI userAPI = APILocator.getUserAPI();
UserProxyAPI userProxyAPI = APILocator.getUserProxyAPI();
User sysUser = userAPI.getSystemUser();
String companyId = PublicCompanyFactory.getDefaultCompany().getCompanyId();
boolean processed = false;
if(ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<HashMap<String,String>> users = new ArrayList<HashMap<String,String>>();
try {
List<FileItem> items = upload.parseRequest(request);
for(FileItem item : items) {
if(! item.isFormField()) {
byte[] data = item.get();
InputStream is = new ByteArrayInputStream(data);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
try {
String line;
while((line = br.readLine()) != null) {
String[] values = line.split(",");
HashMap<String, String> r = new HashMap<String, String>();
r.put("firstName", values[0]);
r.put("lastName", values[1]);
r.put("email", values[2]);
users.add(r);
}
} catch (Exception e) {
out.println("<p>Failed to read csvFile from Stream</p>");
Logger.error(this, "Exception trying to read csvFile from Stream", e);
} finally {
try {
br.close();
} catch (Exception e) {
out.println("<p>Failed to close Streams</p>");
Logger.error(this, "Exception trying to close Streams", e);
}
}
}
}
} catch (Exception e) {
out.println("<p>Could not parse request</p>");
Logger.error(this, "Exception trying to read csvFile from Stream", e);
}
if(users.size() > 0) {
out.println("<p>Created Users:</p><ul>");
for(HashMap<String,String> userMap : users) {
// Check if the user already exists
User userDuplicated = null;
try {
userDuplicated = userAPI.loadByUserByEmail(userMap.get("email"), sysUser, false);
} catch (Exception e) { }
User user = null;
if (userDuplicated == null) {
// Create a New User
user = userAPI.createUser(null, null);
user.setCreateDate(new Date());
user.setGreeting("Welcome, " + userMap.get("firstName") + " " + userMap.get("lastName") + "!");
user.setFirstName(userMap.get("firstName"));
user.setMiddleName("");
user.setLastName(userMap.get("lastName"));
user.setNickName("");
user.setEmailAddress(userMap.get("email").trim().toLowerCase());
user.setBirthday(null);
// Create A password for this user
String password = PublicEncryptionFactory.getRandomPassword();
user.setActive(true);
user.setPassword(PublicEncryptionFactory.digestString(password));
user.setPasswordEncrypted(true);
// Save the user
APILocator.getUserAPI().save(user, sysUser, false);
// Create a userProxy
UserProxy userProxy = userProxyAPI.getUserProxy(user, sysUser, false);
String userProxyInode = userProxy.getInode();
userProxy = (UserProxy) InodeFactory.getInode(userProxyInode, UserProxy.class);
userProxy.setInode(userProxyInode);
userProxy.setUserId(user.getUserId());
userProxyAPI.saveUserProxy(userProxy, sysUser, false);
userProxyInode = userProxy.getInode();
// Create an Address
Address address = PublicAddressFactory.getInstance();
address.setUserName(user.getFullName());
address.setCompanyId(companyId);
address.setUserId(user.getUserId());
Date today = new Date();
address.setCreateDate(today);
address.setModifiedDate(today);
address.setPriority(1);
address.setClassName(user.getClass().getName());
address.setClassPK(user.getUserId());
address.setDescription("Primary");
address.setStreet1("123 Fake Street");
address.setStreet2("");
address.setCountry("USA");
address.setCity("Waterford");
address.setState("PA");
address.setZip("16441");
address.setPhone("(814) 814-8144");
address.setFax("");
address.setCell("");
PublicAddressFactory.save(address);
// HERE IS WHERE YOU CAN ASSIGN A ROLE TO THE USER
out.println("<li>User Created - "+userMap.get("email")+" - "+password+"</li>");
} else {
out.println("<li>User Exists - "+userMap.get("email")+"</li>");
user = userDuplicated;
}
}
processed = true;
} else {
out.println("<p>No Users Found</p>");
}
}
if(!processed) {
%>
<form action="/CreateUsers.jsp" method="post" enctype="multipart/form-data">
<p><label for="csvFile">Users CSV File:</label><input type="file" name="csvFile" id="csvFile" /></p>
<p><input type="submit" value="Submit" /></p>
</form>
<%
}
%>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment