Skip to content

Commit 086c3d1

Browse files
authored
various atp and ssl JRF database refactoring (#1366)
* Fix ssl db run rcu error and refactor * refactoring * copyrights updates * cleanup * add comment * Fix per PR comments
1 parent eb2e66e commit 086c3d1

File tree

5 files changed

+221
-152
lines changed

5 files changed

+221
-152
lines changed

core/src/main/java/oracle/weblogic/deploy/create/RCURunner.java

Lines changed: 28 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import oracle.weblogic.deploy.util.ScriptRunnerException;
2020
import oracle.weblogic.deploy.util.StringUtils;
2121

22-
import org.python.core.PyClass;
2322
import org.python.core.PyDictionary;
2423
import org.python.core.PyString;
2524

@@ -72,7 +71,7 @@ public class RCURunner {
7271
private boolean atpDB = false;
7372
private boolean sslDB = false;
7473

75-
private String atpSSlArgs = null;
74+
private String sslArgs = null;
7675
private String atpAdminUser = null;
7776
private String rcuAdminUser = DB_USER;
7877
private String atpDefaultTablespace = null;
@@ -136,36 +135,23 @@ public static RCURunner createRunner(String domainType, String oracleHome, Strin
136135
* @param javaHome the JAVA_HOME location
137136
* @param rcuSchemas the list of RCU schemas to create (this list should not include STB)
138137
* @param rcuVariables a comma separated list of key=value variables
139-
* @param connectionProperties dictionary of ATP specific arguments
138+
* @param sslConnectionProperties dictionary of ATP specific arguments
140139
* @throws CreateException if a parameter validation error occurs
141140
*/
142141
public static RCURunner createAtpRunner(String domainType, String oracleHome, String javaHome, String rcuDb,
143142
List<String> rcuSchemas, String rcuPrefix, String rcuVariables,
144143
String databaseType, PyDictionary runnerMap,
145-
PyDictionary connectionProperties) throws CreateException {
144+
PyDictionary sslConnectionProperties) throws CreateException {
146145

147146
RCURunner runner = new RCURunner(domainType, oracleHome, javaHome, rcuDb, rcuPrefix, rcuSchemas, rcuVariables);
148147

149-
StringBuilder sslArgs = new StringBuilder();
150-
151-
for (Object connectionProperty: connectionProperties.keys()) {
152-
if (sslArgs.length() != 0) {
153-
sslArgs.append(',');
154-
}
155-
sslArgs.append(connectionProperty.toString());
156-
sslArgs.append('=');
157-
PyDictionary valueObject = (PyDictionary)connectionProperties
158-
.get(new PyString(connectionProperty.toString()));
159-
sslArgs.append(valueObject.get(new PyString("Value")));
160-
}
161-
162-
163-
addExtraSSLPropertyFromMap(runnerMap, connectionProperties, sslArgs, "javax.net.ssl.keyStorePassword");
164-
addExtraSSLPropertyFromMap(runnerMap, connectionProperties, sslArgs, "javax.net.ssl.trustStorePassword");
148+
StringBuilder sslArgs = getSSLArgsStringBuilder(sslConnectionProperties);
165149

150+
addExtraSSLPropertyFromMap(runnerMap, sslConnectionProperties, sslArgs, "javax.net.ssl.keyStorePassword");
151+
addExtraSSLPropertyFromMap(runnerMap, sslConnectionProperties, sslArgs, "javax.net.ssl.trustStorePassword");
166152

167153
runner.atpDB = true; // "ATP".equals(databaseType); // or scan if there are any 'ssl' in properties ?
168-
runner.atpSSlArgs = sslArgs.toString();
154+
runner.sslArgs = sslArgs.toString();
169155

170156
runner.atpAdminUser = get(runnerMap, "atp.admin.user");
171157
runner.atpDefaultTablespace = get(runnerMap, "atp.default.tablespace");
@@ -174,6 +160,21 @@ public static RCURunner createAtpRunner(String domainType, String oracleHome, St
174160
return runner;
175161
}
176162

163+
private static StringBuilder getSSLArgsStringBuilder(PyDictionary connectionProperties) {
164+
StringBuilder sslArgs = new StringBuilder();
165+
166+
for (Object connectionProperty: connectionProperties.keys()) {
167+
if (sslArgs.length() != 0) {
168+
sslArgs.append(',');
169+
}
170+
String key = connectionProperty.toString();
171+
sslArgs.append(key);
172+
sslArgs.append('=');
173+
sslArgs.append(get(connectionProperties, key));
174+
}
175+
return sslArgs;
176+
}
177+
177178
private static void addExtraSSLPropertyFromMap(PyDictionary runnerMap, PyDictionary connectionProperties,
178179
StringBuilder sslArgs, String key) {
179180
if (!connectionProperties.has_key(new PyString(key)) &&
@@ -199,44 +200,16 @@ private static void addExtraSSLPropertyFromMap(PyDictionary runnerMap, PyDiction
199200
*/
200201
public static RCURunner createSslRunner(String domainType, String oracleHome, String javaHome, String rcuDb,
201202
String rcuPrefix, List<String> rcuSchemas, String rcuVariables,
202-
PyDictionary rcuProperties) throws CreateException {
203+
PyDictionary rcuProperties,
204+
PyDictionary sslConnectionProperties) throws CreateException {
203205

204-
String tnsAdmin = get(rcuProperties, "oracle.net.tns_admin");
205206

206207
RCURunner runner = new RCURunner(domainType, oracleHome, javaHome, rcuDb, rcuPrefix, rcuSchemas, rcuVariables);
207-
String trustStorePassword = get(rcuProperties, "javax.net.ssl.trustStorePassword");
208-
String trustStore = get(rcuProperties, "javax.net.ssl.keyStore");
209-
String trustStoreType = get(rcuProperties, "javax.net.ssl.keyStoreType");
210-
String keyStorePassword = get(rcuProperties, "javax.net.ssl.keyStorePassword");
211-
String keyStore = get(rcuProperties, "javax.net.ssl.keyStore");
212-
String keyStoreType = get(rcuProperties, "javax.net.ssl.keyStoreType");
213-
String matchType = get(rcuProperties, "oracle.net.ssl_server_dn_match");
214-
if (matchType == null || matchType.equals("None")) {
215-
matchType = Boolean.FALSE.toString();
216-
}
217-
218208

219-
StringBuilder sslArgs = new StringBuilder();
220-
sslArgs.append("oracle.net.tns_admin=");
221-
sslArgs.append(tnsAdmin);
222-
223-
sslArgs.append(",javax.net.ssl.trustStore=");
224-
sslArgs.append(tnsAdmin + "/" + trustStore);
225-
sslArgs.append(",javax.net.ssl.trustStoreType=" + trustStoreType);
226-
// If wallet type is SSO, no password present
227-
if (trustStorePassword != null && !trustStorePassword.equals("None")) {
228-
sslArgs.append(",javax.net.ssl.trustStorePassword="+ trustStorePassword);
229-
}
230-
sslArgs.append(",javax.net.ssl.keyStore=");
231-
sslArgs.append(tnsAdmin + "/" + keyStore);
232-
sslArgs.append(",javax.net.ssl.keyStoreType=" + keyStoreType);
233-
if (keyStorePassword != null && !keyStorePassword.equals("None")) {
234-
sslArgs.append(",javax.net.ssl.keyStorePassword="+ keyStorePassword);
235-
}
236-
sslArgs.append(",oracle.net.ssl_server_dn_match="+ matchType);
209+
StringBuilder sslArgs = getSSLArgsStringBuilder(sslConnectionProperties);
237210

238211
runner.sslDB = true;
239-
runner.atpSSlArgs = sslArgs.toString();
212+
runner.sslArgs = sslArgs.toString();
240213
return runner;
241214
}
242215

@@ -377,11 +350,11 @@ private String[] getCommandLineArgs(String operationSwitch) {
377350
arguments.add(SERVER_DN_SWITCH);
378351
arguments.add("CN=ignored");
379352
arguments.add(SSLARGS);
380-
arguments.add(atpSSlArgs);
353+
arguments.add(sslArgs);
381354
} else if (sslDB) {
382355
arguments.add(USE_SSL_SWITCH);
383356
arguments.add(SSLARGS);
384-
arguments.add(atpSSlArgs);
357+
arguments.add(sslArgs);
385358
arguments.add(DB_ROLE_SWITCH);
386359
arguments.add(DB_ROLE);
387360
arguments.add(DB_USER_SWITCH);

core/src/main/python/wlsdeploy/tool/create/atp_helper.py

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"""
2-
Copyright (c) 2017, 2022, Oracle Corporation and/or its affiliates. All rights reserved.
2+
Copyright (c) 2017, 2023, Oracle Corporation and/or its affiliates. All rights reserved.
33
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
44
"""
5-
import re
5+
import re, os
66
from xml.dom.minidom import parse
77
from wlsdeploy.exception import exception_helper
88

@@ -11,7 +11,8 @@
1111

1212
_logger = PlatformLogger('wlsdeploy.create')
1313

14-
def set_ssl_properties(xml_doc, atp_creds_path, keystore_password, truststore_password):
14+
def set_ssl_properties(xml_doc, atp_creds_path, keystore_password, truststore_password, keystore, keystore_type,
15+
truststore, truststore_type):
1516
'''
1617
Add SSL config properties to the specified XML document.
1718
:param xml_doc: The XML document
@@ -22,22 +23,49 @@ def set_ssl_properties(xml_doc, atp_creds_path, keystore_password, truststore_pa
2223
collection = dom_tree.documentElement
2324
props = collection.getElementsByTagName("propertySet")
2425

26+
keystore, keystore_type, truststore, truststore_type = fix_store_type_and_default_value(keystore, keystore_type,
27+
truststore, truststore_type)
28+
2529
for prop in props:
2630
if prop.getAttribute('name') == 'props.db.1':
2731
set_property(dom_tree, prop, 'oracle.net.ssl_server_dn_match', 'true')
2832
set_property(dom_tree, prop, 'oracle.net.ssl_version', '1.2')
2933
set_property(dom_tree, prop, 'oracle.net.tns_admin', atp_creds_path)
30-
set_property(dom_tree, prop, 'javax.net.ssl.trustStoreType', 'JKS')
31-
set_property(dom_tree, prop, 'javax.net.ssl.trustStore', atp_creds_path + '/truststore.jks')
32-
set_property(dom_tree, prop, 'javax.net.ssl.keyStoreType', 'JKS')
33-
set_property(dom_tree, prop, 'javax.net.ssl.keyStore', atp_creds_path + '/keystore.jks')
34-
set_property(dom_tree, prop, 'javax.net.ssl.keyStorePassword', keystore_password)
35-
set_property(dom_tree, prop, 'javax.net.ssl.trustStorePassword', truststore_password)
34+
set_property(dom_tree, prop, 'javax.net.ssl.trustStoreType', truststore_type)
35+
set_property(dom_tree, prop, 'javax.net.ssl.keyStoreType', keystore_type)
36+
if not os.path.isabs(keystore):
37+
set_property(dom_tree, prop, 'javax.net.ssl.keyStore', atp_creds_path + keystore)
38+
else:
39+
set_property(dom_tree, prop, 'javax.net.ssl.keyStore', keystore)
40+
if not os.path.isabs(truststore):
41+
set_property(dom_tree, prop, 'javax.net.ssl.trustStore', atp_creds_path + truststore)
42+
else:
43+
set_property(dom_tree, prop, 'javax.net.ssl.trustStore', truststore)
44+
45+
if keystore_password is not None:
46+
set_property(dom_tree, prop, 'javax.net.ssl.keyStorePassword', keystore_password)
47+
if truststore_password is not None:
48+
set_property(dom_tree, prop, 'javax.net.ssl.trustStorePassword', truststore_password)
3649
# Persist the changes in the xml file
3750
file_handle = open(xml_doc, "w")
3851
dom_tree.writexml(file_handle)
3952
file_handle.close()
4053

54+
55+
def fix_store_type_and_default_value(keystore, keystore_type, truststore, truststore_type):
56+
# historical reason atp does not need these inputs by default and it uses JKS
57+
# set the default and return it
58+
if truststore is None:
59+
truststore = "truststore.jks"
60+
if keystore is None:
61+
keystore = "keystore.jks"
62+
if truststore_type is None:
63+
truststore_type = "JKS"
64+
if keystore_type is None:
65+
keystore_type = "JKS"
66+
return keystore, keystore_type, truststore, truststore_type
67+
68+
4169
def set_property(dom_tree, prop, name, value):
4270
'''
4371
Sets the property child element under prop parent node.
@@ -58,11 +86,17 @@ def fix_jps_config(rcu_db_info, model_context):
5886
tns_admin = rcu_db_info.get_tns_admin()
5987
keystore_password = rcu_db_info.get_keystore_password()
6088
truststore_password = rcu_db_info.get_truststore_password()
89+
keystore_type = rcu_db_info.get_keystore_type()
90+
truststore_type = rcu_db_info.get_truststore_type()
91+
keystore = rcu_db_info.get_keystore()
92+
truststore = rcu_db_info.get_truststore()
6193

6294
jps_config = model_context.get_domain_home() + '/config/fmwconfig/jps-config.xml'
6395
jps_config_jse = model_context.get_domain_home() + '/config/fmwconfig/jps-config-jse.xml'
64-
set_ssl_properties(jps_config, tns_admin, keystore_password, truststore_password)
65-
set_ssl_properties(jps_config_jse, tns_admin, keystore_password, truststore_password)
96+
set_ssl_properties(jps_config, tns_admin, keystore_password, truststore_password, keystore, keystore_type,
97+
truststore, truststore_type)
98+
set_ssl_properties(jps_config_jse, tns_admin, keystore_password, truststore_password, keystore, keystore_type,
99+
truststore, truststore_type)
66100

67101

68102
def get_atp_connect_string(tnsnames_ora_path, tns_sid_name):

0 commit comments

Comments
 (0)