X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cadi%2Faaf%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fcadi%2Fregister%2FRegistrationCreator.java;h=fc3c18b0a09f021e9815e34515d06767a3bf78d7;hb=4a5f63f7f149ecba9556ee67a4ca00fb51845bf0;hp=7e519c52dc34af55ce0baf7a14b6085c98c235d4;hpb=12414fe43077e12d7ef711951b1633ad31d73573;p=aaf%2Fauthz.git diff --git a/cadi/aaf/src/main/java/org/onap/aaf/cadi/register/RegistrationCreator.java b/cadi/aaf/src/main/java/org/onap/aaf/cadi/register/RegistrationCreator.java index 7e519c52..fc3c18b0 100644 --- a/cadi/aaf/src/main/java/org/onap/aaf/cadi/register/RegistrationCreator.java +++ b/cadi/aaf/src/main/java/org/onap/aaf/cadi/register/RegistrationCreator.java @@ -20,21 +20,22 @@ package org.onap.aaf.cadi.register; -import java.net.Inet4Address; import java.net.UnknownHostException; import java.util.List; import org.onap.aaf.cadi.Access; +import org.onap.aaf.cadi.Access.Level; import org.onap.aaf.cadi.CadiException; import org.onap.aaf.cadi.aaf.Defaults; import org.onap.aaf.cadi.config.Config; +import org.onap.aaf.cadi.config.RegistrationPropHolder; import org.onap.aaf.cadi.util.Split; import locate.v1_0.MgmtEndpoint; +import locate.v1_0.MgmtEndpoint.SpecialPorts; import locate.v1_0.MgmtEndpoints; public class RegistrationCreator { - private static final String MUST_BE_DEFINED = " must be defined\n"; private Access access; public RegistrationCreator(Access access) { @@ -47,204 +48,201 @@ public class RegistrationCreator { MgmtEndpoint defData = null; MgmtEndpoint locate = null; - - StringBuilder errs = new StringBuilder(); try { - String hostname = access.getProperty(Config.HOSTNAME, null); - if (hostname==null) { - hostname = Inet4Address.getLocalHost().getHostName(); - } - if (hostname==null) { - errs.append(Config.HOSTNAME); - errs.append(MUST_BE_DEFINED); - } - - Float latitude=null; - String slatitude = access.getProperty(Config.CADI_LATITUDE, null); - if(slatitude == null) { - errs.append(Config.CADI_LATITUDE); - errs.append(MUST_BE_DEFINED); - } else { - latitude = Float.parseFloat(slatitude); - } - - Float longitude=null; - String slongitude = access.getProperty(Config.CADI_LONGITUDE, null); - if(slongitude == null) { - errs.append(Config.CADI_LONGITUDE); - errs.append(MUST_BE_DEFINED); - } else { - longitude = Float.parseFloat(slongitude); - } - - if(errs.length()>0) { - throw new CadiException(errs.toString()); - } - String dot_le; - String ns; String version=null; - String lentries = access.getProperty(Config.AAF_LOCATOR_CONTAINER, null); - if(lentries==null) { - lentries=""; - } else { - lentries=',' + lentries; // "" makes a blank default Public Entry - } - - String defaultName = null; - String str; - int public_port = port; - // Note: only one of the ports can be public... Therefore, only the la - for(String le : Split.splitTrim(',', lentries)) { - dot_le = le.isEmpty()?"":"."+le; - str = access.getProperty(Config.AAF_LOCATOR_PUBLIC_PORT+dot_le, null); - if(str!=null) { // Get Public Port - public_port = Integer.decode(str); - } - } + String defProtocol="https"; - String public_hostname = hostname; - for(String le : Split.splitTrim(',', lentries)) { - dot_le = le.isEmpty()?"":"."+le; - String ph = access.getProperty(Config.AAF_LOCATOR_PUBLIC_HOSTNAME+dot_le,null); - if( ph != null) { - public_hostname=ph; - } - } + RegistrationPropHolder ph = new RegistrationPropHolder(access, port); - String default_fqdn = access.getProperty(Config.AAF_LOCATOR_FQDN, public_hostname); - - + String firstPrivateHostname = null; // Now, loop through by Container - for(String le : Split.splitTrim(',', lentries)) { - // Add variable entries - String names; - if(le.length()>0) { - dot_le = '.' + le; - names = access.getProperty(Config.AAF_LOCATOR_NAMES+dot_le,null); - if(names==null) { - // Go for Default - names = access.getProperty(Config.AAF_LOCATOR_NAMES,""); - } + for(String le : Split.splitTrim(',', ph.lcontainer)) { + if(le.isEmpty()) { + dot_le = le; } else { - dot_le = ""; - names=access.getProperty(Config.AAF_LOCATOR_NAMES,dot_le); + dot_le = "."+le; } - - for(String name : Split.splitTrim(',', names)) { + + for(String entry : Split.splitTrim(',', ph.lentries)) { if(defData==null) { defData = locate = new MgmtEndpoint(); - defaultName = name; version = access.getProperty(Config.AAF_LOCATOR_VERSION, Defaults.AAF_VERSION); - locate.setProtocol(access.getProperty(Config.AAF_LOCATOR_PROTOCOL,null)); + locate.setProtocol(defProtocol = access.getProperty(Config.AAF_LOCATOR_PROTOCOL,defProtocol)); List ls = locate.getSubprotocol(); for(String sp : Split.splitTrim(',', access.getProperty(Config.AAF_LOCATOR_SUBPROTOCOL,""))) { ls.add(sp); } - locate.setLatitude(latitude); - locate.setLongitude(longitude); + locate.setLatitude(ph.latitude); + locate.setLongitude(ph.longitude); } else { locate = copy(defData); } - str = access.getProperty(Config.HOSTNAME+dot_le, null); - if(str==null) { - str = access.getProperty(Config.HOSTNAME, hostname); - } - locate.setHostname(hostname); - - ns = access.getProperty(Config.AAF_LOCATOR_NS+dot_le,null); - if(ns==null) { - ns = access.getProperty(Config.AAF_LOCATOR_NS,""); - } - switch(ns) { - case Defaults.AAF_NS: - ns = access.getProperty(Config.AAF_ROOT_NS, ""); - // Fallthrough on purpose. - } - - String ns_dot; - if(ns.isEmpty()) { - ns_dot = ns; - } else { - ns_dot = ns + '.'; - } - - String container_id = access.getProperty(Config.AAF_LOCATOR_CONTAINER_ID+dot_le, ""); - if(!container_id.isEmpty()) { - ns_dot = container_id + '.' + ns_dot; - } - - if(!le.isEmpty()) { - ns_dot = le + '.' + ns_dot; - } - - if(name.isEmpty()) { - locate.setName(ns_dot + defaultName); - } else { - locate.setName(ns_dot + name); - } - - if(dot_le.isEmpty()) { - locate.setHostname(access.getProperty(Config.AAF_LOCATOR_FQDN, default_fqdn)); + locate.setName(ph.getEntryName(entry,dot_le)); + /* Cover the situation where there is a Container, and multiple locator Entries, + * the first of which is the only real private FQDN + * example: oauth + * aaf_locator_entries=oauth,token,introspect + * + * Entries for token and introspect, but they point to oauth service. + */ + String locateHostname; + if(le.isEmpty()) { + locateHostname=ph.getEntryFQDN(entry, dot_le); + } else if(firstPrivateHostname==null) { + firstPrivateHostname=locateHostname=ph.getEntryFQDN(entry, dot_le); } else { - str = access.getProperty(Config.AAF_LOCATOR_FQDN+dot_le, null); - if(str==null) { - locate.setHostname(default_fqdn); - } else { - String container_ns = access.getProperty(Config.AAF_LOCATOR_CONTAINER_NS+dot_le, ""); - str = str.replace("%CNS", container_ns); - String container = access.getProperty(Config.AAF_LOCATOR_CONTAINER+dot_le, ""); - str = str.replace("%C", container); - str = str.replace("%NS", ns); - str = str.replace("%N", name); - str = str.replace("%DF", default_fqdn); - str = str.replace("%PH", public_hostname); - locate.setHostname(str); - } + locateHostname=firstPrivateHostname; } - if(le.isEmpty()) { - locate.setPort(public_port); - } else { - locate.setPort(port); - } - + locate.setHostname(locateHostname); + locate.setPort(ph.getEntryPort(dot_le)); + String specificVersion = access.getProperty(Config.AAF_LOCATOR_VERSION + dot_le,null); if(specificVersion == null && locate == defData) { specificVersion = version; } if(specificVersion!=null) { String split[] = Split.splitTrim('.', specificVersion); - locate.setPkg(split.length>3?Integer.parseInt(split[3]):0); - locate.setPatch(split.length>2?Integer.parseInt(split[2]):0); - locate.setMinor(split.length>1?Integer.parseInt(split[1]):0); - locate.setMajor(split.length>0?Integer.parseInt(split[0]):0); + String deply[]= Split.splitTrim('.', access.getProperty(Config.AAF_DEPLOYED_VERSION, "")); + locate.setMajor(best(split,deply,0)); + locate.setMinor(best(split,deply,1)); + locate.setPatch(best(split,deply,2)); + locate.setPkg(best(split,deply,3)); } - String protocol = access.getProperty(Config.AAF_LOCATOR_PROTOCOL + dot_le, null); + String protocol = access.getProperty(Config.AAF_LOCATOR_PROTOCOL + dot_le, defProtocol); if (protocol!=null) { locate.setProtocol(protocol); - String subprotocols = access.getProperty(Config.AAF_LOCATOR_SUBPROTOCOL + dot_le, null); - if(subprotocols!=null) { - List ls = locate.getSubprotocol(); - for (String s : Split.split(',', subprotocols)) { - ls.add(s); - } - } + List ls = locate.getSubprotocol(); + // ls cannot be null, per generated getSubprotocol code + if(ls.isEmpty()) { + String subprotocols = access.getProperty(Config.AAF_LOCATOR_SUBPROTOCOL + dot_le, null); + if(subprotocols==null) { + subprotocols = access.getProperty(Config.CADI_PROTOCOLS, null); + } + if(subprotocols!=null) { + for (String s : Split.split(',', subprotocols)) { + ls.add(s); + } + } else { + access.printf(Level.ERROR, "%s is required for Locator Registration of %s", + Config.AAF_LOCATOR_SUBPROTOCOL,Config.AAF_LOCATOR_PROTOCOL); + } + } + lme.add(locate); + } else { + access.printf(Level.ERROR, "%s is required for Locator Registration",Config.AAF_LOCATOR_PROTOCOL); } - lme.add(locate); } } } catch (NumberFormatException | UnknownHostException e) { throw new CadiException("Error extracting Data from Properties for Registrar",e); } - + + if(access.willLog(Level.INFO)) { + access.log(Level.INFO, print(new StringBuilder(),me.getMgmtEndpoint())); + } return me; } + /* + * Find the best version between Actual Interface and Deployed version + */ + private int best(String[] split, String[] deploy, int i) { + StringBuilder sb = new StringBuilder(); + char c; + String s; + if(split.length>i) { + s=split[i]; + for(int j=0;ji) { + s=deploy[i]; + for(int j=0;j lme) { + int cnt = 0; + for(MgmtEndpoint m : lme) { + print(sb,cnt++,m); + } + return sb; + } + + private void print(StringBuilder out, int cnt, MgmtEndpoint mep) { + out.append("\nManagement Endpoint - "); + out.append(cnt); + out.append("\n\tName: "); + out.append(mep.getName()); + out.append("\n\tHostname: "); + out.append(mep.getHostname()); + out.append("\n\tLatitude: "); + out.append(mep.getLatitude()); + out.append("\n\tLongitude: "); + out.append(mep.getLongitude()); + out.append("\n\tVersion: "); + out.append(mep.getMajor()); + out.append('.'); + out.append(mep.getMinor()); + out.append('.'); + out.append(mep.getPatch()); + out.append('.'); + out.append(mep.getPkg()); + out.append("\n\tPort: "); + out.append(mep.getPort()); + out.append("\n\tProtocol: "); + out.append(mep.getProtocol()); + out.append("\n\tSpecial Ports:"); + for( SpecialPorts sp : mep.getSpecialPorts()) { + out.append("\n\t\tName: "); + out.append(sp.getName()); + out.append("\n\t\tPort: "); + out.append(sp.getPort()); + out.append("\n\t\tProtocol: "); + out.append(sp.getProtocol()); + out.append("\n\t\t Versions: "); + boolean first = true; + for(String s : sp.getProtocolVersions()) { + if(first) { + first = false; + } else { + out.append(','); + } + out.append(s); + } + } + boolean first = true; + out.append("\n\tSubProtocol: "); + for(String s : mep.getSubprotocol()) { + if(first) { + first = false; + } else { + out.append(','); + } + out.append(s); + } + } + private MgmtEndpoint copy(MgmtEndpoint mep) { MgmtEndpoint out = new MgmtEndpoint(); out.setName(mep.getName()); @@ -253,8 +251,8 @@ public class RegistrationCreator { out.setLongitude(mep.getLongitude()); out.setMajor(mep.getMajor()); out.setMinor(mep.getMinor()); - out.setPkg(mep.getPkg()); out.setPatch(mep.getPatch()); + out.setPkg(mep.getPkg()); out.setPort(mep.getPort()); out.setProtocol(mep.getProtocol()); out.getSpecialPorts().addAll(mep.getSpecialPorts());