1 17 18 package org.apache.geronimo.console.webmanager; 19 20 import java.io.IOException ; 21 import java.net.URI ; 22 import java.util.ArrayList ; 23 import java.util.HashMap ; 24 import java.util.List ; 25 import java.util.Map ; 26 import javax.portlet.ActionRequest; 27 import javax.portlet.ActionResponse; 28 import javax.portlet.PortletConfig; 29 import javax.portlet.PortletContext; 30 import javax.portlet.PortletException; 31 import javax.portlet.PortletRequestDispatcher; 32 import javax.portlet.RenderRequest; 33 import javax.portlet.RenderResponse; 34 import javax.portlet.WindowState; 35 import org.apache.commons.logging.Log; 36 import org.apache.commons.logging.LogFactory; 37 import org.apache.geronimo.console.BasePortlet; 38 import org.apache.geronimo.console.util.PortletManager; 39 import org.apache.geronimo.gbean.AbstractName; 40 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 41 import org.apache.geronimo.kernel.proxy.GeronimoManagedBean; 42 import org.apache.geronimo.management.geronimo.KeystoreException; 43 import org.apache.geronimo.management.geronimo.KeystoreInstance; 44 import org.apache.geronimo.management.geronimo.KeystoreManager; 45 import org.apache.geronimo.management.geronimo.SecureConnector; 46 import org.apache.geronimo.management.geronimo.WebConnector; 47 import org.apache.geronimo.management.geronimo.WebContainer; 48 import org.apache.geronimo.management.geronimo.WebManager; 49 50 56 public class ConnectorPortlet extends BasePortlet { 57 private final static Log log = LogFactory.getLog(ConnectorPortlet.class); 58 59 private PortletRequestDispatcher normalView; 60 61 private PortletRequestDispatcher maximizedView; 62 63 private PortletRequestDispatcher helpView; 64 65 protected PortletRequestDispatcher editHttpView; 66 protected PortletRequestDispatcher editHttpsView; 67 68 public void processAction(ActionRequest actionRequest, 69 ActionResponse actionResponse) throws PortletException, IOException { 70 String submit = actionRequest.getParameter("submit"); 71 if ("Cancel".equalsIgnoreCase(submit)) { 72 actionResponse.setRenderParameter("mode", "list"); 74 return; 75 } 76 String mode = actionRequest.getParameter("mode"); 77 String managerURI = actionRequest.getParameter("managerURI"); 78 String containerURI = actionRequest.getParameter("containerURI"); 79 if(managerURI != null) actionResponse.setRenderParameter("managerURI", managerURI); 80 if(containerURI != null) actionResponse.setRenderParameter("containerURI", containerURI); 81 82 String server; 83 if(containerURI != null) { 84 WebContainer container = PortletManager.getWebContainer(actionRequest, new AbstractName(URI.create(containerURI))); 85 server = getWebServerType(container.getClass()); 86 } else { 87 server = "unknown"; 88 } 89 actionResponse.setRenderParameter("server", server); 90 if(mode.equals("new")) { 91 actionResponse.setRenderParameter("mode", "new"); 93 String protocol = actionRequest.getParameter("protocol"); 94 String containerDisplayName = actionRequest.getParameter("containerDisplayName"); 95 actionResponse.setRenderParameter("protocol", protocol); 96 actionResponse.setRenderParameter("containerDisplayName", containerDisplayName); 97 } else if(mode.equals("add")) { String protocol = actionRequest.getParameter("protocol"); 101 String host = actionRequest.getParameter("host"); 102 int port = Integer.parseInt(actionRequest.getParameter("port")); 103 int maxThreads = Integer.parseInt(actionRequest.getParameter("maxThreads")); 104 Integer minThreads = getInteger(actionRequest, "minThreads"); 105 String displayName = actionRequest.getParameter("displayName"); 106 WebConnector connector = PortletManager.createWebConnector(actionRequest, new AbstractName(URI.create(managerURI)), new AbstractName(URI.create(containerURI)), displayName, protocol, host, port); 108 connector.setMaxThreads(maxThreads); 109 if(server.equals(WEB_SERVER_JETTY)) { 111 if(minThreads != null) { 112 setProperty(connector, "minThreads", minThreads); 113 } 114 } else if (server.equals(WEB_SERVER_TOMCAT)) { 115 } else { 117 } 119 if(protocol.equals(WebManager.PROTOCOL_HTTPS)) { 120 String keystoreType = actionRequest.getParameter("keystoreType"); 121 String keystoreFile = actionRequest.getParameter("keystoreFile"); 122 String privateKeyPass = actionRequest.getParameter("privateKeyPassword"); 123 String keystorePass = actionRequest.getParameter("keystorePassword"); 124 String secureProtocol = actionRequest.getParameter("secureProtocol"); 125 String algorithm = actionRequest.getParameter("algorithm"); 126 String truststoreType = actionRequest.getParameter("truststoreType"); 127 String truststoreFile = actionRequest.getParameter("truststoreFile"); 128 String truststorePass = actionRequest.getParameter("truststorePassword"); 129 boolean clientAuth = isValid(actionRequest.getParameter("clientAuth")); 130 SecureConnector secure = (SecureConnector) connector; 131 if(isValid(keystoreType)) {secure.setKeystoreType(keystoreType);} 132 if(isValid(keystoreFile)) {secure.setKeystoreFileName(keystoreFile);} 133 if(isValid(keystorePass)) {secure.setKeystorePassword(keystorePass);} 134 if(isValid(secureProtocol)) {secure.setSecureProtocol(secureProtocol);} 135 if(isValid(algorithm)) {secure.setAlgorithm(algorithm);} 136 secure.setClientAuthRequired(clientAuth); 137 if(server.equals(WEB_SERVER_JETTY)) { 138 if(isValid(privateKeyPass)) {setProperty(secure, "keyPassword", privateKeyPass);} 139 String keyStore = actionRequest.getParameter("unlockKeyStore"); 140 setProperty(secure, "keyStore", keyStore); 141 try { 142 KeystoreInstance[] keystores = PortletManager.getCurrentServer(actionRequest).getKeystoreManager().getKeystores(); 143 144 String [] keys = null; 145 for (int i = 0; i < keystores.length; i++) { 146 KeystoreInstance keystore = keystores[i]; 147 if(keystore.getKeystoreName().equals(keyStore)) { 148 keys = keystore.getUnlockedKeys(null); 149 } 150 } 151 if(keys != null && keys.length == 1) { 152 setProperty(secure, "keyAlias", keys[0]); 153 } else { 154 throw new PortletException("Cannot handle keystores with anything but 1 unlocked private key"); 155 } 156 } catch (KeystoreException e) { 157 throw new PortletException(e); 158 } 159 String trustStore = actionRequest.getParameter("unlockTrustStore"); 160 setProperty(secure, "trustStore", isValid(trustStore) ? trustStore : null); 162 } else if (server.equals(WEB_SERVER_TOMCAT)) { 163 if(isValid(truststoreType)) {setProperty(secure, "truststoreType", truststoreType);} 164 if(isValid(truststoreFile)) {setProperty(secure, "truststoreFileName", truststoreFile);} 165 if(isValid(truststorePass)) {setProperty(secure, "truststorePassword", truststorePass);} 166 } else { 167 } 169 } 170 try { 172 ((GeronimoManagedBean)connector).startRecursive(); 173 } catch (Exception e) { 174 log.error("Unable to start connector", e); } 176 actionResponse.setRenderParameter("mode", "list"); 177 } else if(mode.equals("save")) { String host = actionRequest.getParameter("host"); 181 int port = Integer.parseInt(actionRequest.getParameter("port")); 182 int maxThreads = Integer.parseInt(actionRequest.getParameter("maxThreads")); 183 Integer minThreads = getInteger(actionRequest, "minThreads"); 184 String connectorURI = actionRequest.getParameter("connectorURI"); 185 WebConnector connector = PortletManager.getWebConnector(actionRequest, new AbstractName(URI.create(connectorURI))); 187 if(connector != null) { 188 connector.setHost(host); 189 connector.setPort(port); 190 connector.setMaxThreads(maxThreads); 191 if(server.equals(WEB_SERVER_JETTY)) { 192 if(minThreads != null) { 193 setProperty(connector,"minThreads",minThreads); 194 } 195 else if (server.equals(WEB_SERVER_TOMCAT)) { 196 } 198 else { 199 } 201 } 202 if(connector instanceof SecureConnector) { 203 String keystoreType = actionRequest.getParameter("keystoreType"); 204 String keystoreFile = actionRequest.getParameter("keystoreFile"); 205 String privateKeyPass = actionRequest.getParameter("privateKeyPassword"); 206 String keystorePass = actionRequest.getParameter("keystorePassword"); 207 String secureProtocol = actionRequest.getParameter("secureProtocol"); 208 String algorithm = actionRequest.getParameter("algorithm"); 209 String truststoreType = actionRequest.getParameter("truststoreType"); 210 String truststoreFile = actionRequest.getParameter("truststoreFile"); 211 String truststorePass = actionRequest.getParameter("truststorePassword"); 212 boolean clientAuth = isValid(actionRequest.getParameter("clientAuth")); 213 SecureConnector secure = (SecureConnector) connector; 214 if(isValid(keystoreType)) {secure.setKeystoreType(keystoreType);} 215 if(isValid(keystoreFile)) {secure.setKeystoreFileName(keystoreFile);} 216 if(isValid(keystorePass)) {secure.setKeystorePassword(keystorePass);} 217 if(isValid(secureProtocol)) {secure.setSecureProtocol(secureProtocol);} 218 if(isValid(algorithm)) {secure.setAlgorithm(algorithm);} 219 secure.setClientAuthRequired(clientAuth); 220 if(server.equals(WEB_SERVER_JETTY)) { 221 if(isValid(privateKeyPass)) {setProperty(secure, "keyPassword", privateKeyPass);} 222 String keyStore = actionRequest.getParameter("unlockKeyStore"); 223 String trustStore = actionRequest.getParameter("unlockTrustStore"); 224 setProperty(secure, "keyStore", keyStore); 225 try { 226 KeystoreInstance[] keystores = PortletManager.getCurrentServer(actionRequest).getKeystoreManager().getKeystores(); 227 228 String [] keys = null; 229 for (int i = 0; i < keystores.length; i++) { 230 KeystoreInstance keystore = keystores[i]; 231 if(keystore.getKeystoreName().equals(keyStore)) { 232 keys = keystore.getUnlockedKeys(null); 233 } 234 } 235 if(keys != null && keys.length == 1) { 236 setProperty(secure, "keyAlias", keys[0]); 237 } else { 238 throw new PortletException("Cannot handle keystores with anything but 1 unlocked private key"); 239 } 240 } catch (KeystoreException e) { 241 throw new PortletException(e); 242 } 243 setProperty(secure, "trustStore", isValid(trustStore) ? trustStore : null); 245 } 246 else if (server.equals(WEB_SERVER_TOMCAT)) { 247 if(isValid(truststoreType)) {setProperty(secure, "truststoreType", truststoreType);} 248 if(isValid(truststorePass)) {setProperty(secure, "truststorePassword", truststorePass);} 249 if(isValid(truststoreFile)) {setProperty(secure, "truststoreFileName", truststoreFile);} 250 } 251 else { 252 } 254 } 255 } 256 actionResponse.setRenderParameter("mode", "list"); 257 } else if(mode.equals("start")) { 258 String connectorURI = actionRequest.getParameter("connectorURI"); 259 WebConnector connector = PortletManager.getWebConnector(actionRequest, new AbstractName(URI.create(connectorURI))); 261 if(connector != null) { 262 try { 263 ((GeronimoManagedBean)connector).startRecursive(); 264 } catch (Exception e) { 265 log.error("Unable to start connector", e); } 267 } 268 else { 269 log.error("Incorrect connector reference"); } 271 actionResponse.setRenderParameter("connectorURI", connectorURI); 272 actionResponse.setRenderParameter("mode", "list"); 273 } else if(mode.equals("stop")) { 274 String connectorURI = actionRequest.getParameter("connectorURI"); 275 WebConnector connector = PortletManager.getWebConnector(actionRequest, new AbstractName(URI.create(connectorURI))); 277 if(connector != null) { 278 try { 279 ((GeronimoManagedBean)connector).stop(); 280 } catch (Exception e) { 281 log.error("Unable to stop connector", e); } 283 } 284 else { 285 log.error("Incorrect connector reference"); } 287 actionResponse.setRenderParameter("connectorURI", connectorURI); 288 actionResponse.setRenderParameter("mode", "list"); 289 } else if(mode.equals("edit")) { 290 String connectorURI = actionRequest.getParameter("connectorURI"); 291 actionResponse.setRenderParameter("connectorURI", connectorURI); 292 actionResponse.setRenderParameter("mode", "edit"); 293 294 } else if(mode.equals("delete")) { String connectorURI = actionRequest.getParameter("connectorURI"); 296 PortletManager.getWebManager(actionRequest, new AbstractName(URI.create(managerURI))).removeConnector(new AbstractName(URI.create(connectorURI))); 297 actionResponse.setRenderParameter("mode", "list"); 298 } 299 } 300 301 private Integer getInteger(ActionRequest actionRequest, String key) { 302 String value = actionRequest.getParameter(key); 303 if(value == null || value.equals("")) { 304 return null; 305 } 306 return new Integer (value); 307 } 308 309 protected void doView(RenderRequest renderRequest, 310 RenderResponse renderResponse) throws IOException , PortletException { 311 if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) { 312 return; 313 } 314 String mode = renderRequest.getParameter("mode"); 315 if(mode == null || mode.equals("")) { 316 mode = "list"; 317 } 318 319 320 if(mode.equals("list")) { 321 doList(renderRequest, renderResponse); 322 } else { 323 String managerURI = renderRequest.getParameter("managerURI"); 324 String containerURI = renderRequest.getParameter("containerURI"); 325 if(managerURI != null) renderRequest.setAttribute("managerURI", managerURI); 326 if(containerURI != null) renderRequest.setAttribute("containerURI", containerURI); 327 328 WebContainer container = PortletManager.getWebContainer(renderRequest, new AbstractName(URI.create(containerURI))); 329 String server = getWebServerType(container.getClass()); 330 renderRequest.setAttribute("server", server); 331 332 if(mode.equals("new")) { 333 String protocol = renderRequest.getParameter("protocol"); 334 String containerDisplayName = renderRequest.getParameter("containerDisplayName"); 335 renderRequest.setAttribute("maxThreads", "50"); 336 if(server.equals(WEB_SERVER_JETTY)) { 337 renderRequest.setAttribute("minThreads", "10"); 338 KeystoreManager mgr = PortletManager.getCurrentServer(renderRequest).getKeystoreManager(); 339 KeystoreInstance[] stores = mgr.getUnlockedKeyStores(); 340 String [] storeNames = new String [stores.length]; 341 for (int i = 0; i < storeNames.length; i++) { 342 storeNames[i] = stores[i].getKeystoreName(); 343 } 344 renderRequest.setAttribute("keyStores", storeNames); 345 KeystoreInstance[] trusts = mgr.getUnlockedTrustStores(); 346 String [] trustNames = new String [trusts.length]; 347 for (int i = 0; i < trustNames.length; i++) { 348 trustNames[i] = trusts[i].getKeystoreName(); 349 } 350 renderRequest.setAttribute("trustStores", trustNames); 351 Map aliases = new HashMap (); 352 for (int i = 0; i < stores.length; i++) { 353 try { 354 aliases.put(stores[i].getKeystoreName(), stores[i].getUnlockedKeys(null)); 355 } catch (KeystoreException e) {} 356 } 357 renderRequest.setAttribute("unlockedKeys", aliases); 358 } 359 else if (server.equals(WEB_SERVER_TOMCAT)) { 360 } 362 else { 363 } 365 renderRequest.setAttribute("protocol", protocol); 366 renderRequest.setAttribute("mode", "add"); 367 renderRequest.setAttribute("containerDisplayName", containerDisplayName); 368 if(protocol.equals(WebManager.PROTOCOL_HTTPS)) { 369 editHttpsView.include(renderRequest, renderResponse); 370 } else { 371 editHttpView.include(renderRequest, renderResponse); 372 } 373 374 } else if(mode.equals("edit")) { 375 String connectorURI = renderRequest.getParameter("connectorURI"); 376 WebConnector connector = PortletManager.getWebConnector(renderRequest, new AbstractName(URI.create(connectorURI))); 377 if(connector == null) { 378 doList(renderRequest, renderResponse); 379 } else { 380 String displayName = new AbstractName(URI.create(connectorURI)).getName().get("name").toString(); 381 renderRequest.setAttribute("displayName", displayName); 382 renderRequest.setAttribute("connectorURI", connectorURI); 383 renderRequest.setAttribute("port", new Integer (connector.getPort())); 384 renderRequest.setAttribute("host", connector.getHost()); 385 int maxThreads = connector.getMaxThreads(); 386 renderRequest.setAttribute("maxThreads", Integer.toString(maxThreads)); 387 if(server.equals(WEB_SERVER_JETTY)) { 388 int minThreads = ((Number )getProperty(connector, "minThreads")).intValue(); 389 renderRequest.setAttribute("minThreads", String.valueOf(minThreads)); 390 KeystoreManager mgr = PortletManager.getCurrentServer(renderRequest).getKeystoreManager(); 391 KeystoreInstance[] stores = mgr.getUnlockedKeyStores(); 392 String [] storeNames = new String [stores.length]; 393 for (int i = 0; i < storeNames.length; i++) { 394 storeNames[i] = stores[i].getKeystoreName(); 395 } 396 renderRequest.setAttribute("keyStores", storeNames); 397 KeystoreInstance[] trusts = mgr.getUnlockedTrustStores(); 398 String [] trustNames = new String [trusts.length]; 399 for (int i = 0; i < trustNames.length; i++) { 400 trustNames[i] = trusts[i].getKeystoreName(); 401 } 402 renderRequest.setAttribute("trustStores", trustNames); 403 Map aliases = new HashMap (); 404 for (int i = 0; i < stores.length; i++) { 405 try { 406 aliases.put(stores[i].getKeystoreName(), stores[i].getUnlockedKeys(null)); 407 } catch (KeystoreException e) {} 408 } 409 renderRequest.setAttribute("unlockedKeys", aliases); 410 } 411 else if (server.equals(WEB_SERVER_TOMCAT)) { 412 } 414 else { 415 } 417 renderRequest.setAttribute("mode", "save"); 418 419 if(connector instanceof SecureConnector) { 420 SecureConnector secure = (SecureConnector) connector; 421 renderRequest.setAttribute("keystoreFile",secure.getKeystoreFileName()); 422 renderRequest.setAttribute("keystoreType",secure.getKeystoreType()); 423 renderRequest.setAttribute("algorithm",secure.getAlgorithm()); 424 renderRequest.setAttribute("secureProtocol",secure.getSecureProtocol()); 425 if(secure.isClientAuthRequired()) { 426 renderRequest.setAttribute("clientAuth", Boolean.TRUE); 427 } 428 if(server.equals(WEB_SERVER_JETTY)) { 429 String keyStore = (String )getProperty(secure, "keyStore"); 430 String trustStore = (String )getProperty(secure, "trustStore"); 431 renderRequest.setAttribute("unlockKeyStore", keyStore); 432 renderRequest.setAttribute("unlockTrustStore", trustStore); 433 } else if(server.equals(WEB_SERVER_TOMCAT)) { 434 String truststoreFile = (String )getProperty(secure, "truststoreFileName"); 435 String truststoreType = (String )getProperty(secure, "truststoreType"); 436 renderRequest.setAttribute("truststoreFile", truststoreFile); 437 renderRequest.setAttribute("truststoreType", truststoreType); 438 } 439 } 440 441 if(connector.getProtocol().equals(WebManager.PROTOCOL_HTTPS)) { 442 editHttpsView.include(renderRequest, renderResponse); 443 } else { 444 editHttpView.include(renderRequest, renderResponse); 445 } 446 } 447 } 448 } 449 450 } 451 452 private void doList(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException { 453 WebManager[] managers = PortletManager.getWebManagers(renderRequest); 454 List all = new ArrayList (); 455 for (int i = 0; i < managers.length; i++) { 456 WebManager manager = managers[i]; 457 AbstractName webManagerName = PortletManager.getNameFor(renderRequest, manager); 458 459 WebContainer[] containers = (WebContainer[]) manager.getContainers(); 460 for (int j = 0; j < containers.length; j++) { 461 List beans = new ArrayList (); 462 WebContainer container = containers[j]; 463 AbstractName containerName = PortletManager.getNameFor(renderRequest, container); 464 String id; 465 if(containers.length == 1) { 466 id = manager.getProductName(); 467 } else { 468 id = manager.getProductName() + " (" + containerName.getName().get(NameFactory.J2EE_NAME) + ")"; 469 } 470 ContainerInfo result = new ContainerInfo(id, webManagerName.toString(), containerName.toString()); 471 472 WebConnector[] connectors = (WebConnector[]) manager.getConnectorsForContainer(container); 473 for (int k = 0; k < connectors.length; k++) { 474 WebConnector connector = connectors[k]; 475 ConnectorInfo info = new ConnectorInfo(); 476 AbstractName connectorName = PortletManager.getNameFor(renderRequest, connector); 477 info.setConnectorURI(connectorName.toString()); 478 info.setDescription(PortletManager.getGBeanDescription(renderRequest, connectorName)); 479 info.setDisplayName((String )connectorName.getName().get(NameFactory.J2EE_NAME)); 480 info.setState(((GeronimoManagedBean)connector).getState()); 481 info.setPort(connector.getPort()); 482 try { 483 info.setProtocol(connector.getProtocol()); 484 } catch (IllegalStateException e) { 485 info.setProtocol("unknown"); 486 } 487 beans.add(info); 488 } 489 result.setConnectors(beans); 490 result.setProtocols(manager.getSupportedProtocols()); 491 all.add(result); 492 } 493 } 494 renderRequest.setAttribute("containers", all); 495 renderRequest.setAttribute("serverPort", new Integer (renderRequest.getServerPort())); 496 497 if (WindowState.NORMAL.equals(renderRequest.getWindowState())) { 498 normalView.include(renderRequest, renderResponse); 499 } else { 500 maximizedView.include(renderRequest, renderResponse); 501 } 502 } 503 504 public final static class ContainerInfo { 505 private String name; 506 private String managerURI; 507 private String containerURI; 508 private String [] protocols; 509 private List connectors; 510 511 public ContainerInfo(String name, String managerURI, String containerURI) { 512 this.name = name; 513 this.managerURI = managerURI; 514 this.containerURI = containerURI; 515 } 516 517 public String getName() { 518 return name; 519 } 520 521 public String [] getProtocols() { 522 return protocols; 523 } 524 525 public void setProtocols(String [] protocols) { 526 this.protocols = protocols; 527 } 528 529 public List getConnectors() { 530 return connectors; 531 } 532 533 public void setConnectors(List connectors) { 534 this.connectors = connectors; 535 } 536 537 public String getManagerURI() { 538 return managerURI; 539 } 540 541 public String getContainerURI() { 542 return containerURI; 543 } 544 } 545 546 protected void doHelp(RenderRequest renderRequest, 547 RenderResponse renderResponse) throws PortletException, IOException { 548 helpView.include(renderRequest, renderResponse); 549 } 550 551 public void init(PortletConfig portletConfig) throws PortletException { 552 super.init(portletConfig); 553 PortletContext pc = portletConfig.getPortletContext(); 554 normalView = pc.getRequestDispatcher("/WEB-INF/view/webmanager/connector/normal.jsp"); 555 maximizedView = pc.getRequestDispatcher("/WEB-INF/view/webmanager/connector/maximized.jsp"); 556 helpView = pc.getRequestDispatcher("/WEB-INF/view/webmanager/connector/help.jsp"); 557 editHttpView = pc.getRequestDispatcher("/WEB-INF/view/webmanager/connector/editHTTP.jsp"); 558 editHttpsView = pc.getRequestDispatcher("/WEB-INF/view/webmanager/connector/editHTTPS.jsp"); 559 } 560 561 public void destroy() { 562 normalView = null; 563 maximizedView = null; 564 helpView = null; 565 editHttpsView = null; 566 editHttpView = null; 567 super.destroy(); 568 } 569 570 public static boolean isValid(String s) { 571 return s != null && !s.equals(""); 572 } 573 574 } 575 | Popular Tags |