View Javadoc
1   package com.atlassian.refapp.auth.internal;
2   
3   import com.atlassian.user.EntityException;
4   import com.atlassian.user.User;
5   import com.atlassian.user.UserManager;
6   import org.apache.velocity.Template;
7   import org.apache.velocity.VelocityContext;
8   import org.apache.velocity.app.Velocity;
9   import org.apache.velocity.app.VelocityEngine;
10  import org.apache.velocity.runtime.log.JdkLogChute;
11  import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
12  
13  import javax.servlet.ServletException;
14  import javax.servlet.http.HttpServlet;
15  import javax.servlet.http.HttpServletRequest;
16  import javax.servlet.http.HttpServletResponse;
17  import java.io.IOException;
18  import java.util.ArrayList;
19  import java.util.Iterator;
20  import java.util.List;
21  
22  public class UsersServlet extends HttpServlet {
23      private final UserManager userManager;
24      private final VelocityEngine velocity;
25  
26      public UsersServlet(UserManager userManager) {
27          this.userManager = userManager;
28          velocity = new VelocityEngine();
29          velocity.addProperty(Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, JdkLogChute.class.getName());
30          velocity.addProperty(Velocity.RESOURCE_LOADER, "classpath");
31          velocity.addProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
32      }
33  
34      private void sendRedirect(HttpServletResponse response, HttpServletRequest request, String path) throws IOException {
35          response.sendRedirect(request.getRequestURL().append(path).toString());
36      }
37  
38      @Override
39      protected void doGet(HttpServletRequest request, HttpServletResponse response)
40              throws ServletException, IOException {
41          try {
42              response.setContentType("text/html");
43              String pathInfo = request.getPathInfo();
44              if (pathInfo == null || pathInfo.length() <= 1) {
45                  final List<User> users = new ArrayList<User>();
46                  Iterator iter = userManager.getUsers().iterator();
47                  while (iter.hasNext()) {
48                      users.add((User) iter.next());
49                  }
50                  render("/users.vm", response, "users", users);
51              } else {
52                  String username = pathInfo.substring(1);
53                  User user = userManager.getUser(username);
54                  render("/profile.vm", response, "user", user);
55              }
56          } catch (EntityException e) {
57              throw new ServletException(e);
58          }
59      }
60  
61      @Override
62      protected void doPost(HttpServletRequest request, HttpServletResponse response)
63              throws ServletException, IOException {
64          try {
65              User user;
66              String pathInfo = request.getPathInfo();
67              if (pathInfo == null || pathInfo.length() <= 1) {
68                  String name = request.getParameter("name");
69                  user = userManager.createUser(name);
70                  updateUser(user, request);
71                  sendRedirect(response, request, "/" + name);
72              } else {
73                  // Supporting PUT with POST because HTML doesn't support PUT
74                  String username = pathInfo.substring(1);
75                  user = userManager.getUser(username);
76                  updateUser(user, request);
77                  sendRedirect(response, request, "");
78              }
79          } catch (EntityException e) {
80              throw new ServletException(e);
81          }
82      }
83  
84      private void updateUser(User user, HttpServletRequest request) throws EntityException {
85          String fullName = request.getParameter("fullName");
86          String password = request.getParameter("password");
87          String email = request.getParameter("email");
88          user.setEmail(email);
89          user.setFullName(fullName);
90          userManager.saveUser(user);
91          userManager.alterPassword(user, password);
92      }
93  
94      @Override
95      protected void doPut(HttpServletRequest request, HttpServletResponse response)
96              throws ServletException, IOException {
97          try {
98              String pathInfo = request.getPathInfo();
99              String username = pathInfo.substring(1);
100             User user = userManager.getUser(username);
101             updateUser(user, request);
102             sendRedirect(response, request, "");
103         } catch (EntityException e) {
104             throw new ServletException(e);
105         }
106     }
107 
108     @Override
109     protected void doDelete(HttpServletRequest request, HttpServletResponse response)
110             throws ServletException, IOException {
111         try {
112             String pathInfo = request.getPathInfo();
113             String username = pathInfo.substring(1);
114             User user = userManager.getUser(username);
115             userManager.removeUser(user);
116             sendRedirect(response, request, "");
117         } catch (EntityException e) {
118             throw new ServletException(e);
119         }
120     }
121 
122     private void render(String templateName, HttpServletResponse response, Object... context)
123             throws ServletException {
124         VelocityContext velocityContext = new VelocityContext();
125         for (int i = 0; i < context.length - 1; i += 2) {
126             velocityContext.put((String) context[i], context[i + 1]);
127         }
128         try {
129             Template template = velocity.getTemplate(templateName);
130             template.merge(velocityContext, response.getWriter());
131         } catch (Exception e) {
132             throw new ServletException(e);
133         }
134 
135     }
136 }