View Javadoc
1   package com.atlassian.refapp.charlie;
2   
3   import com.atlassian.plugin.web.WebInterfaceManager;
4   import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
5   import com.atlassian.sal.api.websudo.WebSudoManager;
6   import com.atlassian.sal.api.websudo.WebSudoSessionException;
7   import com.atlassian.templaterenderer.TemplateRenderer;
8   
9   import javax.servlet.ServletException;
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  import java.io.IOException;
13  import java.util.HashMap;
14  import java.util.List;
15  import java.util.Map;
16  
17  import static com.google.common.base.Preconditions.checkNotNull;
18  
19  public class CharlieAdminServlet extends CharlieServlet {
20  
21      private final WebSudoManager webSudoManager;
22  
23      public CharlieAdminServlet(PluginSettingsFactory pluginSettingsFactory, TemplateRenderer templateRenderer,
24                                 WebInterfaceManager webInterfaceManager, final WebSudoManager webSudoManager,
25                                 CharlieStore store) {
26          super(pluginSettingsFactory, templateRenderer, webInterfaceManager, store);
27          this.webSudoManager = checkNotNull(webSudoManager);
28      }
29  
30      @Override
31      protected void doGet(HttpServletRequest request, HttpServletResponse response)
32              throws ServletException, IOException {
33          try {
34              webSudoManager.willExecuteWebSudoRequest(request);
35  
36              final Map<String, Object> context = new HashMap<String, Object>();
37              final String delete = request.getParameter("delete");
38              if (delete == null) {
39                  final Map<String, String> charlies = new HashMap<String, String>();
40                  for (String charlie : store.getCharlies()) {
41                      charlies.put(charlie, store.getCharlieName(charlie));
42                  }
43                  context.put("charlies", charlies);
44                  render("/templates/charliesadmin.vm", context, response);
45              } else {
46                  final List<String> charlies = store.getCharlies();
47                  charlies.remove(delete);
48                  store.storeCharlies(charlies);
49                  response.sendRedirect(request.getRequestURL().toString());
50              }
51          } catch (WebSudoSessionException wse) {
52              webSudoManager.enforceWebSudoProtection(request, response);
53          }
54      }
55  
56      @Override
57      protected void doPost(HttpServletRequest request, HttpServletResponse response)
58              throws ServletException, IOException {
59          try {
60              webSudoManager.willExecuteWebSudoRequest(request);
61  
62              final String key = request.getParameter("key");
63              final String name = request.getParameter("name");
64              final List<String> charlies = store.getCharlies();
65              charlies.add(key);
66              store.storeCharlies(charlies);
67              store.setCharlieName(key, name);
68              response.sendRedirect(request.getRequestURL().toString());
69          } catch (WebSudoSessionException wse) {
70              // Instead of enforcing WebSudo protection this could log an error or throw an exception...
71              webSudoManager.enforceWebSudoProtection(request, response);
72          }
73      }
74  }