package org.pentaho.test.platform.web.http.security; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.pentaho.di.core.KettleClientEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.platform.api.engine.IConfiguration; import org.pentaho.platform.api.engine.ISystemConfig; import org.pentaho.platform.web.http.security.RequestParameterAuthenticationFilter; import org.springframework.mock.web.MockFilterChain; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.web.authentication.WebAuthenticationDetails; import javax.servlet.ServletException; import java.io.IOException; import java.util.Properties; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; public class RequestParameterAuthenticationFilterTest { private RequestParameterAuthenticationFilter filter; private AuthenticationManager authManagerMock; @Before public void beforeTest() throws KettleException, IOException { KettleClientEnvironment.init(); filter = new RequestParameterAuthenticationFilter(); authManagerMock = mock( AuthenticationManager.class ); filter.setAuthenticationManager( authManagerMock ); final Properties properties = new Properties(); properties.setProperty( "requestParameterAuthenticationEnabled", "true" ); IConfiguration config = mock( IConfiguration.class ); ISystemConfig mockISystemConfig = mock( ISystemConfig.class ); mockISystemConfig.registerConfiguration( config ); filter.setSystemConfig( mockISystemConfig ); doReturn( config ).when( mockISystemConfig ).getConfiguration( "security" ); doReturn( properties ).when( config ).getProperties(); } @Test public void userNamePasswordEncrypted() throws IOException, ServletException { final MockHttpServletRequest request = new MockHttpServletRequest( "GET", "http://localhost:9080/pentaho-di/kettle/executeTrans/?rep=dev&userid=admin&password=Encrypted" + "%202be98afc86aa7f2e4bb18bd63c99dbdde&trans=/home/admin/Trans1" ); request.addParameter( "userid", "admin" ); request.addParameter( "password", "Encrypted 2be98afc86aa7f2e4bb18bd63c99dbdde" ); filter.doFilter( request, new MockHttpServletResponse(), new MockFilterChain() ); UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken( "admin", "password" ); authRequest.setDetails( new WebAuthenticationDetails( request ) ); verify( authManagerMock ).authenticate( Mockito.eq( authRequest ) ); } @Test public void userNamePasswordUnencrypted() throws IOException, ServletException { final MockHttpServletRequest request = new MockHttpServletRequest( "GET", "http://localhost:9080/pentaho-di/kettle/executeTrans/?rep=dev&userid=admin&password=password&trans=/home" + "/admin/Trans1" ); request.addParameter( "userid", "admin" ); request.addParameter( "password", "password" ); filter.doFilter( request, new MockHttpServletResponse(), new MockFilterChain() ); UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken( "admin", "password" ); authRequest.setDetails( new WebAuthenticationDetails( request ) ); verify( authManagerMock ).authenticate( Mockito.eq( authRequest ) ); } }