package org.madore.damlengine; import java.util.Properties; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import org.postgresql.Driver; public final class WeblogDatabaseConnection { private WeblogDatabaseConnection() { // Forbid instantiation throw new AssertionError("WeblogDatabaseConnection cannot be instantiated"); } public static Connection conn; public static Connection getConnection() throws SQLException { if ( conn == null ) { String dbHost = System.getenv("PGHOST"); if ( dbHost == null ) dbHost = "localhost"; String dbPort = System.getenv("PGPORT"); if ( dbPort == null ) dbPort = "5432"; String dbName = "weblog"; String dbUser = System.getenv("PGUSER"); if ( dbUser == null ) dbUser = System.getenv("USER"); if ( dbUser == null ) dbUser = System.getProperty("user.name"); if ( dbUser == null ) dbUser = dbName; String dbPass = System.getenv("PGPASSWORD"); if ( dbPass == null ) try { String dbPassFile = System.getenv("PGPASSFILE"); if ( dbPassFile == null ) dbPassFile = System.getProperty("user.home") + "/.pgpass"; BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream(dbPassFile))); String line; while ( ( line = buf.readLine() ) != null ) { String[] elts = line.split(":"); if ( elts.length == 5 && ( elts[0].equals("*") || elts[0].equals(dbHost) ) && ( elts[1].equals("*") || elts[1].equals(dbPort) ) && ( elts[2].equals("*") || elts[2].equals(dbName) ) && ( elts[3].equals("*") || elts[3].equals(dbUser) ) ) { dbPass = elts[4]; break; } } } catch (IOException e) { // Ignore } if ( dbPass == null ) dbPass = ""; final String dbUrl = "jdbc:postgresql://"+dbHost+":"+dbPort+"/"+dbName; final Properties dbProps = new Properties(); dbProps.setProperty("user", dbUser); dbProps.setProperty("password", dbPass); dbProps.setProperty("ssl", "true"); dbProps.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory"); conn = (new Driver()).connect(dbUrl, dbProps); conn.createStatement().execute("SET TIME ZONE 0"); } return conn; } }