[ all classes ]
[ com.acciente.oacc.sql ]
Coverage Summary for Class: SQLAccessControlSystemInitializer (com.acciente.oacc.sql)
Class | Class, % | Method, % | Line, % |
---|---|---|---|
SQLAccessControlSystemInitializer | 100% (1/ 1) | 42.9% (3/ 7) | 27.8% (10/ 36) |
1 /*
2 * Copyright 2009-2018, Acciente LLC
3 *
4 * Acciente LLC licenses this file to you under the
5 * Apache License, Version 2.0 (the "License"); you
6 * may not use this file except in compliance with the
7 * License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in
12 * writing, software distributed under the License is
13 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
14 * OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing
16 * permissions and limitations under the License.
17 */
18 package com.acciente.oacc.sql;
19
20 import com.acciente.oacc.encryptor.PasswordEncryptor;
21 import com.acciente.oacc.sql.internal.encryptor.PasswordEncryptors;
22
23 import java.io.IOException;
24 import java.io.StringReader;
25 import java.sql.Connection;
26 import java.sql.DriverManager;
27 import java.sql.SQLException;
28 import java.util.List;
29 import java.util.Properties;
30
31 public class SQLAccessControlSystemInitializer {
32 private static final String PROP_DbUrl = "-dburl";
33 private static final String PROP_DbUser = "-dbuser";
34 private static final String PROP_DbPwd = "-dbpwd";
35 private static final String PROP_DbSchema = "-dbschema";
36 private static final String PROP_PwdEncryptor = "-pwdencryptor";
37 private static final String PROP_OACCRootPwd = "-oaccsystempwd";
38 private static final String OPT_HELP_SHORT = "-h";
39 private static final String OPT_HELP_LONG = "--help";
40 private static final String OPT_HELP_QUESTION = "-?";
41 private static final String USAGE = "Usage:" +
42 "\n java com.acciente.oacc.SQLAccessControlSystemInitializer " +
43 PROP_DbUrl + "=<db-url> " +
44 PROP_PwdEncryptor + "=(" +
45 join(" | ", PasswordEncryptors.getSupportedEncryptorNames()) + ") " +
46 PROP_OACCRootPwd + "=<OACC-system-password> " +
47 "[options]" +
48 "\n\nOptions:" +
49 "\n " + PROP_DbUser + "=<db-user> Database username." +
50 "\n " + PROP_DbPwd + "=<db-password> Database password." +
51 "\n " + PROP_DbSchema + "=<db-schema> Database schema." +
52 "\n\nOther:" +
53 "\n -h, --help, -? Shows usage info.";
54
55 public static void main(String args[]) throws SQLException, IOException {
56 // first read the command line args into a properties object
57 Properties optionArgs = new Properties();
58
59 for (String arg : args) {
60 optionArgs.load(new StringReader(arg));
61 }
62
63 // print usage info, if necessary
64 if (args.length == 0
65 || optionArgs.containsKey(OPT_HELP_SHORT)
66 || optionArgs.containsKey(OPT_HELP_LONG)
67 || optionArgs.containsKey(OPT_HELP_QUESTION)) {
68 System.out.println(USAGE);
69 return;
70 }
71
72 verifyOptionArgs(optionArgs);
73
74 initializeOACC(optionArgs.getProperty(PROP_DbUrl),
75 optionArgs.getProperty(PROP_DbUser),
76 optionArgs.getProperty(PROP_DbPwd),
77 optionArgs.getProperty(PROP_DbSchema),
78 optionArgs.getProperty(PROP_OACCRootPwd).toCharArray(),
79 PasswordEncryptors.getPasswordEncryptor(optionArgs.getProperty(PROP_PwdEncryptor)));
80 }
81
82 private static void verifyOptionArgs(Properties optionArgs) {
83 if (optionArgs.getProperty(PROP_DbUrl) == null) {
84 throw new IllegalArgumentException(PROP_DbUrl + " is required!\n" + USAGE);
85 }
86 if (optionArgs.getProperty(PROP_PwdEncryptor) == null) {
87 throw new IllegalArgumentException(PROP_PwdEncryptor + " is required!\n" + USAGE);
88 }
89 if (optionArgs.getProperty(PROP_OACCRootPwd) == null) {
90 throw new IllegalArgumentException(PROP_OACCRootPwd + " is required!\n" + USAGE);
91 }
92 }
93
94 public static void initializeOACC(String dbUrl,
95 String dbUser,
96 String dbPwd,
97 String dbSchema,
98 char[] oaccRootPwd,
99 PasswordEncryptor passwordEncryptor) throws SQLException {
100 System.out.println("Connecting to OACC database @ " + dbUrl);
101
102 try (Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPwd)) {
103 // delegate to internal handler
104 com.acciente.oacc.sql.internal.SQLAccessControlSystemInitializer.initializeOACC(connection,
105 dbSchema,
106 oaccRootPwd,
107 passwordEncryptor);
108 }
109 finally {
110 System.out.println("Disconnecting from OACC database @ " + dbUrl);
111 }
112
113 System.out.println("Initialize..OK!");
114 }
115
116 public static void initializeOACC(Connection connection,
117 String dbSchema,
118 char[] oaccRootPwd,
119 PasswordEncryptor passwordEncryptor) throws SQLException {
120 // delegate to internal handler
121 com.acciente.oacc.sql.internal.SQLAccessControlSystemInitializer.initializeOACC(connection,
122 dbSchema,
123 oaccRootPwd,
124 passwordEncryptor);
125 }
126
127 //TODO remove this method and replace its usages with String.join() when OACC updates to Java 8
128 /**
129 * Provides identical functionality of the Strings.join() method in Java 8
130 *
131 * @param delimiter the delimiter to insert between elements
132 * @param elements the elements to concatenate
133 * @return a String of the specified elements joined by the specified delimiter
134 */
135 private static String join(final String delimiter, final List<String> elements) {
136 if (elements == null || elements.size() == 0) {
137 return "";
138 }
139
140 final StringBuilder result = new StringBuilder(elements.get(0));
141 for (String element : elements.subList(1, elements.size())) {
142 result.append(delimiter);
143 result.append(element);
144 }
145 return result.toString();
146 }
147 }