package net.curisit.securis;
import java.io.File;
import java.net.URISyntaxException;
import net.curisit.securis.beans.SignedLicenseBean;
import net.curisit.securis.utils.Params;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Main class when SeCuris client is used from command line.
*
*
* usage: securis-client [-c] [-g] [-h] [-l ] [-r ] [-s
* ] [-t]
* -c,--create Request a license file from server.
* --rfile and --server parameters are
* mandatory.
* -g,--gen_request Generate request file. If --rfile
* parameter is missing then It is
* generated in current directory.
* -h,--help Show help.
* -l,--validate Validate lic file.
* -r,--renew Synchronize/renew the current license
* file. --server parameter is mandatory.
* -s,--server License server url.
* -t,--test_lc Test if License Server (LC) is
*
*
* @author roberto
*
*/
public class License {
private static final Logger LOG = LogManager.getLogger(License.class);
/**
* Aplication entry point when it used as CLI
*
* @param args
* @throws URISyntaxException
*/
public static void main(String[] args) throws URISyntaxException {
LOG.debug("SeCuris client tool init ");
checkConfigFile();
CommandLine cmd = getCommandLine(args);
try {
if (cmd.hasOption('g')) {
String filename = cmd.getOptionValue("rfile");
if (filename == null)
filename = "./license.req";
File file = new File(filename);
LicenseManager.getInstance().createRequestFile(file);
LOG.info("Request file {} generated OK", file.getAbsolutePath());
System.exit(0);
}
if (cmd.hasOption('l')) {
String filename = cmd.getOptionValue("validate");
if (filename == null)
filename = "./license.lic";
File file = new File(filename);
if (!file.exists()) {
throw new SeCurisException("The license file doesn't exist: " + file.getAbsolutePath());
}
try {
LicenseManager.getInstance().validateLicense(file);
LOG.info("License file {} is valid", file.getAbsolutePath());
} catch (SeCurisException e) {
LOG.info("License file {} is NOT valid", file.getAbsolutePath());
LOG.info("Reason: {}", e.toString());
}
System.exit(0);
}
if (cmd.hasOption('c')) {
SignedLicenseBean lic = LicenseManager.getInstance().requestLicense();
String filename = cmd.getOptionValue("c");
if (filename == null)
filename = "./license.lic";
File file = new File(filename);
LicenseManager.getInstance().save(lic, file);
LOG.info("License file sucessfully saved in file: {}", file.getAbsolutePath());
System.exit(0);
}
if (cmd.hasOption('t')) {
LicenseManager.getInstance().testServer();
LOG.info("Server is OK, url: {}", Params.get(Params.KEYS.LICENSE_SERVER_URL, Params.DEFAUT_SERVER_URL));
System.exit(0);
}
if (cmd.hasOption('r')) {
String licFilename = cmd.getOptionValue("renew");
checkMandatoryParameter(licFilename, "renew");
File file = new File(licFilename);
if (!file.exists()) {
throw new SeCurisException("The license file doesn't exist: " + file.getAbsolutePath());
}
SignedLicenseBean newLic = LicenseManager.getInstance().renew(file);
File oldLicFile = new File(file.getAbsoluteFile() + ".old");
file.renameTo(oldLicFile);
LOG.info("Old license file has been renamed to: {}", oldLicFile.getAbsolutePath());
LicenseManager.getInstance().save(newLic, file);
LOG.info("New license file saved as: {}", file.getAbsolutePath());
System.exit(0);
}
} catch (SeCurisException e) {
LOG.error("The command generated an error: {}", e.toString());
}
}
private static void checkMandatoryParameter(String value, String param) {
if (value == null) {
LOG.error("Parameter {} is mandatory. Use --help to get information about parameters", param);
System.exit(-5);
}
}
/**
* Checks that config file exists and contains mandatory parameters
*/
private static void checkConfigFile() {
if (Params.get(Params.KEYS.APPLICATION_CODE) == null) {
LOG.error("Manadatory parameter {} is not set in config file", Params.KEYS.APPLICATION_CODE);
System.exit(-3);
}
if (Params.get(Params.KEYS.CUSTOMER_CODE) == null) {
LOG.error("Manadatory parameter {} is not set in config file", Params.KEYS.CUSTOMER_CODE);
System.exit(-4);
}
if (Params.get(Params.KEYS.PACK_CODE) == null) {
LOG.error("Manadatory parameter {} is not set in config file", Params.KEYS.PACK_CODE);
System.exit(-6);
}
}
private static CommandLine getCommandLine(String[] args) {
Options ops = prepareOptionCLI();
if (args.length == 0) {
printHelp(ops);
}
CommandLineParser parser = new PosixParser();
CommandLine cmd = null;
try {
cmd = parser.parse(ops, args);
} catch (ParseException e) {
printHelp(ops);
}
if (cmd.hasOption('h')) {
printHelp(ops);
}
return cmd;
}
private static void printHelp(Options ops) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("securis-client", ops, true);
System.exit(-1);
}
@SuppressWarnings("static-access")
private static Options prepareOptionCLI() {
Options options = new Options();
options.addOption("h", "help", false, "Show help.");
options.addOption(OptionBuilder.withArgName("req_file").withLongOpt("rfile")
.withDescription("Set request file for its generation or for license requesting.").hasArg(true).create('r'));
// options.addOption(OptionBuilder.withArgName("url_license_server").withLongOpt("server").withDescription("License server url.").hasArg(true).create('s'));
options.addOption(OptionBuilder.withArgName("lic_file").withLongOpt("validate").withDescription("Validate lic file.").hasArg(true)
.create('l'));
options.addOption("g", "gen_request", false,
"Generate request file. If --rfile parameter is missing then It is generated in current directory.");
options.addOption(OptionBuilder.withArgName("lic_file").withLongOpt("create").withDescription("Request a license file to server.")
.hasArg(true).hasOptionalArg().create('c'));
options.addOption("t", "test_lc", false, "Test if License Server (LC) is available. ");
options.addOption(OptionBuilder.withArgName("lic_file").withLongOpt("renew").withDescription("Synchronize/renew the current license file.")
.hasArg(true).create('r'));
return options;
}
}