Prepare for release 2.1.18
[aaf/cadi.git] / shiro / src / main / java / org / onap / aaf / cadi / shiro / AAFAuthorizationInfo.java
index 4b0993b..247683a 100644 (file)
@@ -29,8 +29,7 @@ import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.Permission;
 import org.onap.aaf.cadi.Access;
 import org.onap.aaf.cadi.Access.Level;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.aaf.cadi.aaf.AAFPermission;
 
 /**
  * We treat "roles" and "permissions" in a similar way for first pass.
@@ -41,21 +40,30 @@ import org.slf4j.LoggerFactory;
 public class AAFAuthorizationInfo implements AuthorizationInfo {
        private static final long serialVersionUID = -4805388954462426018L;
        
-       final static  Logger logger =  LoggerFactory.getLogger(AAFAuthorizationInfo.class);
-       
        private Access access;
        private Principal bait;
        private List<org.onap.aaf.cadi.Permission> pond;
-       private ArrayList<String> sPerms;
-       private ArrayList<Permission> oPerms;
+       // Use these to save conversions
+       private List<org.onap.aaf.cadi.Permission> cPerms;
+       private List<Permission> oPerms;
+       private List<String> sPerms;
+
+       public AAFAuthorizationInfo(Access access, Principal bait) {
+               this.access = access;
+               this.bait = bait;
+               cPerms=null;
+               oPerms=null;
+               sPerms=null;
+               pond=null;
+       }
 
        public AAFAuthorizationInfo(Access access, Principal bait, List<org.onap.aaf.cadi.Permission> pond) {
                this.access = access;
                this.bait = bait;
                this.pond = pond;
-               sPerms=null;
                oPerms=null;
-
+               sPerms=null;
+               cPerms=null;
        }
        
        public Principal principal() {
@@ -64,38 +72,56 @@ public class AAFAuthorizationInfo implements AuthorizationInfo {
        
        @Override
        public Collection<Permission> getObjectPermissions() {
-//             logger.info("AAFAuthorizationInfo.getObjectPermissions");
+               access.log(Level.DEBUG, "AAFAuthorizationInfo.getObjectPermissions");
                synchronized(bait) {
                        if(oPerms == null) {
-                               oPerms = new ArrayList<Permission>(); 
-                               for(final org.onap.aaf.cadi.Permission p : pond) {
-                                       oPerms.add(new AAFShiroPermission(p));
+                               if (pond != null) {
+                                       oPerms = new ArrayList<Permission>();
+                                       for(final org.onap.aaf.cadi.Permission p : pond) {
+                                               oPerms.add(new AAFShiroPermission(p));
+                                       }
+                               } else {
+                                       oPerms = new ArrayList<>();
+                                       if (cPerms == null) {
+                                               cPerms = new ArrayList<>();
+                                               AAFRealm.singleton.authz.fishAll(bait, cPerms);
+                                       }
+                                       for (final org.onap.aaf.cadi.Permission p : cPerms) {
+                                               oPerms.add(new AAFShiroPermission(p));
+                                       }
                                }
                        }
                }
-               
-               
                return oPerms;
        }
 
        @Override
        public Collection<String> getRoles() {
-//             logger.info("AAFAuthorizationInfo.getRoles");
+               access.log(Level.DEBUG,"AAFAuthorizationInfo.getRoles");
                // Until we decide to make Roles available, tie into String based permissions.
                return getStringPermissions();
        }
 
        @Override
        public Collection<String> getStringPermissions() {
-       
-//             logger.info("AAFAuthorizationInfo.getStringPermissions");
+               access.log(Level.DEBUG,"AAFAuthorizationInfo.getStringPermissions");
                synchronized(bait) {
                        if(sPerms == null) {
-                               sPerms = new ArrayList<String>(); 
-                               for(org.onap.aaf.cadi.Permission p : pond) {
-                                       sPerms.add(p.getKey().replace("|",":"));
-                                       logger.info("the user has  " +p.getKey());
-                                       
+                               if (pond != null) {
+                                       sPerms = new ArrayList<String>();
+                                       for(org.onap.aaf.cadi.Permission p : pond) {
+                                               sPerms.add(p.getKey().replace("|", ":"));
+                                               access.printf(Level.INFO, "%s has %s", bait.getName(), p.getKey());
+                                       }
+                               } else {
+                                       sPerms = new ArrayList<>();
+                                       if (cPerms == null) {
+                                               cPerms = new ArrayList<>();
+                                               AAFRealm.singleton.authz.fishAll(bait, cPerms);
+                                       }
+                                       for (final org.onap.aaf.cadi.Permission p : cPerms) {
+                                               sPerms.add(p.getKey());
+                                       }
                                }
                        }
                }