X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cadi%2Faaf%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fcadi%2Fconfigure%2FAgent.java;h=aa4e5743d15acfd8d0ee1c79a055b961a4cd4104;hb=12414fe43077e12d7ef711951b1633ad31d73573;hp=3facc93040f5cc94667e1c4ab3a04ff7818decb5;hpb=9fe1153c6bad63922e026d1db86e51b95a92c6cc;p=aaf%2Fauthz.git diff --git a/cadi/aaf/src/main/java/org/onap/aaf/cadi/configure/Agent.java b/cadi/aaf/src/main/java/org/onap/aaf/cadi/configure/Agent.java index 3facc930..aa4e5743 100644 --- a/cadi/aaf/src/main/java/org/onap/aaf/cadi/configure/Agent.java +++ b/cadi/aaf/src/main/java/org/onap/aaf/cadi/configure/Agent.java @@ -44,6 +44,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Properties; +import org.onap.aaf.cadi.Access; import org.onap.aaf.cadi.CadiException; import org.onap.aaf.cadi.CmdLine; import org.onap.aaf.cadi.LocatorException; @@ -163,10 +164,13 @@ public class Agent { env = new RosettaEnv(access.getProperties()); Deque cmds = new ArrayDeque(); for (String p : args) { + int eq; if ("-noexit".equalsIgnoreCase(p)) { doExit = false; - } else if (p.indexOf('=') < 0) { + } else if ((eq=p.indexOf('=')) < 0) { cmds.add(p); + } else { + access.setProperty(p.substring(0,eq), p.substring(eq+1)); } } @@ -261,13 +265,7 @@ public class Agent { keypairGen(trans, access, cmds); break; case "config": - if (access.getProperty(Config.CADI_PROP_FILES)!=null) { - // Get Properties from initialization Prop Files - config(trans,access,null,cmds); - } else { - // Get Properties from existing AAF Instance - config(trans,access,aafcon(access),cmds); - } + config(trans,access,args,cmds); break; case "validate": validate(access); @@ -303,7 +301,7 @@ public class Agent { } } - private static synchronized AAFCon aafcon(PropAccess access) throws APIException, CadiException, LocatorException { + private static synchronized AAFCon aafcon(Access access) throws APIException, CadiException, LocatorException { if (aafcon==null) { aafcon = new AAFConHttp(access,Config.CM_URL); } @@ -680,9 +678,12 @@ public class Agent { FileInputStream fis = new FileInputStream(new File(dir,a.getNs()+".cred.props")); try { props.load(fis); - fis.close(); - fis = new FileInputStream(new File(dir,a.getNs()+".chal")); - props.load(fis); + File chalFile = new File(dir,a.getNs()+".chal"); + if(chalFile.exists()) { + fis.close(); + fis = new FileInputStream(chalFile); + props.load(fis); + } } finally { fis.close(); } @@ -736,37 +737,58 @@ public class Agent { System.out.printf("Wrote %s\n", f.getCanonicalFile()); } - private static void config(Trans trans, PropAccess pa, AAFCon aafcon, Deque cmds) throws Exception { - + private static void config(Trans trans, PropAccess propAccess, String[] args, Deque cmds) throws Exception { TimeTaken tt = trans.start("Get Configuration", Env.REMOTE); try { final String fqi = fqi(cmds); Artifact arti = new Artifact(); - arti.setDir(pa.getProperty(Config.CADI_ETCDIR, ".")); + arti.setDir(propAccess.getProperty(Config.CADI_ETCDIR, ".")); arti.setNs(FQI.reverseDomain(fqi)); PropHolder loc = PropHolder.get(arti, "location.props"); PropHolder cred = PropHolder.get(arti,"cred.props"); PropHolder app= PropHolder.get(arti,"props"); + for(String c : args) { + int idx = c.indexOf('='); + if(idx>0) { + app.add(c.substring(0,idx), c.substring(idx+1)); + } + } app.add(Config.CADI_PROP_FILES, loc.getPath()+':'+cred.getPath()); for (String tag : LOC_TAGS) { - loc.add(tag, getProperty(pa, trans, false, tag, "%s: ",tag)); + loc.add(tag, getProperty(propAccess, trans, false, tag, "%s: ",tag)); } cred.add(Config.CADI_KEYFILE, cred.getKeyPath()); - cred.addEnc(Config.AAF_APPPASS, pa, null); + final String ssoAppID = propAccess.getProperty(Config.AAF_APPID); + if(fqi.equals(ssoAppID)) { + cred.addEnc(Config.AAF_APPPASS, propAccess, null); + // only Ask for Password when starting scratch + } else if(propAccess.getProperty(Config.CADI_PROP_FILES)==null) { + char[] pwd = AAFSSO.cons.readPassword("Password for %s: ", fqi); + if(pwd.length>0) { + cred.addEnc(Config.AAF_APPPASS, new String(pwd)); + } + } + + app.add(Config.AAF_LOCATE_URL, propAccess, null); + for(Entry aaf_loc_prop : propAccess.getProperties().entrySet()) { + String key = aaf_loc_prop.getKey().toString(); + if(key.startsWith("aaf_locator")) { + app.add(key, aaf_loc_prop.getValue().toString()); + } + } - app.add(Config.AAF_LOCATE_URL, pa, null); app.add(Config.AAF_APPID, fqi); - app.add(Config.AAF_URL, pa, Defaults.AAF_URL); + app.add(Config.AAF_URL, propAccess, Defaults.AAF_URL); - String cts = pa.getProperty(Config.CADI_TRUSTSTORE); + String cts = propAccess.getProperty(Config.CADI_TRUSTSTORE); if (cts!=null) { File origTruststore = new File(cts); if (!origTruststore.exists()) { // Try same directory as cadi_prop_files - String cpf = pa.getProperty(Config.CADI_PROP_FILES); + String cpf = propAccess.getProperty(Config.CADI_PROP_FILES); if (cpf!=null) { for (String f : Split.split(File.pathSeparatorChar, cpf)) { File fcpf = new File(f); @@ -789,57 +811,60 @@ public class Agent { Files.copy(origTruststore.toPath(), newTruststore.toPath()); } - cred.add(Config.CADI_TRUSTSTORE, pa, newTruststore.getCanonicalPath()); - cred.add(Config.CADI_TRUSTSTORE_PASSWORD, pa, "changeit" /* Java default */); + cred.add(Config.CADI_TRUSTSTORE, propAccess, newTruststore.getCanonicalPath()); + cred.addEnc(Config.CADI_TRUSTSTORE_PASSWORD, propAccess, "changeit" /* Java default */); - if (aafcon!=null) { // get Properties from Remote AAF - final String locator = getProperty(pa,aafcon.env,false,Config.AAF_LOCATE_URL,"AAF Locator URL: "); - - Future acf = aafcon.client(new SingleEndpointLocator(locator)) - .read("/configure/"+fqi+"/aaf", configDF); - if (acf.get(TIMEOUT)) { - for (Props props : acf.value.getProps()) { - PropHolder ph = CRED_TAGS.contains(props.getTag())?cred:app; - if(props.getTag().endsWith("_password")) { - ph.addEnc(props.getTag(), props.getValue()); - } else { - ph.add(props.getTag(), props.getValue()); - } + String cpf = propAccess.getProperty(Config.CADI_PROP_FILES); + if (cpf!=null){ + for (String f : Split.split(File.pathSeparatorChar, cpf)) { + System.out.format("Reading %s\n",f); + FileInputStream fis = new FileInputStream(f); + try { + Properties props = new Properties(); + props.load(fis); + for (Entry prop : props.entrySet()) { + boolean lower = true; + String key = prop.getKey().toString(); + for(int i=0;lower && i prop : props.entrySet()) { - boolean lower = true; - String key = prop.getKey().toString(); - for(int i=0;lower && i acf = aafcon.client(new SingleEndpointLocator(locator)) + .read("/configure/"+fqi+"/aaf", configDF); + if (acf.get(TIMEOUT)) { + for (Props props : acf.value.getProps()) { + PropHolder ph = CRED_TAGS.contains(props.getTag())?cred:app; + if(props.getTag().endsWith("_password")) { + ph.addEnc(props.getTag(), props.getValue()); + } else { + ph.add(props.getTag(), props.getValue()); + } } + } else if (acf.code()==401){ + trans.error().log("Bad Password sent to AAF"); + } else if (acf.code()==404){ + trans.error().log("This version of AAF does not support remote Properties"); + } else { + trans.error().log(errMsg.toMsg(acf)); } } }