protected static ConnectionFactory getConnectionFactory( IDatabaseConnection databaseConnection, String url ) { Properties props = new Properties(); props.put( "user", StringEscapeUtils.unescapeHtml( databaseConnection.getUsername() ) ); props.put( "password", StringEscapeUtils.unescapeHtml( databaseConnection.getPassword() ) ); if ( url.startsWith( "jdbc:mysql:" ) || ( url.startsWith( "jdbc:mariadb:" ) ) ) { props.put( "connectTimeout", "5000" ); } return new DriverManagerConnectionFactory( url, props ); }
public static String getConnectionPassword( String connectionName, String password ) throws ConnectionServiceException { try { IDatabaseConnection datasource = datasourceMgmtSvc.getDatasourceByName( connectionName ); if ( datasource != null && !hasPasswordChanged( password ) ) { return datasource.getPassword(); } else { return password; } } catch ( Exception e ) { logger.error( Messages.getErrorString( "ConnectionServiceHelper.ERROR_0001_UNABLE_TO_GET_CONNECTION_PASSWORD", //$NON-NLS-1$ connectionName, e.getLocalizedMessage() ) ); throw new ConnectionServiceException( Messages.getErrorString( "ConnectionServiceHelper.ERROR_0001_UNABLE_TO_GET_CONNECTION_PASSWORD", connectionName, e.getLocalizedMessage() ), e ); //$NON-NLS-1$ } }
/** * If password is empty, that means connection sent from UI and user didn't change password. Since we cleaned password * during sending to UI, we need to use stored password. */ private void applySavedPassword( IDatabaseConnection conn ) throws ConnectionServiceException { if ( StringUtils.isBlank( conn.getPassword() ) ) { IDatabaseConnection savedConn; if ( conn.getId() != null ) { savedConn = connectionService.getConnectionById( conn.getId() ); } else { try { savedConn = connectionService.getConnectionByName( conn.getName() ); } catch ( ConnectionServiceException e ) { logger.warn( e.getMessage() ); savedConn = null; } } // The connection might not be in the database because this may be a new // hive connection that doesn't require a password if ( savedConn != null ) { conn.setPassword( savedConn.getPassword() ); } } }
/** * If password is empty, that means client didn't change password. * Since we cleaned password during sending to client, we need to use stored password. * @throws ConnectionServiceException if unable to get connection */ private void applySavedPassword( IDatabaseConnection conn ) throws ConnectionServiceException { if ( StringUtils.isBlank( conn.getPassword() ) ) { IDatabaseConnection savedConn; if ( conn.getId() != null ) { savedConn = service.getConnectionById( conn.getId() ); } else { try { savedConn = service.getConnectionByName( conn.getName() ); } catch ( ConnectionServiceException e ) { logger.warn( e.getMessage() ); savedConn = null; } } // The connection might not be in the database because this may be a new // hive connection that doesn't require a password if ( savedConn != null ) { conn.setPassword( savedConn.getPassword() ); } } }
@Test public void testConnectionFactory_MySQL() { IDatabaseConnection connection = mock( IDatabaseConnection.class ); doReturn( StringEscapeUtils.escapeHtml( user ) ).when( connection ).getUsername(); doReturn( StringEscapeUtils.escapeHtml( password ) ).when( connection ).getPassword(); ConnectionFactory factory = PooledDatasourceHelper.getConnectionFactory( connection, "jdbc:mysql://localhost" ); Properties props = (Properties) Whitebox.getInternalState( factory, "_props" ); assertEquals( user, props.getProperty( "user" ) ); assertEquals( password, props.getProperty( "password" ) ); }
@Test public void testConnectionFactory_MicrosoftSQL() { IDatabaseConnection connection = mock( IDatabaseConnection.class ); doReturn( StringEscapeUtils.escapeHtml( user ) ).when( connection ).getUsername(); doReturn( StringEscapeUtils.escapeHtml( password ) ).when( connection ).getPassword(); ConnectionFactory factory = PooledDatasourceHelper.getConnectionFactory( connection, "jdbc:microsoft:sqlserver://localhost" ); Properties props = (Properties) Whitebox.getInternalState( factory, "_props" ); assertEquals( user, props.getProperty( "user" ) ); assertEquals( password, props.getProperty( "password" ) ); }
@Test public void testConnectionFactory_MariaDB() { IDatabaseConnection connection = mock( IDatabaseConnection.class ); doReturn( StringEscapeUtils.escapeHtml( user ) ).when( connection ).getUsername(); doReturn( StringEscapeUtils.escapeHtml( password ) ).when( connection ).getPassword(); ConnectionFactory factory = PooledDatasourceHelper.getConnectionFactory( connection, "jdbc:mariadb://localhost" ); Properties props = (Properties) Whitebox.getInternalState( factory, "_props" ); assertEquals( user, props.getProperty( "user" ) ); assertEquals( password, props.getProperty( "password" ) ); }
@Override public String testConnection( IDatabaseConnection connection ) { try { connection .setPassword( ConnectionServiceHelper.getConnectionPassword( connection.getName(), connection.getPassword() ) ); return super.testConnection( connection ); } catch ( ConnectionServiceException e ) { return super.testConnection( connection ); } } }
@Test public void testSuccessfulDriverInitInConvertGeneric() throws DBDatasourceServiceException { when( databaseType.getShortName() ).thenReturn( "GENERIC" ); when( connection.getAttributes() ).thenReturn( ImmutableMap.of( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS, nativeDriverName ) ); when( connection.getUsername() ).thenReturn( "suzy" ); when( connection.getPassword() ).thenReturn( "password" ); when( ( (IDriverLocator) driverLocatorDialect ).initialize( nativeDriverName ) ).thenReturn( true ); DriverManagerDataSource dataSource = (DriverManagerDataSource) PooledDatasourceHelper.convert( connection, () -> dialectService ); verify( ( (IDriverLocator) driverLocatorDialect ), times( 1 ) ).initialize( nativeDriverName ); assertThat( dataSource.getUrl(), is( jdbcUrl ) ); assertThat( dataSource.getUsername(), is( "suzy" ) ); assertThat( dataSource.getPassword(), is( "password" ) ); }
public static SQLConnection getConnection( String connectionName ) throws DatasourceServiceException { IDatabaseConnection connection = null; try { ConnectionServiceImpl service = new ConnectionServiceImpl(); connection = service.getConnectionByName( connectionName ); DatabaseDialectService dialectService = new DatabaseDialectService(); IDatabaseDialect dialect = dialectService.getDialect( connection ); String driverClass = null; if ( connection.getDatabaseType().getShortName().equals( "GENERIC" ) ) { driverClass = connection.getAttributes().get( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS ); } else { driverClass = dialect.getNativeDriver(); } return new SQLConnection( driverClass, dialect.getURLWithExtraOptions( connection ), connection.getUsername(), connection.getPassword(), null ); } catch ( ConnectionServiceException e1 ) { return null; } catch ( DatabaseDialectException e ) { return null; } }
sanitizer.sanitizeConnectionParameters( connection ); if ( connection.getPassword() == null ) { // Can have an empty password but not a null one connection.setPassword( "" ); //$NON-NLS-1$ pentahoConnection = PentahoConnectionFactory.getConnection( IPentahoConnection.SQL_DATASOURCE, driverClass, dialect.getURLWithExtraOptions( connection ), connection.getUsername(), getConnectionPassword( connection.getName(), connection.getPassword() ), null, this );
private DatabaseMeta getDatabaseMeta( IDatabaseConnection connection ) throws ConnectionServiceException { if ( this.connectionServiceImpl == null ) { return this.databaseMeta; } // DatabaseConnection objects may be de-serialized from the client and missing extra parameters and attributes. // Resolve the connection by name through ConnectionService before use. // All public methods should use getDatabaseMeta to guarantee accurate connection info. // NOTE: We want to retrieve the connection again later, so we don't want an unsanitized name here connection = connectionServiceImpl.getConnectionByName( connection.getName(), false ); connection .setPassword( ConnectionServiceHelper.getConnectionPassword( connection.getName(), connection.getPassword() ) ); DatabaseMeta dbmeta = DatabaseUtil.convertToDatabaseMeta( connection ); dbmeta.getDatabaseInterface().setQuoteAllFields( true ); //This line probably shouldn't be here. It overrides the "Quote all in Database" checkbox return dbmeta; }
public boolean updateConnection( IDatabaseConnection connection ) throws ConnectionServiceException { IDatabaseConnection conn = getConnectionByName( connection.getName() ); if ( conn != null ) { // conn.setDriverClass(connection.getDriverClass()); conn.setAccessType( connection.getAccessType() ); conn.setPassword( connection.getPassword() ); conn.setUsername( connection.getUsername() ); return true; } else { logger.error( Messages.getErrorString( "ConnectionServiceInMemoryDelegate.ERROR_0005_UNABLE_TO_UPDATE_CONNECTION", connection.getName(), null ) ); throw new ConnectionServiceException( Messages .getErrorString( "ConnectionServiceInMemoryDelegate.ERROR_0005_UNABLE_TO_UPDATE_CONNECTION", connection.getName(), null ) ); } }
public boolean updateConnection( IDatabaseConnection connection ) throws ConnectionServiceException { ensureDataAccessPermission(); try { connection.setPassword( getConnectionPassword( connection.getName(), connection .getPassword() ) ); datasourceMgmtSvc.updateDatasourceByName( connection.getName(), connection ); clearDatasource( connection.getName() ); return true; } catch ( NonExistingDatasourceException nonExistingDatasourceException ) { String message = Messages.getErrorString( "ConnectionServiceImpl.ERROR_0005_UNABLE_TO_UPDATE_CONNECTION", //$NON-NLS-1$ connection.getName(), nonExistingDatasourceException.getLocalizedMessage() ); throw new ConnectionServiceException( Response.SC_NOT_FOUND, message, nonExistingDatasourceException ); } catch ( Exception e ) { String message = Messages.getErrorString( "ConnectionServiceImpl.ERROR_0005_UNABLE_TO_UPDATE_CONNECTION", //$NON-NLS-1$ connection.getName(), e.getLocalizedMessage() ); logger.error( message ); throw new ConnectionServiceException( message, e ); } }
basicDatasource.setPassword( databaseConnection.getPassword() );
public void sanitizeConnectionParameters( IDatabaseConnection connection ) { String safeName = safeEscapeHtml( connection.getName() ); connection.setName( safeName ); String safeDbName = safeEscapeHtml( connection.getDatabaseName() ); connection.setDatabaseName( safeDbName ); String safeDbPort = safeEscapeHtml( connection.getDatabasePort() ); connection.setDatabasePort( safeDbPort ); String safeHostname = safeEscapeHtml( connection.getHostname() ); connection.setHostname( safeHostname ); String safePassword = safeEscapeHtml( connection.getPassword() ); connection.setPassword( safePassword ); String safeUsername = safeEscapeHtml( connection.getUsername() ); connection.setUsername( safeUsername ); }
public void unsanitizeConnectionParameters( IDatabaseConnection connection ) { String safeName = StringEscapeUtils.unescapeHtml( connection.getName() ); connection.setName( safeName ); String safeDbName = StringEscapeUtils.unescapeHtml( connection.getDatabaseName() ); connection.setDatabaseName( safeDbName ); String safeDbPort = StringEscapeUtils.unescapeHtml( connection.getDatabasePort() ); connection.setDatabasePort( safeDbPort ); String safeHostname = StringEscapeUtils.unescapeHtml( connection.getHostname() ); connection.setHostname( safeHostname ); String safePassword = StringEscapeUtils.unescapeHtml( connection.getPassword() ); connection.setPassword( safePassword ); String safeUsername = StringEscapeUtils.unescapeHtml( connection.getUsername() ); connection.setUsername( safeUsername ); }
@Override public String getURL( IDatabaseConnection databaseConnection ) throws DatabaseDialectException { return SimbaUrl.Builder.create() .withAccessType( databaseConnection.getAccessType().ordinal() ) .withDatabaseName( databaseConnection.getDatabaseName() ) .withPort( databaseConnection.getDatabasePort() ) .withDefaultPort( getDefaultDatabasePort() ) .withHostname( databaseConnection.getHostname() ) .withJdbcPrefix( getNativeJdbcPre() ) .withUsername( databaseConnection.getUsername() ) .withPassword( databaseConnection.getPassword() ) .withIsKerberos( isKerberos( databaseConnection ) ) .build() .getURL(); }
target.setDatabasePort( source.getDatabasePort() ); target.setUsername( source.getUsername() ); target.setPassword( source.getPassword() ); target.setStreamingResults( source.isStreamingResults() ); target.setDataTablespace( source.getDataTablespace() );
target.setDatabasePort( source.getDatabasePort() ); target.setUsername( source.getUsername() ); target.setPassword( source.getPassword() ); target.setStreamingResults( source.isStreamingResults() ); target.setDataTablespace( source.getDataTablespace() );