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')) { // TODO: Change CLI to get name and email in license request SignedLicenseBean lic = LicenseManager.getInstance().requestLicense(null, null); 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.LIC_TYPE_CODE) == null && Params.get(Params.KEYS.APPLICATION_CODE) == null) { LOG.error("Manadatory parameter {} is not set in config file", Params.KEYS.LIC_TYPE_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; } }