001/* 002 * (C) Copyright 2006-2009 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo - initial API and implementation 016 * 017 * $Id$ 018 */ 019 020package org.nuxeo.ecm.webengine.admin; 021 022import java.util.Arrays; 023import java.util.List; 024 025import javax.servlet.http.HttpServletRequest; 026import javax.ws.rs.GET; 027import javax.ws.rs.POST; 028import javax.ws.rs.Path; 029import javax.ws.rs.PathParam; 030import javax.ws.rs.Produces; 031import javax.ws.rs.QueryParam; 032import javax.ws.rs.core.Response; 033 034import org.nuxeo.ecm.core.api.DocumentModelList; 035import org.nuxeo.ecm.core.api.NuxeoGroup; 036import org.nuxeo.ecm.core.api.NuxeoPrincipal; 037import org.nuxeo.ecm.core.api.impl.NuxeoGroupImpl; 038import org.nuxeo.ecm.platform.usermanager.NuxeoPrincipalImpl; 039import org.nuxeo.ecm.platform.usermanager.UserManager; 040import org.nuxeo.ecm.webengine.model.WebObject; 041import org.nuxeo.ecm.webengine.model.exceptions.WebResourceNotFoundException; 042import org.nuxeo.ecm.webengine.model.impl.DefaultObject; 043import org.nuxeo.runtime.api.Framework; 044 045@WebObject(type = "UserManager") 046@Produces("text/html;charset=UTF-8") 047public class UserService extends DefaultObject { 048 049 @GET 050 public Object getIndex(@QueryParam("query") String query, @QueryParam("group") String group) { 051 if (query != null && !query.isEmpty()) { 052 UserManager userManager = Framework.getService(UserManager.class); 053 if (group != null) { 054 DocumentModelList results = userManager.searchGroups(query); 055 return getView("index").arg("groups", results); 056 } else { 057 List<NuxeoPrincipal> results = userManager.searchPrincipals(query); 058 return getView("index").arg("users", results); 059 } 060 } 061 return getView("index"); 062 } 063 064 @Path("user/{user}") 065 public Object searchUsers(@PathParam("user") String user) { 066 UserManager userManager = Framework.getService(UserManager.class); 067 NuxeoPrincipalImpl principal = (NuxeoPrincipalImpl) userManager.getPrincipal(user); 068 if (principal == null) { 069 throw new WebResourceNotFoundException("User not found: " + user); 070 } 071 return newObject("User", principal); 072 } 073 074 @Path("group/{group}") 075 public Object searchGroups(@PathParam("group") String group) { 076 UserManager userManager = Framework.getService(UserManager.class); 077 // FIXME: find better name for it 078 NuxeoGroup principal = userManager.getGroup(group); 079 if (principal == null) { 080 throw new WebResourceNotFoundException("Group not found: " + group); 081 } 082 return newObject("Group", principal); 083 } 084 085 @POST 086 @Path("user") 087 public Response postUser() { 088 HttpServletRequest req = ctx.getRequest(); 089 String username = req.getParameter("username"); 090 UserManager userManager = Framework.getService(UserManager.class); 091 if (username != null && !username.isEmpty()) { 092 NuxeoPrincipalImpl user = (NuxeoPrincipalImpl) userManager.getPrincipal(username); 093 String[] selectedGroups; 094 if (user != null) { 095 // update 096 user.setFirstName(req.getParameter("firstName")); 097 user.setLastName(req.getParameter("lastName")); 098 user.setPassword(req.getParameter("password")); 099 user.setEmail(req.getParameter("email")); 100 101 selectedGroups = req.getParameterValues("groups"); 102 List<String> listGroups = Arrays.asList(selectedGroups); 103 user.setGroups(listGroups); 104 105 userManager.updatePrincipal(user); 106 } else { 107 // create 108 user = new NuxeoPrincipalImpl(req.getParameter("username")); 109 user.setFirstName(req.getParameter("firstName")); 110 user.setLastName(req.getParameter("lastName")); 111 user.setPassword(req.getParameter("password")); 112 user.setEmail(req.getParameter("email")); 113 114 selectedGroups = req.getParameterValues("groups"); 115 List<String> listGroups = Arrays.asList(selectedGroups); 116 user.setGroups(listGroups); 117 118 userManager.createPrincipal(user); 119 } 120 return redirect(getPath() + "/user/" + user.getName()); 121 } 122 // FIXME 123 return null; 124 } 125 126 @POST 127 @Path("group") 128 public Response postGroup() { 129 String groupName = ctx.getRequest().getParameter("groupName"); 130 UserManager userManager = Framework.getService(UserManager.class); 131 if (groupName != null && !groupName.equals("")) { 132 NuxeoGroup group = new NuxeoGroupImpl(groupName); 133 userManager.createGroup(group); 134 return redirect(getPath() + "/group/" + group.getName()); 135 } 136 // FIXME 137 return null; 138 } 139 140 public List<NuxeoGroup> getGroups() { 141 return Framework.getService(UserManager.class).getAvailableGroups(); 142 } 143 144 public List<NuxeoPrincipal> getUsers() { 145 return Framework.getService(UserManager.class).getAvailablePrincipals(); 146 } 147 148}