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
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 }