/******************************************************************************* * ============LICENSE_START==================================================== * * org.onap.aai * * =========================================================================== * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * * Copyright © 2017 Amdocs * * =========================================================================== * * 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. * * See the License for the specific language governing permissions and * * limitations under the License. * * ============LICENSE_END==================================================== * * * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * * ******************************************************************************/ package com.att.cadi.lur; import java.security.Principal; import java.util.List; import com.att.cadi.CachingLur; import com.att.cadi.CadiException; import com.att.cadi.CredVal; import com.att.cadi.Lur; import com.att.cadi.Permission; /** * EpiLUR * * Short for "Epic LUR". Be able to run through a series of LURs to obtain the validation needed. * * The pun is better for the other pattern... "TAF" (aka EpiTaf), but it's still the larger picture of * LURs that will be accomplished. * * FYI, the reason we separate LURs, rather than combine, is that Various User Repository Resources have * different Caching requirements. For instance, the Local User Repo (with stand alone names), never expire, but might be * refreshed with a change in Configuration File, while the Remote Service based LURs will need to expire at prescribed intervals * * */ public final class EpiLur implements Lur { private final Lur[] lurs; /** * EpiLur constructor * * Construct the EpiLur from variable TAF parameters * @param lurs * @throws CadiException */ public EpiLur(Lur ... lurs) throws CadiException{ this.lurs = lurs; if(lurs.length==0) throw new CadiException("Need at least one Lur implementation in constructor"); } public boolean fish(Principal bait, Permission pond) { if(pond==null) { return false; } boolean rv = false; Lur lur; for(int i=0;!rv && i permissions) { for(Lur lur : lurs) { lur.fishAll(bait, permissions); } } public void destroy() { for(Lur lur : lurs) { lur.destroy(); } } /** * Return the first Lur (if any) which also implements UserPass * @return */ public CredVal getUserPassImpl() { for(Lur lur : lurs) { if(lur instanceof CredVal) { return (CredVal)lur; } } return null; } // Never needed... Only EpiLur uses... public boolean handlesExclusively(Permission pond) { return false; } /** * Get Lur for index. Returns null if out of range * @param idx * @return */ public Lur get(int idx) { if(idx>=0 && idx)l).remove(id); } } } public Lur subLur(Class cls ) { for(Lur l : lurs) { if(l.getClass().isAssignableFrom(cls)) { return l; } } return null; } @Override public Permission createPerm(String p) { return new LocalPermission(p); } /* (non-Javadoc) * @see com.att.cadi.Lur#clear(java.security.Principal, java.lang.StringBuilder) */ @Override public void clear(Principal p, StringBuilder report) { for(Lur lur : lurs) { lur.clear(p, report); } } public String toString() { StringBuilder sb = new StringBuilder(); for(Lur lur : lurs) { sb.append(lur.getClass().getSimpleName()); sb.append(": Report\n"); sb.append(lur.toString()); sb.append('\n'); } return sb.toString(); } }