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}