Skip to content

Commit 3e37d09

Browse files
committed
MLE-18712 Can now authenticate with an OAuth token
1 parent d36a6c8 commit 3e37d09

File tree

11 files changed

+143
-15
lines changed

11 files changed

+143
-15
lines changed

ml-app-deployer/src/main/java/com/marklogic/appdeployer/AppConfig.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ public class AppConfig {
102102
private String restCertPassword;
103103
private String restExternalName;
104104
private String restSamlToken;
105+
private String restOauthToken;
105106
private X509TrustManager restTrustManager;
106107
private boolean restUseDefaultKeystore;
107108
private String restSslProtocol;
@@ -134,6 +135,7 @@ public class AppConfig {
134135
private String appServicesCertPassword;
135136
private String appServicesExternalName;
136137
private String appServicesSamlToken;
138+
private String appServicesOauthToken;
137139
private X509TrustManager appServicesTrustManager;
138140
private boolean appServicesUseDefaultKeystore;
139141
private String appServicesSslProtocol;
@@ -421,6 +423,7 @@ public DatabaseClientConfig newRestDatabaseClientConfig(int port) {
421423
config.setConnectionType(restConnectionType);
422424
config.setExternalName(restExternalName);
423425
config.setSamlToken(restSamlToken);
426+
config.setOauthToken(restOauthToken);
424427
config.setSecurityContextType(restSecurityContextType);
425428
config.setCloudApiKey(cloudApiKey);
426429
config.setBasePath(restBasePath);
@@ -473,6 +476,7 @@ public DatabaseClient newAppServicesDatabaseClient(String databaseName) {
473476
config.setDatabase(databaseName);
474477
config.setExternalName(appServicesExternalName);
475478
config.setSamlToken(appServicesSamlToken);
479+
config.setOauthToken(appServicesOauthToken);
476480
config.setSecurityContextType(appServicesSecurityContextType);
477481
config.setCloudApiKey(cloudApiKey);
478482
config.setBasePath(appServicesBasePath);
@@ -1568,6 +1572,34 @@ public void setAppServicesSamlToken(String appServicesSamlToken) {
15681572
this.appServicesSamlToken = appServicesSamlToken;
15691573
}
15701574

1575+
/**
1576+
* @since 6.0.0
1577+
*/
1578+
public String getRestOauthToken() {
1579+
return restOauthToken;
1580+
}
1581+
1582+
/**
1583+
* @since 6.0.0
1584+
*/
1585+
public void setRestOauthToken(String restOauthToken) {
1586+
this.restOauthToken = restOauthToken;
1587+
}
1588+
1589+
/**
1590+
* @since 6.0.0
1591+
*/
1592+
public String getAppServicesOauthToken() {
1593+
return appServicesOauthToken;
1594+
}
1595+
1596+
/**
1597+
* @since 6.0.0
1598+
*/
1599+
public void setAppServicesOauthToken(String appServicesOauthToken) {
1600+
this.appServicesOauthToken = appServicesOauthToken;
1601+
}
1602+
15711603
public boolean isCascadeCollections() {
15721604
return cascadeCollections;
15731605
}

ml-app-deployer/src/main/java/com/marklogic/appdeployer/DefaultAppConfigFactory.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ public void initialize() {
291291
propertyConsumerMap.put("mlAppServicesSamlToken", (config, prop) -> {
292292
config.setAppServicesSamlToken(prop);
293293
});
294+
propertyConsumerMap.put("mlAppServicesOauthToken", (config, prop) -> {
295+
config.setAppServicesOauthToken(prop);
296+
});
294297

295298
propertyConsumerMap.put("mlAppServicesSimpleSsl", (config, prop) -> {
296299
if (StringUtils.hasText(prop) && !"false".equalsIgnoreCase(prop)) {
@@ -423,6 +426,9 @@ public void initialize() {
423426
propertyConsumerMap.put("mlRestSamlToken", (config, prop) -> {
424427
config.setRestSamlToken(prop);
425428
});
429+
propertyConsumerMap.put("mlRestOauthToken", (config, prop) -> {
430+
config.setRestOauthToken(prop);
431+
});
426432
propertyConsumerMap.put("mlRestBasePath", (config, prop) -> {
427433
String cloudBasePath = getProperty("mlCloudBasePath");
428434
String restPath = StringUtils.hasText(cloudBasePath) ? cloudBasePath + prop : prop;

ml-app-deployer/src/main/java/com/marklogic/mgmt/DefaultManageConfigFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ public void initialize() {
114114
propertyConsumerMap.put("mlManageSamlToken", (config, prop) -> {
115115
config.setSamlToken(prop);
116116
});
117+
propertyConsumerMap.put("mlManageOauthToken", (config, prop) -> {
118+
config.setOauthToken(prop);
119+
});
117120

118121
propertyConsumerMap.put("mlCloudBasePath", (config, prop) -> {
119122
String defaultManagePath = prop + "/manage";

ml-app-deployer/src/main/java/com/marklogic/mgmt/admin/DefaultAdminConfigFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ public void initialize() {
111111
propertyConsumerMap.put("mlAdminSamlToken", (config, prop) -> {
112112
config.setSamlToken(prop);
113113
});
114+
propertyConsumerMap.put("mlAdminOauthToken", (config, prop) -> {
115+
config.setOauthToken(prop);
116+
});
114117

115118
propertyConsumerMap.put("mlCloudBasePath", (config, prop) -> {
116119
String defaultAdminPath = prop + "/admin";

ml-app-deployer/src/main/java/com/marklogic/rest/util/RestConfig.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class RestConfig {
4040
private String certPassword;
4141
private String externalName;
4242
private String samlToken;
43+
private String oauthToken;
4344

4445
private String basePath;
4546
private String scheme = "http";
@@ -116,6 +117,7 @@ public DatabaseClientBuilder newDatabaseClientBuilder() {
116117
.withCertificatePassword(getCertPassword())
117118
.withKerberosPrincipal(getExternalName())
118119
.withSAMLToken(getSamlToken())
120+
.withOAuthToken(getOauthToken())
119121
.withSSLHostnameVerifier(getSslHostnameVerifier())
120122
// These 8 were added in 4.7.0. They do not conflict with the SSL config below; if the user is setting
121123
// these, they won't have a reason to provide their own SSLContext nor request that the default keystore
@@ -464,4 +466,18 @@ public String getTrustStoreAlgorithm() {
464466
public void setTrustStoreAlgorithm(String trustStoreAlgorithm) {
465467
this.trustStoreAlgorithm = trustStoreAlgorithm;
466468
}
469+
470+
/**
471+
* @since 6.0.0
472+
*/
473+
public String getOauthToken() {
474+
return oauthToken;
475+
}
476+
477+
/**
478+
* @since 6.0.0
479+
*/
480+
public void setOauthToken(String oauthToken) {
481+
this.oauthToken = oauthToken;
482+
}
467483
}

ml-app-deployer/src/test/java/com/marklogic/appdeployer/DefaultAppConfigFactoryTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,29 @@ void samlTokens() {
782782
assertEquals("my-app-token", ((DatabaseClientFactory.SAMLAuthContext) context).getToken());
783783
}
784784

785+
@Test
786+
void oauthTokens() {
787+
AppConfig config = configure(
788+
"mlRestAuthentication", "oauth",
789+
"mlRestOauthToken", "my-rest-token",
790+
"mlAppServicesAuthentication", "oauth",
791+
"mlAppServicesOauthToken", "my-app-token"
792+
);
793+
794+
assertEquals(SecurityContextType.OAUTH, config.getRestSecurityContextType());
795+
assertEquals("my-rest-token", config.getRestOauthToken());
796+
assertEquals(SecurityContextType.OAUTH, config.getAppServicesSecurityContextType());
797+
assertEquals("my-app-token", config.getAppServicesOauthToken());
798+
799+
DatabaseClientFactory.SecurityContext context = config.newDatabaseClient().getSecurityContext();
800+
assertTrue(context instanceof DatabaseClientFactory.OAuthContext);
801+
assertEquals("my-rest-token", ((DatabaseClientFactory.OAuthContext) context).getToken());
802+
803+
context = config.newAppServicesDatabaseClient("Documents").getSecurityContext();
804+
assertTrue(context instanceof DatabaseClientFactory.OAuthContext);
805+
assertEquals("my-app-token", ((DatabaseClientFactory.OAuthContext) context).getToken());
806+
}
807+
785808
@Test
786809
void mlAuthentication() {
787810
AppConfig config = configure(

ml-app-deployer/src/test/java/com/marklogic/mgmt/DefaultManageConfigFactoryTest.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@
2020
import com.marklogic.mgmt.util.SimplePropertySource;
2121
import org.junit.jupiter.api.Test;
2222

23-
import static org.junit.jupiter.api.Assertions.assertEquals;
24-
import static org.junit.jupiter.api.Assertions.assertThrows;
25-
import static org.junit.jupiter.api.Assertions.assertTrue;
23+
import static org.junit.jupiter.api.Assertions.*;
2624

27-
public class DefaultManageConfigFactoryTest {
25+
class DefaultManageConfigFactoryTest {
2826

2927
@Test
3028
public void mlUsername() {
@@ -134,7 +132,7 @@ void cloudApiKeyAndBasePath() {
134132

135133
DatabaseClientFactory.Bean bean = config.newDatabaseClientBuilder().buildBean();
136134
assertTrue(bean.getSecurityContext() instanceof DatabaseClientFactory.MarkLogicCloudAuthContext);
137-
assertEquals("my-key", ((DatabaseClientFactory.MarkLogicCloudAuthContext)bean.getSecurityContext()).getApiKey());
135+
assertEquals("my-key", ((DatabaseClientFactory.MarkLogicCloudAuthContext) bean.getSecurityContext()).getApiKey());
138136
}
139137

140138
@Test
@@ -162,7 +160,7 @@ void kerberosAuth() {
162160

163161
DatabaseClientFactory.Bean bean = config.newDatabaseClientBuilder().buildBean();
164162
assertTrue(bean.getSecurityContext() instanceof DatabaseClientFactory.KerberosAuthContext);
165-
assertEquals("my-name", ((DatabaseClientFactory.KerberosAuthContext)bean.getSecurityContext()).getKrbOptions().get("principal"));
163+
assertEquals("my-name", ((DatabaseClientFactory.KerberosAuthContext) bean.getSecurityContext()).getKrbOptions().get("principal"));
166164
}
167165

168166
@Test
@@ -177,7 +175,22 @@ void samlAuth() {
177175

178176
DatabaseClientFactory.Bean bean = config.newDatabaseClientBuilder().buildBean();
179177
assertTrue(bean.getSecurityContext() instanceof DatabaseClientFactory.SAMLAuthContext);
180-
assertEquals("my-token", ((DatabaseClientFactory.SAMLAuthContext)bean.getSecurityContext()).getToken());
178+
assertEquals("my-token", ((DatabaseClientFactory.SAMLAuthContext) bean.getSecurityContext()).getToken());
179+
}
180+
181+
@Test
182+
void oauth() {
183+
ManageConfig config = configure(
184+
"mlManageAuthentication", "oauth",
185+
"mlManageOauthToken", "my-token"
186+
);
187+
188+
assertEquals("oauth", config.getAuthType());
189+
assertEquals("my-token", config.getOauthToken());
190+
191+
DatabaseClientFactory.Bean bean = config.newDatabaseClientBuilder().buildBean();
192+
assertTrue(bean.getSecurityContext() instanceof DatabaseClientFactory.OAuthContext);
193+
assertEquals("my-token", ((DatabaseClientFactory.OAuthContext) bean.getSecurityContext()).getToken());
181194
}
182195

183196
@Test

ml-app-deployer/src/test/java/com/marklogic/mgmt/admin/DefaultAdminConfigFactoryTest.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,14 @@
1515
*/
1616
package com.marklogic.mgmt.admin;
1717

18-
import static org.junit.jupiter.api.Assertions.assertEquals;
19-
import static org.junit.jupiter.api.Assertions.assertThrows;
20-
import static org.junit.jupiter.api.Assertions.assertTrue;
21-
22-
import org.junit.jupiter.api.Test;
23-
2418
import com.marklogic.client.DatabaseClientFactory;
2519
import com.marklogic.client.DatabaseClientFactory.SSLHostnameVerifier;
2620
import com.marklogic.mgmt.util.SimplePropertySource;
21+
import org.junit.jupiter.api.Test;
2722

28-
public class DefaultAdminConfigFactoryTest {
23+
import static org.junit.jupiter.api.Assertions.*;
24+
25+
class DefaultAdminConfigFactoryTest {
2926

3027
@Test
3128
public void mlUsername() {
@@ -155,6 +152,21 @@ void samlAuth() {
155152
assertEquals("my-token", ((DatabaseClientFactory.SAMLAuthContext)bean.getSecurityContext()).getToken());
156153
}
157154

155+
@Test
156+
void oauth() {
157+
AdminConfig config = configure(
158+
"mlAdminAuthentication", "oauth",
159+
"mlAdminOauthToken", "my-token"
160+
);
161+
162+
assertEquals("oauth", config.getAuthType());
163+
assertEquals("my-token", config.getOauthToken());
164+
165+
DatabaseClientFactory.Bean bean = config.newDatabaseClientBuilder().buildBean();
166+
assertTrue(bean.getSecurityContext() instanceof DatabaseClientFactory.OAuthContext);
167+
assertEquals("my-token", ((DatabaseClientFactory.OAuthContext)bean.getSecurityContext()).getToken());
168+
}
169+
158170
@Test
159171
void sslHostnameVerifier() {
160172
AdminConfig config = configure("mlAdminSslHostnameVerifier", "common");

ml-javaclient-util/src/main/java/com/marklogic/client/ext/DatabaseClientConfig.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class DatabaseClientConfig {
4242
private String certPassword;
4343
private String externalName;
4444
private String samlToken;
45+
private String oauthToken;
4546

4647
private X509TrustManager trustManager;
4748
private DatabaseClient.ConnectionType connectionType;
@@ -389,4 +390,18 @@ public String getTrustStoreAlgorithm() {
389390
public void setTrustStoreAlgorithm(String trustStoreAlgorithm) {
390391
this.trustStoreAlgorithm = trustStoreAlgorithm;
391392
}
393+
394+
/**
395+
* @since 6.0.0
396+
*/
397+
public String getOauthToken() {
398+
return oauthToken;
399+
}
400+
401+
/**
402+
* @since 6.0.0
403+
*/
404+
public void setOauthToken(String oauthToken) {
405+
this.oauthToken = oauthToken;
406+
}
392407
}

ml-javaclient-util/src/main/java/com/marklogic/client/ext/DefaultConfiguredDatabaseClientFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public DatabaseClient newDatabaseClient(DatabaseClientConfig config) {
4646
.withCertificatePassword(config.getCertPassword())
4747
.withKerberosPrincipal(config.getExternalName())
4848
.withSAMLToken(config.getSamlToken())
49+
.withOAuth(config.getOauthToken())
4950
.withCloudApiKey(config.getCloudApiKey())
5051
.withSSLProtocol(config.getSslProtocol())
5152
.withSSLHostnameVerifier(config.getSslHostnameVerifier())

0 commit comments

Comments
 (0)