/******************************************************************************* * ============LICENSE_START==================================================== * * org.onap.aaf * * =========================================================================== * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * * =========================================================================== * * 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; import java.security.Principal; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.att.cadi.lur.LocalPermission; /** * Class to hold info from the User Perspective. * * */ public final class User { private static Map NULL_MAP = new HashMap(); public Principal principal; Map perms ; long permExpires; private final long interval; int count; // Note: This should only be used for Local RBAC (in memory) public User(Principal principal) { this.principal = principal; perms = NULL_MAP; permExpires = Long.MAX_VALUE; // Never. Well, until 64 bits of millis since 1970 expires... interval = 0L; count = 0; } public User(Principal principal, long expireInterval) { this.principal = principal; perms = NULL_MAP; expireInterval = Math.max(expireInterval, 0); // avoid < 1 interval = Math.max(AbsUserCache.MIN_INTERVAL,Math.min(expireInterval,AbsUserCache.MAX_INTERVAL)); permExpires = 0; count = 0; } public void renewPerm() { permExpires = System.currentTimeMillis()+interval; } public long permExpires() { return permExpires; } public boolean permExpired() { return System.currentTimeMillis() > permExpires; } public boolean noPerms() { return perms==null || perms.values().size()==0; } public void setNoPerms() { perms=NULL_MAP; permExpires = System.currentTimeMillis() + interval; } public boolean permsUnloaded() { return perms==null; } public synchronized void incCount() { ++count; } public synchronized void resetCount() { count=0; } public Map newMap() { return new ConcurrentHashMap(); } public void add(LocalPermission permission) { if(perms==NULL_MAP)perms=newMap(); perms.put(permission.getKey(),permission); } public void add(Map newMap, PERM permission) { newMap.put(permission.getKey(),permission); } public void setMap(Map newMap) { perms = newMap; } public boolean contains(Permission perm) { for (Permission p : perms.values()) { if (p.match(perm)) return true; } return false; } public void copyPermsTo(List sink) { sink.addAll(perms.values()); } public String toString() { StringBuilder sb = new StringBuilder(); sb.append(principal.getName()); sb.append('|'); boolean first = true; synchronized(perms) { for(Permission gp : perms.values()) { if(first) { first = false; sb.append(':'); } else { sb.append(','); } sb.append(gp.getKey()); } } return sb.toString(); } }