blob: 384ca239f9698bff8b6dec4a7c3a2929a6fb7770 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ranger.ldapconfigcheck;
import org.apache.commons.cli.*;
import java.io.Console;
public class CommandLineOptions {
private String[] args = null;
private Options options = new Options();
private String input = null;
private String output = null;
private String discoverProperties = null;
private String retrieveValues = null;
private boolean isAuthEnabled = true;
private String ldapUrl = "";
private String bindDn = "";
private String bindPassword = "";
private String userSearchBase = "";
private String userSearchFilter = "";
private String authUser = "";
private String authPass = "";
public CommandLineOptions(String[] args) {
this.args = args;
options.addOption("h", "help", false, "show help.");
options.addOption("i", "inputfile", true, "Input file name");
options.addOption("o", "outputdir", true, "Output directory");
options.addOption("d", "discoverProperties", true, "{all|users|groups}");
options.addOption("r", "retrieve", true, "{all|users|groups}");
options.addOption("a", "noAuthentication", false, "Ignore authentication properties");
options.addOption("p", true, "Ldap Bind Password");
}
public void parse() {
CommandLineParser parser = new BasicParser();
try {
CommandLine cmd = parser.parse(options, args);
// if (cmd.hasOption("h")) {
//}
if (cmd.hasOption("p")) {
bindPassword = cmd.getOptionValue("p");
if (bindPassword.trim().isEmpty()) {
System.out.println("Ldap Bind Password cannot be empty!");
}
}
if (cmd.hasOption("o")) {
output = cmd.getOptionValue("o");
} else {
System.out.println("Missing o option for output directory");
help();
}
if (cmd.hasOption("d")) {
discoverProperties = cmd.getOptionValue("d");
if (discoverProperties == null || (!discoverProperties.equalsIgnoreCase("all") &&
!discoverProperties.equalsIgnoreCase("users") && !discoverProperties.equalsIgnoreCase("groups"))) {
System.out.println("Unsupported value for option d");
help();
}
} else if (cmd.hasOption("r")) {
retrieveValues = cmd.getOptionValue("r");
if (retrieveValues == null || (!retrieveValues.equalsIgnoreCase("all")
&& !retrieveValues.equalsIgnoreCase("users") && !retrieveValues.equalsIgnoreCase("groups"))) {
System.out.println("Unsupported value for option r");
help();
}
} else {
//if (discoverProperties == null || discoverProperties.isEmpty()) {
System.out.println("Default to discover all usersync properties");
//help();
// If "d" or "r" option is not specified, then default to discover all usersync properties
discoverProperties = "all";
//}
}
if (cmd.hasOption("a") || discoverProperties == null || (discoverProperties != null && !discoverProperties.equalsIgnoreCase("all"))) {
isAuthEnabled = false;
}
if (cmd.hasOption("i")) {
input = cmd.getOptionValue("i");
if (input == null || input.isEmpty()) {
System.out.println("Please specify the input properties file name");
help();
}
if (bindPassword == null || bindPassword.trim().isEmpty()) {
System.out.println("Missing Ldap Bind Password!");
}
} else {
// Read the properties from CLI and write to the input properties file.
input = LdapConfig.CONFIG_FILE;
readCLI();
}
} catch (ParseException pe) {
System.out.println("Failed to parse command line arguments " + pe);
help();
}
}
public void help() {
// This prints out some help
HelpFormatter formater = new HelpFormatter();
formater.printHelp("ldapConfigCheck", options);
System.exit(0);
}
public String getInput() {
return input;
}
public String getOutput() {
return output;
}
public String getDiscoverProperties() {
return discoverProperties;
}
public boolean isAuthEnabled() {
return isAuthEnabled;
}
public String getRetrieveValues() {
return retrieveValues;
}
private void readCLI() {
boolean repeat;
Console console = System.console();
do {
repeat = false;
System.out.print("Ldap url [ldap://ldap.example.com:389]: ");
ldapUrl = console.readLine();
if (ldapUrl == null || ldapUrl.isEmpty()) {
System.out.println("Please enter valid ldap url.");
repeat = true;
}
} while (repeat == true);
do {
repeat = false;
System.out.print("Bind DN [cn=admin,ou=users,dc=example,dc=com]: ");
bindDn = console.readLine();
if (bindDn == null || bindDn.isEmpty()) {
System.out.println("Please enter valid bindDn.");
repeat = true;
}
} while (repeat == true);
do {
repeat = false;
System.out.print("Bind Password: ");
char[] password = console.readPassword();
bindPassword = String.valueOf(password);
if (bindPassword == null || bindPassword.isEmpty()) {
System.out.println("Bind Password can't be empty.");
repeat = true;
}
} while (repeat == true);
System.out.print("User Search Base [ou=users,dc=example,dc=com]: ");
userSearchBase = console.readLine();
System.out.print("User Search Filter [cn=user1]: ");
userSearchFilter = console.readLine();
if (isAuthEnabled) {
do {
repeat = false;
System.out.print("Sample Authentication User [user1]: ");
authUser = console.readLine();
if (authUser == null || authUser.isEmpty()) {
System.out.println("Sample Authentication user must not be empty!");
repeat = true;
}
} while (repeat == true);
do {
repeat = false;
System.out.print("Sample Authentication Password: ");
char[] password = console.readPassword();
authPass = String.valueOf(password);
if (authPass == null || authPass.isEmpty()) {
System.out.println("Sample Authentication password must not be empty!");
repeat = true;
}
} while (repeat == true);
}
}
public String getLdapUrl() {
return ldapUrl;
}
public String getBindDn() {
return bindDn;
}
public String getBindPassword() {
return bindPassword;
}
public String getUserSearchBase() {
return userSearchBase;
}
public String getUserSearchFilter() {
return userSearchFilter;
}
public String getAuthUser() {
return authUser;
}
public String getAuthPass() {
return authPass;
}
}