package com.pugh.sockso.web;
import com.pugh.sockso.Options;
import com.pugh.sockso.Properties;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import java.io.IOException;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import joptsimple.OptionSet;
/**
* extends the main HttpServer class to add HTTPS support
*
*/
@Singleton
public class HttpsServer extends HttpServer {
private String sslKeystore = "ssl/keystore",
sslKeystorePassword = "sockso123";
/**
* Creates a new instance of Server. If the ip address given is null,
* then the server will try and work it out for itself.
*
* @param port
* @param dispatcher
* @param db the database to use
* @param p app properties
* @param r
*
*/
@Inject
public HttpsServer( final Properties p, final Injector injector ) {
super( injector, p );
}
/**
* returns a standard server socket
*
* @param port
*
* @return
*
* @throws java.io.IOException
*
*/
@Override
protected SSLServerSocket getServerSocket( final int port ) throws IOException {
System.setProperty( "javax.net.ssl.keyStore", sslKeystore );
System.setProperty( "javax.net.ssl.keyStorePassword", sslKeystorePassword );
SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket ss = (SSLServerSocket) sslserversocketfactory.createServerSocket( port );
return ss;
}
@Override
public void start( final OptionSet options, final int port ) {
if ( options.has(Options.OPT_SSL_KEYSTORE) )
sslKeystore = options.valueOf( Options.OPT_SSL_KEYSTORE ).toString();
if ( options.has(Options.OPT_SSL_PASSWORD) )
sslKeystorePassword = options.valueOf( Options.OPT_SSL_PASSWORD ).toString();
// then call parent method to start server
super.start( options, port );
}
@Override
public String getProtocol() {
return "https";
}
}