package net.curisit.securis.ioc; import java.io.File; import java.net.URI; import java.text.MessageFormat; import java.util.Arrays; import java.util.List; import java.util.Properties; import javax.inject.Named; import javax.inject.Singleton; import javax.sql.DataSource; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilderException; import org.h2.jdbcx.JdbcDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.AbstractModule; import com.google.inject.Provides; public class SecurisModule extends AbstractModule { private static final int DEFAULT_PORT = 9997; private static final String PROPERTIES_FILE_NAME = "/server.properties"; private static final Logger log = LoggerFactory.getLogger(SecurisModule.class); @Override protected void configure() { } public String getPassword() { return getFilePassword() + " " + "53curi5"; } public String getFilePassword() { return "cur151T"; } public String getUrl(File appDir) { return String.format("jdbc:h2:%s/db/securis;CIPHER=AES", appDir.getAbsolutePath()); } @Named("base-uri") @Provides @Singleton public URI getBaseURI() { // TODO Read from configuration, where? try { // String url = MessageFormat.format("http://{0}/", InetAddress.getLocalHost().getHostAddress()); String url = MessageFormat.format("http://{0}/", "0.0.0.0"); log.debug("Server url{}", url); return UriBuilder.fromUri(url).port(getPort()).build(); } catch (IllegalArgumentException | UriBuilderException e) { return UriBuilder.fromUri("http://localhost/").port(getPort()).build(); } } private int getPort() { Integer port; Properties prop = new Properties(); try { prop.load(getClass().getResourceAsStream(PROPERTIES_FILE_NAME)); port = Integer.valueOf(prop.getProperty("port")); if (port == null) return DEFAULT_PORT; else return port; } catch (Exception ex) { return DEFAULT_PORT; } } protected List getAppDbFiles() { return Arrays.asList("/db/schema.sql"); } @Named("temporary-dir") @Provides @Singleton public File getTemporaryDir() { String tmp = getAppDir().getAbsolutePath(); tmp += File.separator + ".TEMP"; File ftmp = new File(tmp); if (!ftmp.exists()) { if (!ftmp.mkdirs()) return null; log.debug("Created temporary directory for app in: {}", ftmp.getAbsolutePath()); ftmp.deleteOnExit(); } return ftmp; } @Named("app-dir") @Provides @Singleton public File getAppDir() { String appDir = System.getProperty("user.home", System.getProperty("user.dir")); if (appDir == null) { appDir = "."; } appDir += File.separator + ".SeCuris"; File fAppDir = new File(appDir); if (!fAppDir.exists()) { if (!fAppDir.mkdirs()) return null; log.debug("Created app working directory app in: {}", fAppDir.getAbsolutePath()); } return fAppDir; } @Named("support-email") @Provides @Singleton public String getSupportEmail() { return "integrity@curistec.com"; } @Named("hash-logo") @Provides @Singleton public String getHashLogo() { return "1b42616809d4cd8ccf109e3c30d0ab25067f160b30b7354a08ddd563de0096ba"; } @Named("license-req-file-name") @Provides @Singleton public String getLicenseReqFileName() { return "license.req"; } @Named("license-file-name") @Provides @Singleton public String getLicenseFileName() { return "license.lic"; } @Provides @Singleton public DataSource getDataSource(@Named("app-dir") File appDir) { JdbcDataSource dataSource = new JdbcDataSource(); dataSource.setURL(getUrl(appDir)); dataSource.setUser("curis"); dataSource.setPassword(getPassword()); log.debug("JdbcDataSource: {}", dataSource); return dataSource; } @Named("db-files") @Provides @Singleton public List getDbFiles() { return getAppDbFiles(); } }