| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.felix.http.jetty.internal; |
| |
| import org.osgi.framework.BundleContext; |
| import java.util.Dictionary; |
| import java.util.Properties; |
| |
| public final class JettyConfig |
| { |
| /** Standard OSGi port property for HTTP service */ |
| private static final String HTTP_PORT = "org.osgi.service.http.port"; |
| |
| /** Standard OSGi port property for HTTPS service */ |
| private static final String HTTPS_PORT = "org.osgi.service.http.port.secure"; |
| |
| /** Felix specific property to enable debug messages */ |
| private static final String FELIX_HTTP_DEBUG = "org.apache.felix.http.debug"; |
| private static final String HTTP_DEBUG = "org.apache.felix.http.jetty.debug"; |
| |
| /** Felix specific property to override the keystore file location. */ |
| private static final String FELIX_KEYSTORE = "org.apache.felix.https.keystore"; |
| private static final String OSCAR_KEYSTORE = "org.ungoverned.osgi.bundle.https.keystore"; |
| |
| /** Felix specific property to override the keystore password. */ |
| private static final String FELIX_KEYSTORE_PASSWORD = "org.apache.felix.https.keystore.password"; |
| private static final String OSCAR_KEYSTORE_PASSWORD = "org.ungoverned.osgi.bundle.https.password"; |
| |
| /** Felix specific property to override the keystore key password. */ |
| private static final String FELIX_KEYSTORE_KEY_PASSWORD = "org.apache.felix.https.keystore.key.password"; |
| private static final String OSCAR_KEYSTORE_KEY_PASSWORD = "org.ungoverned.osgi.bundle.https.key.password"; |
| |
| /** Felix specific property to control whether to enable HTTPS. */ |
| private static final String FELIX_HTTPS_ENABLE = "org.apache.felix.https.enable"; |
| private static final String OSCAR_HTTPS_ENABLE = "org.ungoverned.osgi.bundle.https.enable"; |
| |
| /** Felix specific property to control whether to enable HTTP. */ |
| private static final String FELIX_HTTP_ENABLE = "org.apache.felix.http.enable"; |
| |
| /** Felix specific property to override the truststore file location. */ |
| private static final String FELIX_TRUSTSTORE = "org.apache.felix.https.truststore"; |
| |
| /** Felix specific property to override the truststore password. */ |
| private static final String FELIX_TRUSTSTORE_PASSWORD = "org.apache.felix.https.truststore.password"; |
| |
| /** Felix specific property to control whether to want or require HTTPS client certificates. Valid values are "none", "wants", "needs". Default is "none". */ |
| private static final String FELIX_HTTPS_CLIENT_CERT = "org.apache.felix.https.clientcertificate"; |
| |
| private final BundleContext context; |
| private boolean debug; |
| private int httpPort; |
| private int httpsPort; |
| private String keystore; |
| private String password; |
| private String keyPassword; |
| private boolean useHttps; |
| private String truststore; |
| private String trustPassword; |
| private boolean useHttp; |
| private String clientcert; |
| |
| public JettyConfig(BundleContext context) |
| { |
| this.context = context; |
| reset(); |
| } |
| |
| public boolean isDebug() |
| { |
| return this.debug; |
| } |
| |
| public boolean isUseHttp() |
| { |
| return this.useHttp; |
| } |
| |
| public boolean isUseHttps() |
| { |
| return this.useHttps; |
| } |
| |
| public int getHttpPort() |
| { |
| return this.httpPort; |
| } |
| |
| public int getHttpsPort() |
| { |
| return this.httpsPort; |
| } |
| |
| public String getKeystore() |
| { |
| return this.keystore; |
| } |
| |
| public String getPassword() |
| { |
| return this.password; |
| } |
| |
| public String getTruststore() |
| { |
| return this.truststore; |
| } |
| |
| public String getTrustPassword() |
| { |
| return this.trustPassword; |
| } |
| |
| public String getKeyPassword() |
| { |
| return this.keyPassword; |
| } |
| |
| public String getClientcert() |
| { |
| return this.clientcert; |
| } |
| |
| public void reset() |
| { |
| update(null); |
| } |
| |
| public void update(Dictionary props) |
| { |
| if (props == null) { |
| props = new Properties(); |
| } |
| |
| this.debug = getBooleanProperty(props, FELIX_HTTP_DEBUG, getBooleanProperty(props, HTTP_DEBUG, false)); |
| this.httpPort = getIntProperty(props, HTTP_PORT, 8080); |
| this.httpsPort = getIntProperty(props, HTTPS_PORT, 433); |
| this.keystore = getProperty(props, FELIX_KEYSTORE, this.context.getProperty(OSCAR_KEYSTORE)); |
| this.password = getProperty(props, FELIX_KEYSTORE_PASSWORD, this.context.getProperty(OSCAR_KEYSTORE_PASSWORD)); |
| this.keyPassword = getProperty(props, FELIX_KEYSTORE_KEY_PASSWORD, this.context.getProperty(OSCAR_KEYSTORE_KEY_PASSWORD)); |
| this.useHttps = getBooleanProperty(props, FELIX_HTTPS_ENABLE, getBooleanProperty(props, OSCAR_HTTPS_ENABLE, false)); |
| this.useHttp = getBooleanProperty(props, FELIX_HTTP_ENABLE, true); |
| this.truststore = getProperty(props, FELIX_TRUSTSTORE, null); |
| this.trustPassword = getProperty(props, FELIX_TRUSTSTORE_PASSWORD, null); |
| this.clientcert = getProperty(props, FELIX_HTTPS_CLIENT_CERT, "none"); |
| } |
| |
| private String getProperty(Dictionary props, String name, String defValue) |
| { |
| String value = (String)props.get(name); |
| if (value == null) { |
| value = this.context.getProperty(name); |
| } |
| |
| return value != null ? value : defValue; |
| } |
| |
| private boolean getBooleanProperty(Dictionary props, String name, boolean defValue) |
| { |
| String value = getProperty(props, name, null); |
| if (value != null) { |
| return (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")); |
| } |
| |
| return defValue; |
| } |
| |
| private int getIntProperty(Dictionary props, String name, int defValue) |
| { |
| try { |
| return Integer.parseInt(getProperty(props, name, null)); |
| } catch (Exception e) { |
| return defValue; |
| } |
| } |
| } |