BUG2011 Fix
[aaa.git] / aaa-idmlight / src / main / java / org / opendaylight / aaa / idm / rest / UserHandler.java
1 /*
2  * Copyright (c) 2014 Hewlett-Packard Development Company, L.P. and others.
3  * All rights reserved.
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse License v1.0 which accompanies this distribution,
7  * and is available at http://www.eclipse.org/legal/epl-v10.html
8  */
9 package org.opendaylight.aaa.idm.rest;
10
11 /**
12  *
13  * @author peter.mellquist@hp.com 
14  *
15  */
16
17 import javax.servlet.http.HttpServletRequest;
18 import javax.ws.rs.GET;
19 import javax.ws.rs.POST;
20 import javax.ws.rs.PUT;
21 import javax.ws.rs.DELETE;
22 import javax.ws.rs.Path;
23 import javax.ws.rs.Produces;
24 import javax.ws.rs.Consumes;
25 import javax.ws.rs.PathParam;
26 import javax.ws.rs.core.Response;
27 import javax.ws.rs.core.Context;
28 import javax.ws.rs.core.UriInfo;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31 import java.util.List;
32 import java.util.ArrayList;
33 import org.opendaylight.aaa.idm.model.Users;
34 import org.opendaylight.aaa.idm.model.User;
35 import org.opendaylight.aaa.idm.model.IDMError;
36 import org.opendaylight.aaa.idm.persistence.UserStore;
37 import org.opendaylight.aaa.idm.persistence.StoreException;
38 import org.opendaylight.aaa.idm.IdmLightProxy;
39         
40 @Path("/v1/users")
41 public class UserHandler {
42    private static Logger logger = LoggerFactory.getLogger(UserHandler.class);
43    private static UserStore userStore = new UserStore();
44    protected final static String DEFAULT_PWD = "changeme";
45    
46    @GET
47    @Produces("application/json")
48    public Response getUsers() {
49       logger.info("get all users");
50       Users users=null;
51       try {
52          users = userStore.getUsers();
53       }
54       catch (StoreException se) {
55          return new IDMError(500,"internal error getting users",se.message).response();
56       }
57
58       // obsfucate pwd
59       for (int z=0;z<users.getUsers().size();z++)
60           users.getUsers().get(z).setPassword("**********");
61  
62       return Response.ok(users).build();
63    }
64
65
66    @GET
67    @Path("/{id}")
68    @Produces("application/json")
69    public Response getUser(@PathParam("id") String id)  {
70       logger.info("get /users/" + id);
71       User user=null;
72       long longId=0;
73       try {
74          longId=Long.parseLong(id);
75       }
76       catch (NumberFormatException nfe) {
77          return new IDMError(400,"invalid user id :" + id,"").response();
78       }
79       try {
80          user = userStore.getUser(longId);
81       }
82       catch(StoreException se) {
83          return new IDMError(500,"internal error getting user",se.message).response();
84       }
85       if (user==null) {
86          return new IDMError(404,"user not found! id:" + id,"").response(); 
87       }
88       // obsfucate pwd
89       user.setPassword("*********");
90       return Response.ok(user).build();
91    }
92
93    @POST
94    @Consumes("application/json")
95    @Produces("application/json")
96    public Response createUser(@Context UriInfo info,User user) {
97       logger.info("post /users");
98       try {
99          // enabled by default
100          if (user.getEnabled()==null)
101             user.setEnabled(true);
102          
103          // user name is required
104          if (user.getName()==null)
105             return new IDMError(400,"user name is required","").response();
106          else
107             if (user.getName().length()>UserStore.MAX_FIELD_LEN)
108                return new IDMError(400,"user name max length is :" + UserStore.MAX_FIELD_LEN,"").response();
109
110          // user description is optional
111          if (user.getDescription()==null)
112             user.setDescription("");
113          else
114             if (user.getDescription().length()>UserStore.MAX_FIELD_LEN)
115                return new IDMError(400,"user description max length is :" + UserStore.MAX_FIELD_LEN,"").response();
116
117          // user email is optional
118          if (user.getEmail()==null)
119             user.setEmail("");
120          else
121             if (user.getEmail().length()>UserStore.MAX_FIELD_LEN)
122                return new IDMError(400,"user email max length is :" + UserStore.MAX_FIELD_LEN,"").response();
123
124          // user password optional and will default if not provided
125          if (user.getPassword()==null)
126             user.setPassword(DEFAULT_PWD);
127          else
128             if (user.getPassword().length()>UserStore.MAX_FIELD_LEN)
129                return new IDMError(400,"user password max length is :" + UserStore.MAX_FIELD_LEN,"").response();
130
131          // create user
132          user = userStore.createUser(user);
133       }
134       catch (StoreException se) {
135          return new IDMError(500,"internal error creating user",se.message).response();
136       } 
137
138       // created!
139       return Response.status(201).entity(user).build();
140    } 
141
142
143    @PUT
144    @Path("/{id}")
145    @Consumes("application/json")
146    @Produces("application/json")
147    public Response putUser(@Context UriInfo info,User user,@PathParam("id") String id) {
148       long longId=0;
149       logger.info("put /users/" + id);
150        try {
151          longId= Long.parseLong(id);
152       }
153       catch (NumberFormatException nfe) {
154          return new IDMError(400,"invalid user id:"+id,"").response();
155       }
156
157       try {
158          user.setUserid((int)longId);
159          user = userStore.putUser(user);
160          if (user==null) {
161             return new IDMError(404,"user id not found id :"+id,"").response();
162          }
163          IdmLightProxy.clearClaimCache();
164          return Response.status(200).entity(user).build();
165       }
166       catch (StoreException se) {
167          return new IDMError(500,"internal error putting user",se.message).response();
168       }
169    }
170
171    @DELETE
172    @Path("/{id}")
173    public Response deleteUser(@Context UriInfo info,@PathParam("id") String id) {
174       long longId=0;
175       logger.info("delete /users/" + id);
176        try {
177          longId= Long.parseLong(id);
178       }
179       catch (NumberFormatException nfe) {
180          return new IDMError(400,"invalid user id:"+id,"").response();
181       }
182
183       try {
184          User user = new User();
185          user.setUserid((int)longId);
186          user = userStore.deleteUser(user);
187          if (user==null) {
188             return new IDMError(404,"user id not found id :"+id,"").response();
189          }
190       }
191       catch (StoreException se) {
192          return new IDMError(500,"internal error deleting user",se.message).response();
193       }
194       IdmLightProxy.clearClaimCache();
195       return Response.status(204).build();
196    }
197
198  
199 }