1 package org.apache.continuum.distributed.transport.slave;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.continuum.buildagent.configuration.BuildAgentConfigurationService;
23 import org.apache.xmlrpc.XmlRpcException;
24 import org.apache.xmlrpc.XmlRpcRequest;
25 import org.apache.xmlrpc.common.XmlRpcHttpRequestConfigImpl;
26 import org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping.AuthenticationHandler;
27 import org.codehaus.plexus.util.StringUtils;
28
29 public class SlaveBuildAgentTransportAuthenticator
30 implements AuthenticationHandler
31 {
32 private BuildAgentConfigurationService buildAgentConfigurationService;
33
34 public SlaveBuildAgentTransportAuthenticator( BuildAgentConfigurationService buildAgentConfigurationService )
35 {
36 this.buildAgentConfigurationService = buildAgentConfigurationService;
37 }
38
39 public boolean isAuthorized( XmlRpcRequest pRequest )
40 throws XmlRpcException
41 {
42 if ( pRequest.getConfig() instanceof XmlRpcHttpRequestConfigImpl )
43 {
44 XmlRpcHttpRequestConfigImpl config = (XmlRpcHttpRequestConfigImpl) pRequest.getConfig();
45
46 if ( config.getBasicPassword() == null || StringUtils.isBlank( config.getBasicPassword() ) )
47 {
48 throw new XmlRpcException( "Shared Secret Password is not present in the server request" );
49 }
50
51 if ( buildAgentConfigurationService.getSharedSecretPassword() == null || StringUtils.isBlank(
52 buildAgentConfigurationService.getSharedSecretPassword() ) )
53 {
54 throw new XmlRpcException( "Shared Secret Password is not configured properly on the build agent" );
55 }
56
57 return buildAgentConfigurationService.getSharedSecretPassword().equals( config.getBasicPassword() );
58 }
59
60 throw new XmlRpcException( "Unsupported transport (must be http)" );
61 }
62
63
64 }