Merge "Remove the declaration of thrown exception 'java.io.IOException', as it cannot...
authorJonathan Gathman <jonathan.gathman@att.com>
Tue, 17 Sep 2019 08:25:26 +0000 (08:25 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 17 Sep 2019 08:25:26 +0000 (08:25 +0000)
26 files changed:
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/approvalsets/Loader.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/BatchDataView.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CQLBatchLoop.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CacheChange.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/UserRole.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Visitor.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/ApprovedRpt.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/bodies/NotifyBody.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/bodies/NotifyCredBody.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/bodies/OneMonthNotifyCredBody.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/bodies/OneWeekNotifyCredBody.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/bodies/TwoMonthNotifyCredBody.java
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/bodies/TwoWeeksNotifyCredBody.java
auth/auth-cass/src/main/java/org/onap/aaf/auth/dao/cass/ApprovalDAO.java
auth/auth-cass/src/main/java/org/onap/aaf/auth/dao/hl/Question.java
auth/auth-certman/src/main/java/org/onap/aaf/auth/cm/service/CMService.java
auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/role/List.java
auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/user/ListForCreds.java
auth/auth-core/src/main/java/org/onap/aaf/auth/env/AuthzTransFilter.java
auth/auth-service/src/main/java/org/onap/aaf/auth/service/api/API_Creds.java
cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFAuthn.java
cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFCon.java
cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AbsAAFLocator.java
cadi/core/src/main/java/org/onap/aaf/cadi/User.java
cadi/core/src/main/java/org/onap/aaf/cadi/util/CSV.java

index 8bade4a..d91c42c 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@ package org.onap.aaf.auth.batch.approvalsets;
 
 import org.onap.aaf.cadi.CadiException;
 
+@FunctionalInterface
 public interface Loader<T> {
     public T load() throws CadiException;
 }
index d3209a0..9906f49 100644 (file)
@@ -3,6 +3,8 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modification Copyright (c) 2019 IBM
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,7 +22,6 @@
  */
 package org.onap.aaf.auth.batch.helpers;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -34,7 +35,6 @@ import org.onap.aaf.auth.dao.cass.UserRoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.cadi.Hash;
-import org.onap.aaf.misc.env.APIException;
 import org.onap.aaf.misc.env.TimeTaken;
 import org.onap.aaf.misc.env.Trans;
 import org.onap.aaf.misc.env.util.Chrono;
@@ -135,8 +135,6 @@ public class BatchDataView implements DataView {
         sb.append(add.id.toString());
         sb.append(COMMA_QUOTE);
         sb.append(add.approver);
-//        sb.append(QUOTE_COMMA_QUOTE);
-//        sb.append(Chrono.utcStamp(add.last_notified));
         sb.append(QUOTE_COMMA_QUOTE);
         sb.append(add.memo.replace("'", "''"));
         sb.append(QUOTE_COMMA_QUOTE);
index 1a1bdf3..9cd7341 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -51,15 +52,14 @@ public class CQLBatchLoop {
     /**
      * Assume this is another line in the Batch
      * @return
-     */
+     */        
     public StringBuilder inc() {
-        if(i>=maxBatch || current.length()+sb.length()>MAX_CHARS) {
-            if(i>0) {
-                cqlBatch.execute(dryRun);
+        if((i>=maxBatch || current.length()+sb.length()>MAX_CHARS)&&(i>0)) {
+            
+                   cqlBatch.execute(dryRun);
                 i = -1;
                 incBatch();
-            }
-        }
+    }
         if(i<0) {
             cqlBatch.begin();
             i=0;
index a4cfcbe..84d7b5a 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,6 +32,7 @@ public class CacheChange<T extends CacheChange.Data> {
         removed = new ArrayList<>();
     }
     
+    @FunctionalInterface 
     interface Data {
         public abstract void expunge();
     }
index 258f430..6f228e0 100644 (file)
@@ -119,6 +119,7 @@ public class LastNotified {
         return last;
     }
     
+    @FunctionalInterface
     private interface MarkDelete {
         boolean process(String fullKey, Date last);
     }
index d5c0d77..dd24d7d 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -128,10 +129,10 @@ public class UserRole implements Cloneable, CacheChange.Data  {
 
     public static void load(Trans trans, CSV csv, Creator<UserRole> creator, Visitor<UserRole> visitor) throws IOException, CadiException {
 //        public UserRole(String user, String role, String ns, String rname, Date expires) {
-        csv.visit( row -> {
+        csv.visit( row -> 
             visitor.visit(new UserRole(row.get(1),row.get(2),row.get(3),row.get(4),
-                new Date(Long.parseLong(row.get(6)))));
-        });
+                new Date(Long.parseLong(row.get(6)))))
+        );
     }
     
     private static void load(Trans trans, Session session, Creator<UserRole> creator, String where, Visitor<UserRole> visitor) {
index 3e7b30b..38a7647 100644 (file)
@@ -3,7 +3,6 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +20,6 @@
 
 package org.onap.aaf.auth.batch.helpers;
 
-@FunctionalInterface
 public interface Visitor<T> {
     void visit(T t);
     
index ea196b1..880173b 100644 (file)
@@ -3,7 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 IBM.
+ * Modifications Copyright (C) 2018 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -52,7 +52,6 @@ public class ApprovedRpt extends Batch {
     
     private static final String APPR_RPT = "ApprovedRpt";
     private static final String CSV = ".csv";
-    private static final String INFO = "info";
     private Date now;
     private Writer approvedW;
     private CSV historyR;
@@ -64,6 +63,13 @@ public class ApprovedRpt extends Batch {
         
         TimeTaken tt0 = trans.start("Cassandra Initialization", Env.SUB);
         try {
+//            TimeTaken tt = trans.start("Connect to Cluster", Env.REMOTE);
+//            try {
+//                session = cluster.connect();
+//            } finally {
+//                tt.done();
+//            }
+            
             now = new Date();
             String sdate = Chrono.dateOnlyStamp(now);
             File file = new File(logDir(),APPR_RPT + sdate +CSV);
@@ -80,17 +86,32 @@ public class ApprovedRpt extends Batch {
 
     @Override
     protected void run(AuthzTrans trans) {
-        try {
-            Map<String,Boolean> checked = new TreeMap<String, Boolean>();
-            
-            final AuthzTrans transNoAvg = trans.env().newTransNoAvg();
-            int totalLoaded = 0;
-            Date d;
+        try {          
+//            ResultSet results;
+//            Statement stmt = new SimpleStatement( "select dateof(id), approver, status, user, type, memo from authz.approved;" );
+//            results = session.execute(stmt);
+//            Iterator<Row> iter = results.iterator();
+//            Row row;
+            /*
+             *             while (iter.hasNext()) {
+                ++totalLoaded;
+                row = iter.next();
+                d = row.getTimestamp(0);
+                if(d.after(begin)) {
+                    approvedW.row("aprvd",
+                            Chrono.dateOnlyStamp(d),
+                            row.getString(1),
+                            row.getString(2),
+                            row.getString(3),
+                            row.getString(4),
+                            row.getString(5)
+                    );
+                }
+            }
+             */
             GregorianCalendar gc = new GregorianCalendar();
             gc.add(GregorianCalendar.MONTH, -2);
-            Date begin = gc.getTime();
             approvedW.comment("date, approver, status, user, role, memo");
-            
             historyR.visit(row -> {
                 String s = row.get(7);
                 if(s.equals(yr_mon)) {
index ec8d145..6c95f02 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -205,15 +206,13 @@ public abstract class NotifyBody {
         for(String cls : classNames) {
             try {
                 Class<?> c = cl.loadClass(cls);
-                if(c!=null) {
-                    if(!Modifier.isAbstract(c.getModifiers())) {
-                        Constructor<?> cst = c.getConstructor(Access.class);
+                if((c!=null)&&(!Modifier.isAbstract(c.getModifiers()))) {
+                       Constructor<?> cst = c.getConstructor(Access.class);
                         NotifyBody nb = (NotifyBody)cst.newInstance(access);
                         if(nb!=null) {
                             bodyMap.put("info|"+nb.name, nb);
                             bodyMap.put(nb.type+'|'+nb.name, nb);
-                        }
-                    }
+                          }
                 }
             } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                 e.printStackTrace();
index 417d4be..82d1a62 100644 (file)
@@ -3,6 +3,8 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modification Copyright (c) 2019 IBM
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package org.onap.aaf.auth.batch.reports.bodies;
 
-import java.io.IOException;
-
 import org.onap.aaf.auth.batch.helpers.ExpireRange;
 import org.onap.aaf.cadi.Access;
 
 public class OneMonthNotifyCredBody extends NotifyCredBody {
-    public OneMonthNotifyCredBody(Access access){
+    public OneMonthNotifyCredBody(Access access) throws IOException {
         super(access, ExpireRange.ONE_MONTH);
     }
     
index dae48d8..caa4478 100644 (file)
@@ -3,6 +3,8 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modification Copyright (c) 2019 IBM
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package org.onap.aaf.auth.batch.reports.bodies;
 
-import java.io.IOException;
-
 import org.onap.aaf.auth.batch.helpers.ExpireRange;
 import org.onap.aaf.cadi.Access;
 
 public class OneWeekNotifyCredBody extends NotifyCredBody {
-    public OneWeekNotifyCredBody(Access access){
+    public OneWeekNotifyCredBody(Access access) throws IOException {
         super(access, ExpireRange.ONE_WEEK);
     }
 
index 7e90bbb..5583dc0 100644 (file)
@@ -57,6 +57,7 @@ public class ApprovalDAO extends CassDAOImpl<AuthzTrans,ApprovalDAO.Data> {
     private PSInfo psByTicket;
     private PSInfo psByStatus;
 
+    private static final int KEYLIMIT = 1;
     
     public ApprovalDAO(AuthzTrans trans, Cluster cluster, String keyspace) {
         super(trans, ApprovalDAO.class.getSimpleName(),cluster,keyspace,Data.class,TABLE, readConsistency(trans,TABLE), writeConsistency(trans,TABLE));
@@ -71,7 +72,6 @@ public class ApprovalDAO extends CassDAOImpl<AuthzTrans,ApprovalDAO.Data> {
         init(trans);
     }
 
-    private static final int KEYLIMIT = 1;
     public static class Data {
         public UUID   id;
         public UUID   ticket;
@@ -81,7 +81,6 @@ public class ApprovalDAO extends CassDAOImpl<AuthzTrans,ApprovalDAO.Data> {
         public String status;
         public String memo;
         public String operation;
-//        public Date last_notified;
         public Date updated;
     }
     
@@ -102,7 +101,6 @@ public class ApprovalDAO extends CassDAOImpl<AuthzTrans,ApprovalDAO.Data> {
             data.status = row.getString(5);
             data.memo = row.getString(6);
             data.operation = row.getString(7);
-//            data.last_notified = row.getTimestamp(8);
             // This is used to get "WRITETIME(STATUS)" from Approval, which gives us an "updated" 
             if (row.getColumnDefinitions().size()>8) {
                 // Rows reported in MicroSeconds
@@ -117,8 +115,8 @@ public class ApprovalDAO extends CassDAOImpl<AuthzTrans,ApprovalDAO.Data> {
         }
 
         @Override
-        protected void body(Data data, int _idx, Object[] obj) {
-                int idx = _idx;
+        protected void body(Data data, int idxParam, Object[] obj) {
+                int idx = idxParam;
             obj[idx]=data.ticket;
             obj[++idx]=data.user;
             obj[++idx]=data.approver;
@@ -126,7 +124,6 @@ public class ApprovalDAO extends CassDAOImpl<AuthzTrans,ApprovalDAO.Data> {
             obj[++idx]=data.status;
             obj[++idx]=data.memo;
             obj[++idx]=data.operation;
-//            obj[++idx]=data.last_notified;
         }
     }    
     
index 1b20b90..c7ee593 100644 (file)
@@ -26,12 +26,13 @@ import java.nio.ByteBuffer;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.TreeSet;
 
 import org.onap.aaf.auth.common.Define;
@@ -496,6 +497,7 @@ public class Question {
             Result<List<NsDAO.Data>> rld = nsDAO.read(trans, lookup);
             if (rld.isOKhasData()) {
                 nsd=rld.value.get(0);
+                lookup = nsd.parent;
                 if (type.type == nsd.type) {
                     return Result.ok(nsd);
                 } else {
@@ -898,18 +900,28 @@ public class Question {
                 }
             } else {
                 Date now = new Date();
-                // Bug noticed 6/22. Sorting on the result can cause Concurrency Issues.     
-                List<CredDAO.Data> cddl;
+                // Bug noticed 6/22. Sorting on the result can cause Concurrency Issues.  
+                // 9/14/2019. Use TreeSet for sorting, and using only the LAST of a Tagged entry
+                Collection<CredDAO.Data> cddl;
                 if (result.value.size() > 1) {
-                    cddl = new ArrayList<>(result.value.size());
-                    for (CredDAO.Data old : result.value) {
-                        if (old.type==CredDAO.BASIC_AUTH || old.type==CredDAO.BASIC_AUTH_SHA256) {
-                            cddl.add(old);
+                       Map<String,CredDAO.Data> mcdd = new TreeMap<>();
+                       CredDAO.Data cdd;
+                       String tag;
+                       int pseudoTag = 0;
+                    for (CredDAO.Data rcdd : result.value) {
+                        if (rcdd.type==CredDAO.BASIC_AUTH || rcdd.type==CredDAO.BASIC_AUTH_SHA256) {
+                               if(rcdd.tag==null) {
+                                       mcdd.put(Integer.toString(++pseudoTag),rcdd);
+                               } else {
+                                       tag = rcdd.tag;
+                                       cdd = mcdd.get(tag);
+                                       if(cdd==null || cdd.expires.before(rcdd.expires)) {
+                                               mcdd.put(tag,rcdd);
+                                       }
+                               }
                         }
                     }
-                    if (cddl.size()>1) {
-                        Collections.sort(cddl, (a, b) -> b.expires.compareTo(a.expires));
-                    }
+                    cddl = mcdd.values();
                 } else {
                     cddl = result.value;
                 }
index 4788ee4..aa145f1 100644 (file)
@@ -367,7 +367,7 @@ public class CMService {
                             for(Iterator<? extends Certificate> iter = certs.iterator(); iter.hasNext();) {
                                 X509Certificate x509 = (X509Certificate)iter.next();
                                 if(x509.getNotAfter().after(now) && x509.getSubjectDN().getName().contains(cn)) {
-                                    if(++count>MAX_X509s) {
+                                    if(++count>max_509s) {
                                         break;
                                     }
                                 }
index d4d6c70..37d328b 100644 (file)
@@ -3,6 +3,8 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modification Copyright (c) 2019 IBM
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -86,10 +88,10 @@ public class List extends BaseCmd<Role> {
         }
     }
 
-    private final static String roleFormat = "%-56s Expires %s\n";
-    private final static String roleFormatNoDate = "%-61s\n";
-    private final static String roleExpiredFormat = "%-53s !!! EXPIRED !!! %s\n";
-    private final static String permFormat = "   %-30s %-30s %-15s\n";
+    private static final String roleFormat = "%-56s Expires %s\n";
+    private static final String roleFormatNoDate = "%-61s\n";
+    private static final String roleExpiredFormat = "%-53s !!! EXPIRED !!! %s\n";
+    private static final String permFormat = "   %-30s %-30s %-15s\n";
 
     
     private static final Comparator<aaf.v2_0.Role> roleCompare = new Comparator<aaf.v2_0.Role>() {
@@ -106,9 +108,11 @@ public class List extends BaseCmd<Role> {
         } else if (aafcli.isDetailed()){
             if (str[0].toLowerCase().contains(LIST_ROLES_BY_NAME)) {
                 String description = roles.getRole().get(0).getDescription();
-                if (description == null) description = "";
+                if (description == null) {
+                    description = "";
+                }
                 reportColHead("%-80s\n","Description: " + description);
-            }             
+            }
 
             String fullFormat = roleFormat+permFormat;
             reportColHead(fullFormat,"[ROLE NS].Name","","[PERM NS].Type","Instance","Action");
index 4977b75..176787e 100644 (file)
@@ -3,6 +3,8 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modification Copyright (c) 2019 IBM
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,7 +46,7 @@ import aaf.v2_0.Users.User;
  *
  */
 public class ListForCreds extends Cmd {
-    private final static String[] options = {"ns","id"};
+    private static final String[] options = {"ns","id"};
 
     private static final String HEADER = "List creds by Namespace or ID ";
     public ListForCreds(List parent) {
@@ -54,8 +56,8 @@ public class ListForCreds extends Cmd {
     }
 
     @Override
-    public int _exec(int _idx, final String ... args) throws CadiException, APIException, LocatorException {
-            int idx = _idx;
+    public int _exec(int idxParam, final String ... args) throws CadiException, APIException, LocatorException {
+            int idx = idxParam;
         final int option = whichOption(options, args[idx++]);
         final String which = options[option];
         final String value = args[idx++];
@@ -75,7 +77,9 @@ public class ListForCreds extends Cmd {
                             }            
                         });
                     ((org.onap.aaf.auth.cmd.user.List)parent).report(fp.value,option==1,HEADER+which,value);
-                    if (fp.code()==404)return 200;
+                    if (fp.code()==404) {
+                        return 200;
+                    }
                 } else {
                     error(fp);
                 }
@@ -85,8 +89,8 @@ public class ListForCreds extends Cmd {
     }
     
     @Override
-    public void detailedHelp(int _indent, StringBuilder sb) {
-            int indent = _indent;
+    public void detailedHelp(int indentParam, StringBuilder sb) {
+            int indent = indentParam;
         detailLine(sb,indent,HEADER);
         indent+=2;
         detailLine(sb,indent,"This report lists the users associated to either Namespaces or IDs.");
index e4420ab..bd9f887 100644 (file)
@@ -167,6 +167,8 @@ public class AuthzTransFilter extends TransFilter<AuthzTrans> {
 //            }
             sb.append(",ms=");
             sb.append(m.total);
+            sb.append(",status=");
+            sb.append(trans.hresp().getStatus());
             sb.append(",meth=");
             sb.append(trans.meth());
             sb.append(",path=");
index f7c3868..fbc1baa 100644 (file)
@@ -143,14 +143,16 @@ public class API_Creds {
                     AuthzTrans trans, 
                     HttpServletRequest req,
                     HttpServletResponse resp) throws Exception {
-                
+                // will be a valid Entity.  Do we need to add permission
+               //if(trans.fish("ns","password","request")) or the like
                 Result<Date> r = context.doesCredentialMatch(trans, req, resp);
                 if (r.isOK()) {
                     resp.setStatus(HttpStatus.OK_200);
                 } else {
                     // For Security, we don't give any info out on why failed, other than forbidden
                     // Can't do "401", because that is on the call itself
-                    resp.setStatus(HttpStatus.FORBIDDEN_403);
+                       // 403 Implies you MAY NOT Ask.
+                    resp.setStatus(HttpStatus.NOT_ACCEPTABLE_406);
                 }
             }
         });  
index ec0875c..216468c 100644 (file)
@@ -29,9 +29,10 @@ import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.User;
 import org.onap.aaf.cadi.aaf.AAFPermission;
 import org.onap.aaf.cadi.client.Future;
-import org.onap.aaf.cadi.client.Rcli;
 import org.onap.aaf.cadi.lur.ConfigPrincipal;
 
+import aaf.v2_0.CredRequest;
+
 public class AAFAuthn<CLIENT> extends AbsUserCache<AAFPermission> {
     private AAFCon<CLIENT> con;
     private String realm;
@@ -139,12 +140,16 @@ public class AAFAuthn<CLIENT> extends AbsUserCache<AAFPermission> {
             try {
                 Miss missed = missed(getName(),getCred());
                 if (missed==null || missed.mayContinue()) {
-                    Rcli<CLIENT> client = con.client().forUser(con.basicAuth(getName(), new String(getCred())));
-                    Future<String> fp = client.read(
-                            "/authn/basicAuth",
-                            "text/plain"
-                            );
-                    if (fp.get(con.timeout)) {
+                       CredRequest cr = new CredRequest();
+                       cr.setId(getName());
+                       cr.setPassword(new String(getCred()));
+                       Future<String> fp = con.client().readPost("/authn/validate", con.credReqDF, cr);
+                    //Rcli<CLIENT> client = con.client().forUser(con.basicAuth(getName(), new String(getCred())));
+                    //Future<String> fp = client.read(
+                    //        "/authn/basicAuth",
+                    //        "text/plain"
+                    //       );
+                     if (fp.get(con.timeout)) {
                         expires = System.currentTimeMillis() + timeToLive;
                         addUser(new User<AAFPermission>(this, expires));
                         return Resp.REVALIDATED;
index 4068405..3b97883 100644 (file)
@@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.onap.aaf.cadi.AbsUserCache;
 import org.onap.aaf.cadi.Access;
+import org.onap.aaf.cadi.Access.Level;
 import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.CadiWrap;
 import org.onap.aaf.cadi.Connector;
@@ -36,7 +37,6 @@ import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.cadi.Lur;
 import org.onap.aaf.cadi.PropAccess;
 import org.onap.aaf.cadi.SecuritySetter;
-import org.onap.aaf.cadi.Access.Level;
 import org.onap.aaf.cadi.aaf.AAFPermission;
 import org.onap.aaf.cadi.aaf.marshal.CertsMarshal;
 import org.onap.aaf.cadi.client.Future;
@@ -56,6 +56,7 @@ import org.onap.aaf.misc.rosetta.env.RosettaDF;
 import org.onap.aaf.misc.rosetta.env.RosettaEnv;
 
 import aaf.v2_0.Certs;
+import aaf.v2_0.CredRequest;
 import aaf.v2_0.Error;
 import aaf.v2_0.Perms;
 import aaf.v2_0.Users;
@@ -69,6 +70,7 @@ public abstract class AAFCon<CLIENT> implements Connector {
     final public RosettaDF<Perms> permsDF;
     final public RosettaDF<Certs> certsDF;
     final public RosettaDF<Users> usersDF;
+    final public RosettaDF<CredRequest> credReqDF;
     final public RosettaDF<Error> errDF;
     private String realm;
     public final String app;
@@ -90,6 +92,7 @@ public abstract class AAFCon<CLIENT> implements Connector {
         permsDF = copy.permsDF;
         certsDF = copy.certsDF;
         usersDF = copy.usersDF;
+        credReqDF = copy.credReqDF;
         errDF = copy.errDF;
         app = copy.app;
         si = copy.si;
@@ -186,6 +189,7 @@ public abstract class AAFCon<CLIENT> implements Connector {
             usersDF = env.newDataFactory(Users.class);
             certsDF = env.newDataFactory(Certs.class);
             certsDF.rootMarshal(new CertsMarshal()); // Speedier Marshaling
+            credReqDF = env.newDataFactory(CredRequest.class);
             errDF = env.newDataFactory(Error.class);
         } catch (APIException e) {
             throw new CadiException("AAFCon cannot be configured",e);
index 5ef25bc..a654e6f 100644 (file)
@@ -236,7 +236,10 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
     @Override
     public Item best() throws LocatorException {
         if (!hasItems()) {
-            throw new LocatorException("No Entries found for '" + aaf_locator_uri.toString() + '/' + name + ':' + version + '\'');
+            throw new LocatorException(String.format("No Entries found for '%s/%s:%s'",
+                       (aaf_locator_uri==null?aaf_locator_host:aaf_locator_uri.toString()),
+                       name,
+                       version));
         }
         List<EP> lep = new ArrayList<>();
         EP first = null;
index 4848e50..cb3b4e8 100644 (file)
@@ -40,7 +40,7 @@ public final class User<PERM extends Permission> {
     public String name;
     private byte[] cred;
     public Principal principal;
-    Map<String, Permission> perms ;
+    Map<String, Permission> perms;
     long permExpires;
     private final long interval;
     int count;
index fbaa4a5..2c9bb8c 100644 (file)
@@ -45,17 +45,20 @@ public class CSV {
     private Access access;
     private boolean processAll;
     private char delimiter = ',';
+    private boolean go;
     
     public CSV(Access access, File file) {
         this.access = access;
         csv = file;
         processAll = false;
+        go = true;
     }
     
     public CSV(Access access, String csvFilename) {
         this.access = access;
         csv = new File(csvFilename);
         processAll = false;
+        go = true;
     }
     
     public CSV setDelimiter(char delimiter) {
@@ -88,7 +91,7 @@ public class CSV {
         try {
             String line;
             StringBuilder sb = new StringBuilder();
-            while((line = br.readLine())!=null) {
+            while(go && (line = br.readLine())!=null) {
                 line=line.trim();
                 if(!line.startsWith("#") && line.length()>0) {
 //                    System.out.println(line);  uncomment to debug
@@ -268,6 +271,13 @@ public class CSV {
             return csv.getAbsolutePath();
         }
     }
+    
+    /**
+     * Provides a way to stop processing records from inside a Visit
+     */
+    public void stop() {
+       go = false;
+    }
 
     public void delete() {
         csv.delete();