Skip to content

Commit 7ff31f1

Browse files
committed
Merge remote-tracking branch 'origin/inetaddress'
- Tested locally against unit tests - TravisCI build passed: https://travis-ci.org/apache/cloudstack/builds/41990351 - Manual QA passed for basic auth and saml auth using default IDP settings Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com> Conflicts: server/src/com/cloud/api/ApiServlet.java
2 parents 4e5b3d0 + 72ba98b commit 7ff31f1

20 files changed

Lines changed: 60 additions & 61 deletions

File tree

api/src/org/apache/cloudstack/api/ApiServerService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@
1919
import com.cloud.exception.CloudAuthenticationException;
2020
import javax.servlet.http.HttpSession;
2121
import java.util.Map;
22+
import java.net.InetAddress;
2223

2324
public interface ApiServerService {
2425
public boolean verifyRequest(Map<String, Object[]> requestParameters, Long userId) throws ServerApiException;
2526

2627
public Long fetchDomainId(String domainUUID);
2728

28-
public ResponseObject loginUser(HttpSession session, String username, String password, Long domainId, String domainPath, String loginIpAddress,
29+
public ResponseObject loginUser(HttpSession session, String username, String password, Long domainId, String domainPath, InetAddress loginIpAddress,
2930
Map<String, Object[]> requestParameters) throws CloudAuthenticationException;
3031

3132
public void logoutUser(long userId);

api/src/org/apache/cloudstack/api/auth/APIAuthenticator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import javax.servlet.http.HttpSession;
2323
import java.util.List;
2424
import java.util.Map;
25+
import java.net.InetAddress;
2526

2627
/*
2728
* APIAuthenticator is an interface that defines method that
@@ -35,7 +36,7 @@
3536
* */
3637
public interface APIAuthenticator {
3738
public String authenticate(String command, Map<String, Object[]> params,
38-
HttpSession session, String remoteAddress, String responseType,
39+
HttpSession session, InetAddress remoteAddress, String responseType,
3940
StringBuilder auditTrailSb, final HttpServletResponse resp) throws ServerApiException;
4041

4142
public APIAuthenticationType getAPIType();

plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.List;
2121
import java.util.Map;
22+
import java.net.InetAddress;
2223

2324
import javax.inject.Inject;
2425
import javax.naming.ConfigurationException;
@@ -231,7 +232,7 @@ public void markUserRegistered(long arg0) {
231232
}
232233

233234
@Override
234-
public UserAccount authenticateUser(String arg0, String arg1, Long arg2, String arg3, Map<String, Object[]> arg4) {
235+
public UserAccount authenticateUser(String arg0, String arg1, Long arg2, InetAddress arg3, Map<String, Object[]> arg4) {
235236
// TODO Auto-generated method stub
236237
return null;
237238
}

plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import java.io.StringWriter;
7373
import java.util.List;
7474
import java.util.Map;
75+
import java.net.InetAddress;
7576

7677
@APICommand(name = "getSPMetadata", description = "Returns SAML2 CloudStack Service Provider MetaData", responseObject = SAMLMetaDataResponse.class, entityType = {})
7778
public class GetServiceProviderMetaDataCmd extends BaseCmd implements APIAuthenticator {
@@ -103,7 +104,7 @@ public void execute() throws ServerApiException {
103104
}
104105

105106
@Override
106-
public String authenticate(String command, Map<String, Object[]> params, HttpSession session, String remoteAddress, String responseType, StringBuilder auditTrailSb, HttpServletResponse resp) throws ServerApiException {
107+
public String authenticate(String command, Map<String, Object[]> params, HttpSession session, InetAddress remoteAddress, String responseType, StringBuilder auditTrailSb, HttpServletResponse resp) throws ServerApiException {
107108
SAMLMetaDataResponse response = new SAMLMetaDataResponse();
108109
response.setResponseName(getCommandName());
109110

plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import javax.xml.stream.FactoryConfigurationError;
6868
import java.io.IOException;
6969
import java.net.URLEncoder;
70+
import java.net.InetAddress;
7071
import java.security.InvalidKeyException;
7172
import java.security.NoSuchAlgorithmException;
7273
import java.security.PrivateKey;
@@ -160,7 +161,7 @@ public Response processSAMLResponse(String responseMessage) {
160161
}
161162

162163
@Override
163-
public String authenticate(final String command, final Map<String, Object[]> params, final HttpSession session, final String remoteAddress, final String responseType, final StringBuilder auditTrailSb, final HttpServletResponse resp) throws ServerApiException {
164+
public String authenticate(final String command, final Map<String, Object[]> params, final HttpSession session, final InetAddress remoteAddress, final String responseType, final StringBuilder auditTrailSb, final HttpServletResponse resp) throws ServerApiException {
164165
try {
165166
if (!params.containsKey("SAMLResponse") && !params.containsKey("SAMLart")) {
166167
String idpUrl = null;

plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.io.IOException;
5151
import java.util.List;
5252
import java.util.Map;
53+
import java.net.InetAddress;
5354

5455
@APICommand(name = "samlSlo", description = "SAML Global Log Out API", responseObject = LogoutCmdResponse.class, entityType = {})
5556
public class SAML2LogoutAPIAuthenticatorCmd extends BaseCmd implements APIAuthenticator {
@@ -83,7 +84,7 @@ public void execute() throws ServerApiException {
8384
}
8485

8586
@Override
86-
public String authenticate(String command, Map<String, Object[]> params, HttpSession session, String remoteAddress, String responseType, StringBuilder auditTrailSb, final HttpServletResponse resp) throws ServerApiException {
87+
public String authenticate(String command, Map<String, Object[]> params, HttpSession session, InetAddress remoteAddress, String responseType, StringBuilder auditTrailSb, final HttpServletResponse resp) throws ServerApiException {
8788
auditTrailSb.append("=== SAML SLO Logging out ===");
8889
LogoutCmdResponse response = new LogoutCmdResponse();
8990
response.setDescription("success");

plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmdTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import java.security.cert.CertificateEncodingException;
4242
import java.security.cert.CertificateParsingException;
4343
import java.security.cert.X509Certificate;
44+
import java.net.InetAddress;
45+
import java.net.UnknownHostException;
4446

4547
@RunWith(MockitoJUnitRunner.class)
4648
public class GetServiceProviderMetaDataCmdTest {
@@ -58,7 +60,7 @@ public class GetServiceProviderMetaDataCmdTest {
5860
HttpServletResponse resp;
5961

6062
@Test
61-
public void testAuthenticate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, CertificateParsingException, CertificateEncodingException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException {
63+
public void testAuthenticate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, CertificateParsingException, CertificateEncodingException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException, UnknownHostException {
6264
GetServiceProviderMetaDataCmd cmd = new GetServiceProviderMetaDataCmd();
6365

6466
Field apiServerField = GetServiceProviderMetaDataCmd.class.getDeclaredField("_apiServer");
@@ -77,7 +79,7 @@ public void testAuthenticate() throws NoSuchFieldException, SecurityException, I
7779
Mockito.when(samlAuthManager.getIdpSingleLogOutUrl()).thenReturn(url);
7880
Mockito.when(samlAuthManager.getSpSingleLogOutUrl()).thenReturn(url);
7981

80-
String result = cmd.authenticate("command", null, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
82+
String result = cmd.authenticate("command", null, session, InetAddress.getByName("127.0.0.1"), HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
8183
Assert.assertTrue(result.contains("md:EntityDescriptor"));
8284

8385
Mockito.verify(samlAuthManager, Mockito.atLeast(1)).getServiceProviderId();

plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import java.security.cert.X509Certificate;
6666
import java.util.HashMap;
6767
import java.util.Map;
68+
import java.net.InetAddress;
6869

6970
@RunWith(MockitoJUnitRunner.class)
7071
public class SAML2LoginAPIAuthenticatorCmdTest {
@@ -171,14 +172,14 @@ public void testAuthenticate() throws Exception {
171172
Map<String, Object[]> params = new HashMap<String, Object[]>();
172173

173174
// SSO redirection test
174-
cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
175+
cmd.authenticate("command", params, session, InetAddress.getByName("127.0.0.1"), HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
175176
Mockito.verify(resp, Mockito.times(1)).sendRedirect(Mockito.anyString());
176177

177178
// SSO SAMLResponse verification test, this should throw ServerApiException for auth failure
178179
params.put(SAMLUtils.SAML_RESPONSE, new String[]{"Some String"});
179180
Mockito.stub(cmd.processSAMLResponse(Mockito.anyString())).toReturn(buildMockResponse());
180181
try {
181-
cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
182+
cmd.authenticate("command", params, session, InetAddress.getByName("127.0.0.1"), HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
182183
} catch (ServerApiException ignored) {
183184
}
184185
Mockito.verify(configDao, Mockito.atLeastOnce()).getValue(Mockito.anyString());

plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import javax.servlet.http.HttpSession;
3737
import java.lang.reflect.Field;
3838
import java.security.cert.X509Certificate;
39+
import java.net.InetAddress;
3940

4041
@RunWith(MockitoJUnitRunner.class)
4142
public class SAML2LogoutAPIAuthenticatorCmdTest {
@@ -81,7 +82,7 @@ public void testAuthenticate() throws Exception {
8182
Mockito.when(session.getAttribute(Mockito.anyString())).thenReturn(null);
8283
Mockito.when(configDao.getValue(Mockito.anyString())).thenReturn("someString");
8384

84-
cmd.authenticate("command", null, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
85+
cmd.authenticate("command", null, session, InetAddress.getByName("127.0.0.1"), HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), resp);
8586
Mockito.verify(resp, Mockito.times(1)).sendRedirect(Mockito.anyString());
8687
Mockito.verify(session, Mockito.atLeastOnce()).getAttribute(Mockito.anyString());
8788
}

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
<cs.aws.sdk.version>1.3.22</cs.aws.sdk.version>
8383
<cs.lang.version>2.6</cs.lang.version>
8484
<cs.commons-io.version>1.4</cs.commons-io.version>
85+
<cs.commons-validator.version>1.4.0</cs.commons-validator.version>
8586
<cs.reflections.version>0.9.8</cs.reflections.version>
8687
<cs.java-ipv6.version>0.10</cs.java-ipv6.version>
8788
<cs.replace.properties>build/replace.properties</cs.replace.properties>
@@ -233,6 +234,11 @@
233234
<artifactId>commons-codec</artifactId>
234235
<version>${cs.codec.version}</version>
235236
</dependency>
237+
<dependency>
238+
<groupId>commons-validator</groupId>
239+
<artifactId>commons-validator</artifactId>
240+
<version>${cs.commons-validator.version}</version>
241+
</dependency>
236242
<dependency>
237243
<groupId>org.bouncycastle</groupId>
238244
<artifactId>bcprov-jdk16</artifactId>

0 commit comments

Comments
 (0)