1 19 20 package com.sslexplorer.webforwards; 21 22 import javax.servlet.http.HttpServletRequest ; 23 24 import org.apache.commons.logging.Log; 25 import org.apache.commons.logging.LogFactory; 26 27 import com.sslexplorer.agent.DefaultAgentManager; 28 import com.sslexplorer.boot.ContextHolder; 29 import com.sslexplorer.core.CoreMenuTree; 30 import com.sslexplorer.core.CoreServlet; 31 import com.sslexplorer.core.CoreUtil; 32 import com.sslexplorer.core.MenuItem; 33 import com.sslexplorer.core.PageTaskMenuTree; 34 import com.sslexplorer.extensions.ExtensionException; 35 import com.sslexplorer.extensions.types.DefaultPlugin; 36 import com.sslexplorer.navigation.MenuTree; 37 import com.sslexplorer.navigation.NavigationManager; 38 import com.sslexplorer.policyframework.Permission; 39 import com.sslexplorer.policyframework.PolicyConstants; 40 import com.sslexplorer.policyframework.PolicyDatabase; 41 import com.sslexplorer.policyframework.PolicyDatabaseFactory; 42 import com.sslexplorer.policyframework.PolicyUtil; 43 import com.sslexplorer.policyframework.ResourceType; 44 import com.sslexplorer.policyframework.itemactions.AddToFavoritesAction; 45 import com.sslexplorer.policyframework.itemactions.CloneResourceAction; 46 import com.sslexplorer.policyframework.itemactions.EditResourceAction; 47 import com.sslexplorer.policyframework.itemactions.RemoveFromFavoritesAction; 48 import com.sslexplorer.policyframework.itemactions.RemoveResourceAction; 49 import com.sslexplorer.replacementproxy.ReplacementProxyMethodHandler; 50 import com.sslexplorer.reverseproxy.ReverseProxyMethodHandler; 51 import com.sslexplorer.security.SessionInfo; 52 import com.sslexplorer.table.TableItemActionMenuTree; 53 54 59 public class WebForwardPlugin extends DefaultPlugin { 60 61 64 public final static int WEBFORWARD_RESOURCE_TYPE_ID = 0; 65 66 69 public final static ResourceType WEBFORWARD_RESOURCE_TYPE = new WebForwardResourceType(); 70 71 74 public static final String BUNDLE_ID = "sslexplorer-community-web-forwards"; 75 76 final static Log log = LogFactory.getLog(WebForwardPlugin.class); 77 78 81 public static final String MESSAGE_RESOURCES_KEY = "webForwards"; 82 83 86 public WebForwardPlugin() { 87 super("/WEB-INF/sslexplorer-community-web-forwards-tiles-defs.xml", true); 88 } 89 90 95 public void activatePlugin() throws ExtensionException { 96 super.activatePlugin(); 97 try { 98 initDatabase(); 99 initPolicyFramework(); 100 initTableItemActions(); 101 initMainMenu(); 102 initPageTasks(); 103 initService(); 104 initTagLib(); 105 CoreUtil.updateEventsTable(WebForwardPlugin.MESSAGE_RESOURCES_KEY, WebForwardEventConstants.class); 106 } catch (Exception e) { 107 throw new ExtensionException(ExtensionException.INTERNAL_ERROR, e); 108 } 109 } 110 111 void initDatabase() throws Exception { 112 WebForwardDatabaseFactory.getInstance().open(CoreServlet.getServlet(), this.getPluginDefinition()); 113 } 114 115 void initPolicyFramework() throws Exception { 116 PolicyDatabase pdb = PolicyDatabaseFactory.getInstance(); 117 pdb.registerResourceType(WEBFORWARD_RESOURCE_TYPE); 119 WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN); 120 WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_EDIT_AND_ASSIGN); 121 WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_DELETE); 122 WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_ASSIGN); 123 } 124 125 void initTableItemActions() throws Exception { 126 MenuTree tree = NavigationManager.getMenuTree(TableItemActionMenuTree.MENU_TABLE_ITEM_ACTION_MENU_TREE); 127 tree.addMenuItem(null, new MenuItem("webForward", "webForwards", null, 100, false, SessionInfo.ALL_CONTEXTS)); 129 tree.addMenuItem("webForward", new AddToFavoritesAction("webForwards")); 130 tree.addMenuItem("webForward", new RemoveFromFavoritesAction("webForwards")); 131 tree.addMenuItem("webForward", new RemoveResourceAction(SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, "webForwards")); 132 tree.addMenuItem("webForward", new EditResourceAction(SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, "webForwards")); 133 tree.addMenuItem("webForward", new CloneResourceAction(SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, "webForwards")); 134 } 135 136 void initMainMenu() throws Exception { 137 MenuTree tree = NavigationManager.getMenuTree(CoreMenuTree.MENU_ITEM_MENU_TREE); 138 139 tree.addMenuItem("resources", new MenuItem("userWebForwards", 140 "webForwards", 141 "/showUserWebForwards.do", 142 50, 143 true, 144 null, 145 SessionInfo.USER_CONSOLE_CONTEXT, 146 null, 147 null, 148 WEBFORWARD_RESOURCE_TYPE)); 149 150 tree.addMenuItem("globalResources", new MenuItem("managementWebForwards", 151 "webForwards", 152 "/showWebForwards.do", 153 100, 154 true, 155 null, 156 SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, 157 WEBFORWARD_RESOURCE_TYPE, 158 new Permission[] { PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN, 159 PolicyConstants.PERM_EDIT_AND_ASSIGN, 160 PolicyConstants.PERM_DELETE, 161 PolicyConstants.PERM_ASSIGN }) { 162 public boolean isAvailable(int checkNavigationContext, SessionInfo info, HttpServletRequest request) { 163 boolean available = super.isAvailable(checkNavigationContext, info, request); 164 if (available) { 165 try { 166 PolicyUtil.checkPermissions(WEBFORWARD_RESOURCE_TYPE, 167 new Permission[] { PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN, 168 PolicyConstants.PERM_EDIT_AND_ASSIGN, 169 PolicyConstants.PERM_DELETE, 170 PolicyConstants.PERM_ASSIGN }, 171 request); 172 available = true; 173 } catch (Exception e1) { 174 available = false; 175 } 176 } 177 return available; 178 } 179 }); 180 } 181 182 void initTagLib() { 183 ContextHolder.getContext().setResourceAlias("/sslexplorer/taglibs/webforwards", "/WEB-INF/webforwards.tld"); 184 } 185 186 void initPageTasks() throws Exception { 187 MenuTree tree = NavigationManager.getMenuTree(PageTaskMenuTree.PAGE_TASK_MENU_TREE); 188 tree.addMenuItem(null, new MenuItem("showWebForwards", null, null, 100, false, SessionInfo.MANAGEMENT_CONSOLE_CONTEXT)); 189 Permission[] permissions = new Permission[] { PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN }; 190 MenuItem menuItem = new MenuItem("createWebForward", "webForwards", "/webForwardTypeSelection.do", 100, true, "_self", 191 SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, WEBFORWARD_RESOURCE_TYPE, permissions, null); 192 tree.addMenuItem("showWebForwards", menuItem); 193 tree.addMenuItem("showWebForwards", new MenuItem("replacements", 194 "webForwards", 195 "/showReplacements.do", 196 600, 197 true, 198 null, 199 SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, 200 PolicyConstants.REPLACEMENTS_RESOURCE_TYPE, 201 new Permission[] { PolicyConstants.PERM_CHANGE }, 202 null)); 203 } 204 205 void initService() throws InstantiationException , IllegalAccessException { 206 if (!ContextHolder.getContext().isSetupMode()) { 208 ContextHolder.getContext().registerRequestHandler(new ReverseProxyMethodHandler()); 209 ContextHolder.getContext().registerRequestHandler(new ReplacementProxyMethodHandler()); 210 } 211 DefaultAgentManager.getInstance().registerService(WebForwardService.class); 212 } 213 214 @Override 215 public void stopPlugin() throws ExtensionException { 216 super.stopPlugin(); 217 try { 218 stopDatabase(); 219 stopPolicyFramework(); 220 removeTableItemActions(); 221 removeMainMenu(); 222 removePageTasks(); 223 stopService(); 224 } catch (Exception e) { 225 throw new ExtensionException(ExtensionException.INTERNAL_ERROR, e, "Failed to start."); 226 } 227 } 228 229 private void stopService() { 230 if (!ContextHolder.getContext().isSetupMode()) { 232 ContextHolder.getContext().deregisterRequestHandler(new ReverseProxyMethodHandler()); 233 ContextHolder.getContext().deregisterRequestHandler(new ReplacementProxyMethodHandler()); 234 } 235 } 236 237 private void removePageTasks() { 238 MenuTree tree = NavigationManager.getMenuTree(PageTaskMenuTree.PAGE_TASK_MENU_TREE); 239 tree.removeMenuItem("showWebForwards", "createTunneledWebForward"); 240 tree.removeMenuItem("showWebForwards", "createReplacementWebForward"); 241 tree.removeMenuItem("showWebForwards", "createReverseProxyWebForward"); 242 } 243 244 private void removeMainMenu() { 245 MenuTree tree = NavigationManager.getMenuTree(CoreMenuTree.MENU_ITEM_MENU_TREE); 246 tree.removeMenuItem("resources", "userWebForwards"); 247 tree.removeMenuItem("globalResources", "managementWebForwards"); 248 tree.removeMenuItem("configuration", "replacements"); 249 } 250 251 private void removeTableItemActions() { 252 MenuTree tree = NavigationManager.getMenuTree(TableItemActionMenuTree.MENU_TABLE_ITEM_ACTION_MENU_TREE); 253 tree.removeMenuItem("webForward", AddToFavoritesAction.TABLE_ITEM_ACTION_ID); 254 tree.removeMenuItem("webForward", RemoveFromFavoritesAction.TABLE_ITEM_ACTION_ID); 255 tree.removeMenuItem("webForward", RemoveResourceAction.TABLE_ITEM_ACTION_ID); 256 tree.removeMenuItem("webForward", EditResourceAction.TABLE_ITEM_ACTION_ID); 257 } 258 259 private void stopPolicyFramework() throws Exception { 260 PolicyDatabase pdb = PolicyDatabaseFactory.getInstance(); 261 pdb.deregisterResourceType(WEBFORWARD_RESOURCE_TYPE); 262 } 263 264 private void stopDatabase() throws Exception { 265 WebForwardDatabaseFactory.getInstance().close(); 266 } 267 } | Popular Tags |