X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=auth%2Fauth-cmd%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fauth%2Fcmd%2FAAFcli.java;h=bf4193e46bffb72c5bc44743b246dca3bf4cd7f6;hb=6dd9704640eb8cc8d6b4ccd266e40a3f6f589e75;hp=c308e775832f83b076dcbd97e56f1e6f145dc7f2;hpb=4b5a7d721d994a49057e9bfb403c7bff1b376660;p=aaf%2Fauthz.git diff --git a/auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/AAFcli.java b/auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/AAFcli.java index c308e775..bf4193e4 100644 --- a/auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/AAFcli.java +++ b/auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/AAFcli.java @@ -3,13 +3,15 @@ * org.onap.aaf * =========================================================================== * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. + * + * Modifications Copyright (C) 2019 IBM. * =========================================================================== * Licensed 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. @@ -86,17 +88,13 @@ public class AAFcli { private static boolean showDetails = false; private static boolean ignoreDelay = false; private static int globalDelay=0; - - public static int timeout() { - return TIMEOUT; - } // Create when only have Access - public AAFcli(Access access, Writer wtr, HMangr hman, SecurityInfoC si, SecuritySetter ss) throws APIException, CadiException { + public AAFcli(Access access, Writer wtr, HMangr hman, SecurityInfoC si, SecuritySetter ss) throws APIException { this(access,new AuthzEnv(access.getProperties()),wtr,hman, si,ss); } - public AAFcli(Access access, AuthzEnv env, Writer wtr, HMangr hman, SecurityInfoC si, SecuritySetter ss) throws APIException, CadiException { + public AAFcli(Access access, AuthzEnv env, Writer wtr, HMangr hman, SecurityInfoC si, SecuritySetter ss) throws APIException { this.env = env; this.access = access; this.ss = ss; @@ -125,6 +123,14 @@ public class AAFcli { cmds.add(new Mgmt(this)); } + public AuthzEnv env() { + return env; + } + + public static int timeout() { + return TIMEOUT; + } + public void verbose(boolean v) { verbose = v; } @@ -161,7 +167,7 @@ public class AAFcli { sb.append(largs[idx], e, v); if ((e = largs[idx].indexOf(']', v)) >= 0) { String p = access.getProperty(largs[idx].substring(v + 2, e),null); - if(p==null) { + if (p==null) { p = System.getProperty(largs[idx].substring(v+2,e)); } ++e; @@ -183,7 +189,7 @@ public class AAFcli { while (rv && idx < largs.length) { // Allow Script to change Credential if (!gui) { - if("as".equalsIgnoreCase(largs[idx])) { + if ("as".equalsIgnoreCase(largs[idx])) { if (largs.length > ++idx) { // get Password from Props with ID as Key String user = largs[idx++]; @@ -209,8 +215,7 @@ public class AAFcli { } } else if ("expect".equalsIgnoreCase(largs[idx])) { expect.clear(); - if (largs.length > idx++) { - if (!"nothing".equals(largs[idx])) { + if ((largs.length > idx++)&&(!"nothing".equals(largs[idx]))) { for (String str : largs[idx].split(",")) { try { if ("Exception".equalsIgnoreCase(str)) { @@ -223,12 +228,11 @@ public class AAFcli { } } ++idx; - } - } + } continue; // Sleep, typically for reports, to allow DB to update // Milliseconds - + } else if ("sleep".equalsIgnoreCase(largs[idx])) { Integer t = Integer.parseInt(largs[++idx]); pw.println("sleep " + t); @@ -244,61 +248,68 @@ public class AAFcli { pw.println("Press to continue..."); ++idx; // Sonar insists we do something with the string, though it's only a pause. Not very helpful... - String sonar = new BufferedReader(new InputStreamReader(System.in)).readLine(); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String sonar; + try { + sonar = br.readLine(); + } finally { + br.close(); + } sonar=""; // this useless code brought to you by Sonar. pw.print(sonar); continue; } else if ("exit".equalsIgnoreCase(largs[idx])) { pw.println("Exiting..."); return false; + } else if ("set".equalsIgnoreCase(largs[idx])) { + while (largs.length > ++idx) { + int equals = largs[idx].indexOf('='); + String tag; + String value; + if (equals < 0) { + tag = largs[idx]; + value = access.getProperty(Config.AAF_APPPASS,null); + if (value==null) { + break; + } else { + value = access.decrypt(value, false); + if (value==null) { + break; + } + access.getProperties().put(tag, value); + pw.println("set " + tag + " "); + } + } else { + tag = largs[idx].substring(0, equals); + value = largs[idx].substring(++equals); + pw.println("set " + tag + ' ' + value); + } + boolean isTrue = "TRUE".equalsIgnoreCase(value); + if ("FORCE".equalsIgnoreCase(tag)) { + force = value; + } else if ("REQUEST".equalsIgnoreCase(tag)) { + request = isTrue; + } else if ("DETAILS".equalsIgnoreCase(tag)) { + showDetails = isTrue; + } else { + access.getProperties().put(tag, value); + } + } + continue; + // Allow Script to indicate if Failure is what is expected } - } - - if("REQUEST".equalsIgnoreCase(largs[idx])) { + } + + if ("REQUEST".equalsIgnoreCase(largs[idx])) { request=true; ++idx; - } else if("FORCE".equalsIgnoreCase(largs[idx])) { + } else if ("FORCE".equalsIgnoreCase(largs[idx])) { force="true"; ++idx; - } else if("DETAILS".equalsIgnoreCase(largs[idx])) { + } else if ("DETAILS".equalsIgnoreCase(largs[idx])) { showDetails=true; ++idx; - } else if ("set".equalsIgnoreCase(largs[idx])) { - while (largs.length > ++idx) { - int equals = largs[idx].indexOf('='); - String tag, value; - if (equals < 0) { - tag = largs[idx]; - value = access.getProperty(Config.AAF_APPPASS,null); - if(value==null) { - break; - } else { - value = access.decrypt(value, false); - if(value==null) { - break; - } - access.getProperties().put(tag, value); - pw.println("set " + tag + " "); - } - } else { - tag = largs[idx].substring(0, equals); - value = largs[idx].substring(++equals); - pw.println("set " + tag + ' ' + value); - } - boolean isTrue = "TRUE".equalsIgnoreCase(value); - if("FORCE".equalsIgnoreCase(tag)) { - force = value; - } else if("REQUEST".equalsIgnoreCase(tag)) { - request = isTrue; - } else if("DETAILS".equalsIgnoreCase(tag)) { - showDetails = isTrue; - } else { - access.getProperties().put(tag, value); - } - } - continue; - // Allow Script to indicate if Failure is what is expected } int ret = 0; @@ -335,7 +346,7 @@ public class AAFcli { } finally { clearSingleLineProperties(); } - rv = expect.isEmpty() ? true : expect.contains(ret); + rv = expect.isEmpty() || expect.contains(ret); if (verbose) { if (rv) { pw.println(); @@ -364,7 +375,8 @@ public class AAFcli { char last = 0; for (int i = 0; i < line.length(); ++i) { char ch; - if (Character.isWhitespace(ch = line.charAt(i))) { + ch = line.charAt(i); + if (Character.isWhitespace(ch)) { if (start || last==',') { continue; // trim } else if (quote != 0) { @@ -380,7 +392,7 @@ public class AAFcli { } else { quote = ch; } - } else if(ch=='|' && quote==0) { + } else if (ch=='|' && quote==0) { arr.add(sb.toString()); sb.setLength(0); start = true; @@ -405,7 +417,7 @@ public class AAFcli { System.out.println("For instance, C-b means hold ctrl key and press b, M-b means hold alt and press b\n"); System.out.println("Basic Keybindings:"); - System.out.println("\tC-l - clear screen"); + System.out.println("\tC-l - clear screen"); System.out.println("\tC-a - beginning of line"); System.out.println("\tC-e - end of line"); System.out.println("\tC-b - backward character (left arrow also works)"); @@ -430,17 +442,17 @@ public class AAFcli { */ public static void main(String[] args) { int rv = 0; - + try { AAFSSO aafsso = new AAFSSO(args); String noexit = aafsso.access().getProperty("no_exit"); try { PropAccess access = aafsso.access(); - if(aafsso.ok()) { + if (aafsso.ok()) { Define.set(access); AuthzEnv env = new AuthzEnv(access); - + Reader rdr = null; boolean exitOnFailure = true; /* @@ -450,7 +462,7 @@ public class AAFcli { for (int i = 0; i < args.length; ++i) { if ("-i".equalsIgnoreCase(args[i])) { rdr = new InputStreamReader(System.in); - // } else if("-o".equalsIgnoreCase(args[i])) { + // } else if ("-o".equalsIgnoreCase(args[i])) { // // shall we do something different? Output stream is // already done... } else if ("-f".equalsIgnoreCase(args[i])) { @@ -478,17 +490,17 @@ public class AAFcli { sb.append(args[i]); } } - + AAFConHttp aafcon = new AAFConHttp(access); -// +// // SecurityInfoC si = aafcon.securityInfo(); // Locator loc; - + aafsso.setLogDefault(); aafsso.setStdErrDefault(); - + // Note, with AAF Locator, this may not longer be necessary 3/2018 Jonathan - if(!aafsso.loginOnly()) { + if (!aafsso.loginOnly()) { // try { // loc = new AAFLocator(si,new URI(access.getProperty(Config.AAF_URL))); // } catch (Throwable t) { @@ -498,26 +510,26 @@ public class AAFcli { // // Other Access is done writing to StdOut and StdErr, reset Std out // aafsso.setLogDefault(); // } - + TIMEOUT = Integer.parseInt(access.getProperty(Config.AAF_CONN_TIMEOUT, Config.AAF_CONN_TIMEOUT_DEF)); -// HMangr hman = new HMangr(access, loc).readTimeout(TIMEOUT).apiVersion(Config.AAF_DEFAULT_VERSION); - - if(access.getProperty(Config.AAF_DEFAULT_REALM)==null) { +// HMangr hman = new HMangr(access, loc).readTimeout(TIMEOUT).apiVersion(Config.AAF_DEFAULT_API_VERSION); + + if (access.getProperty(Config.AAF_DEFAULT_REALM)==null) { access.setProperty(Config.AAF_DEFAULT_REALM, "people.osaaf.org"); aafsso.addProp(Config.AAF_DEFAULT_REALM, "people.osaaf.org"); } - - AAFcli aafcli = new AAFcli(access,env, new OutputStreamWriter(System.out), + + AAFcli aafcli = new AAFcli(access,env, new OutputStreamWriter(System.out), aafcon.hman(), aafcon.securityInfo(), aafcon.securityInfo().defSS); // new HBasicAuthSS(si,aafsso.user(), access.decrypt(aafsso.enc_pass(),false))); // } - if(!ignoreDelay) { + if (!ignoreDelay) { File delay = new File("aafcli.delay"); - if(delay.exists()) { + if (delay.exists()) { BufferedReader br = new BufferedReader(new FileReader(delay)); try { globalDelay = Integer.parseInt(br.readLine()); - } catch(Exception e) { + } catch (Exception e) { access.log(Level.DEBUG,e); } finally { br.close(); @@ -529,24 +541,24 @@ public class AAFcli { System.out.println("Type 'help' for short help or 'help -d' for detailed help with aafcli commands"); System.out.println("Type '?' for help with command line editing"); System.out.println("Type 'q', 'quit', or 'exit' to quit aafcli\n"); - + ConsoleReader reader = new ConsoleReader(); try { reader.setPrompt("aafcli > "); - + String line; while ((line = reader.readLine()) != null) { - showDetails = (line.contains("-d"))?true:false; - - if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("q") || line.equalsIgnoreCase("exit")) { + showDetails = (line.contains("-d")); + + if ("quit".equalsIgnoreCase(line) || "q".equalsIgnoreCase(line) || "exit".equalsIgnoreCase(line)) { break; - } else if (line.equalsIgnoreCase("--help -d") || line.equalsIgnoreCase("help -d") - || line.equalsIgnoreCase("help")) { + } else if ("--help -d".equalsIgnoreCase(line) || "help -d".equalsIgnoreCase(line) + || "help".equalsIgnoreCase(line)) { line = "--help"; - } else if (line.equalsIgnoreCase("cls")) { + } else if ("cls".equalsIgnoreCase(line)) { reader.clearScreen(); continue; - } else if (line.equalsIgnoreCase("?")) { + } else if ("?".equalsIgnoreCase(line)) { keyboardHelp(); continue; } @@ -563,12 +575,16 @@ public class AAFcli { } } else if (rdr != null) { BufferedReader br = new BufferedReader(rdr); - String line; - while ((line = br.readLine()) != null) { - if (!aafcli.eval(line) && exitOnFailure) { - rv = 1; - break; + try { + String line; + while ((line = br.readLine()) != null) { + if (!aafcli.eval(line) && exitOnFailure) { + rv = 1; + break; + } } + } finally { + br.close(); } } else { // just run the command line aafcli.verbose(false); @@ -577,10 +593,10 @@ public class AAFcli { } rv = aafcli.eval(sb.toString()) ? 0 : 1; } - + } finally { aafcli.close(); - + // Don't close if No Reader, or it's a Reader of Standard In if (rdr != null && !(rdr instanceof InputStreamReader)) { rdr.close(); @@ -596,7 +612,7 @@ public class AAFcli { System.err.println(err); } } - if(noexit==null) { + if (noexit==null) { return; } @@ -614,7 +630,7 @@ public class AAFcli { public boolean isTest() { return AAFcli.isTest; } - + public boolean isDetailed() { return AAFcli.showDetails; }