X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=auth%2Fauth-batch%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fauth%2Fbatch%2Fhelpers%2FUserRole.java;h=536515bcea6d15941208d161fd63c459c5e62bc3;hb=deb396a3d53a84b2eb5a46d40122b4902d72c601;hp=bea3b5ec946aa67e329481ee2c21b8ed957d281b;hpb=613846477296bd3888ba6e5f939afe688b486ad7;p=aaf%2Fauthz.git diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/UserRole.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/UserRole.java index bea3b5ec..536515bc 100644 --- a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/UserRole.java +++ b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/UserRole.java @@ -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. @@ -21,6 +22,7 @@ package org.onap.aaf.auth.batch.helpers; +import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; import java.util.Date; @@ -29,10 +31,10 @@ import java.util.List; import java.util.SortedMap; import java.util.TreeMap; -import org.onap.aaf.auth.batch.actions.URDelete; import org.onap.aaf.auth.dao.cass.UserRoleDAO; import org.onap.aaf.auth.dao.cass.UserRoleDAO.Data; import org.onap.aaf.auth.env.AuthzTrans; +import org.onap.aaf.cadi.CadiException; import org.onap.aaf.cadi.util.CSV; import org.onap.aaf.misc.env.Env; import org.onap.aaf.misc.env.TimeTaken; @@ -47,12 +49,15 @@ import com.datastax.driver.core.Statement; public class UserRole implements Cloneable, CacheChange.Data { + public static final String UR = "ur"; + public static final String APPROVE_UR = "ur"; + private static final String SEPARATOR = "\",\""; // CACHE Calling private static final String LOG_FMT = "%s UserRole - %s: %s-%s (%s, %s) expiring %s"; private static final String REPLAY_FMT = "%s|%s|%s|%s|%s\n"; - private static final String DELETE_FMT = "# %s\n"+ REPLAY_FMT; + private static final String DELETE_FMT = "# %s\n" + REPLAY_FMT; private static final List data = new ArrayList<>(); private static final SortedMap> byUser = new TreeMap<>(); @@ -76,7 +81,7 @@ public class UserRole implements Cloneable, CacheChange.Data { } }; - public UserRole(String user, String ns, String rname, Date expires) { + public UserRole(String user, String ns, String rname, Date expires) { urdd = new UserRoleDAO.Data(); urdd.user = user; urdd.role = ns + '.' + rname; @@ -109,7 +114,7 @@ public class UserRole implements Cloneable, CacheChange.Data { public static void load(Trans trans, Session session, Creator creator) { load(trans,session,creator,null,new DataLoadVisitor()); } - + public static void load(Trans trans, Session session, Creator creator, Visitor visitor ) { load(trans,session,creator,null,visitor); } @@ -117,14 +122,22 @@ public class UserRole implements Cloneable, CacheChange.Data { public static void loadOneRole(Trans trans, Session session, Creator creator, String role, Visitor visitor) { load(trans,session,creator,"role='" + role +"' ALLOW FILTERING;",visitor); } - + public static void loadOneUser(Trans trans, Session session, Creator creator, String user, Visitor visitor ) { - load(trans,session,creator,"role='"+ user +"';",visitor); + load(trans,session,creator,"user='" + user + '\'',visitor); + } + + public static void load(Trans trans, CSV csv, Creator creator, Visitor visitor) throws IOException, CadiException { +// public UserRole(String user, String role, String ns, String rname, Date expires) { + 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))))) + ); } - private static void load(Trans trans, Session session, Creator creator, String where, Visitor visitor) { + public static void load(Trans trans, Session session, Creator creator, String where, Visitor visitor) { String query = creator.query(where); - trans.info().log( "query: " + query ); + trans.debug().log( "query: " + query ); TimeTaken tt = trans.start("Read UserRoles", Env.REMOTE); ResultSet results; @@ -142,7 +155,7 @@ public class UserRole implements Cloneable, CacheChange.Data { tt.done(); } } finally { - trans.info().log("Loaded",totalLoaded,"UserRoles"); + trans.debug().log("Loaded",totalLoaded,"UserRoles"); } } @@ -157,8 +170,8 @@ public class UserRole implements Cloneable, CacheChange.Data { } public static class DataLoadVisitor implements Visitor { - @Override - public void visit(UserRole ur) { + @Override + public void visit(UserRole ur) { data.add(ur); List lur = byUser.get(ur.urdd.user); @@ -174,32 +187,32 @@ public class UserRole implements Cloneable, CacheChange.Data { byRole.put(ur.urdd.role, lur); } lur.add(ur); - } + } } - + public int totalLoaded() { return totalLoaded; } - + public int deleted() { return deleted; } - + @Override public void expunge() { data.remove(this); - + List lur = byUser.get(urdd.user); if (lur!=null) { lur.remove(this); } - + lur = byRole.get(urdd.role); if (lur!=null) { lur.remove(this); } } - + public static void setDeleteStream(PrintStream ds) { urDelete = ds; } @@ -225,27 +238,27 @@ public class UserRole implements Cloneable, CacheChange.Data { public UserRoleDAO.Data urdd() { return urdd; } - + public String user() { return urdd.user; } - + public String role() { return urdd.role; } - + public String ns() { return urdd.ns; } - + public String rname() { return urdd.rname; } - + public Date expires() { return urdd.expires; } - + public void expires(Date time) { urdd.expires = time; } @@ -283,7 +296,7 @@ public class UserRole implements Cloneable, CacheChange.Data { cache.delayedDelete(this); ++deleted; } - + /** * Calls expunge() for all deleteCached entries @@ -291,54 +304,83 @@ public class UserRole implements Cloneable, CacheChange.Data { public static void resetLocalData() { cache.resetLocalData(); } - - public static int sizeForDeletion() { - return cache.cacheSize(); + + public void row(final CSV.Writer csvw, String tag) { + csvw.row(tag,user(),role(),ns(),rname(),Chrono.dateOnlyStamp(expires()),expires().getTime()); + } + + public void row(final CSV.Writer csvw, String tag, String reason) { + csvw.row(tag,user(),role(),ns(),rname(),Chrono.dateOnlyStamp(expires()),expires().getTime(),reason); } - public static boolean pendingDelete(UserRole ur) { - return cache.contains(ur); + public static Data row(List row) { + Data data = new Data(); + data.user = row.get(1); + data.role = row.get(2); + data.ns = row.get(3); + data.rname = row.get(4); + data.expires = new Date(Long.parseLong(row.get(6))); + return data; } - public static void actuateDeletionNow(AuthzTrans trans, URDelete directDel) { - for (UserRole ur : cache.getRemoved()) { - directDel.exec(trans, ur, "Actuating UserRole Deletion"); + public static void batchDelete(StringBuilder sb, List row) { + sb.append("DELETE from authz.user_role WHERE user='"); + sb.append(row.get(1)); + sb.append("' AND role='"); + sb.append(row.get(2)); + sb.append("';\n"); + } + + public static void batchExtend(StringBuilder sb, List row, Date newDate ) { + sb.append("UPDATE authz.user_role SET expires='"); + sb.append(Chrono.dateTime(newDate)); + sb.append("' WHERE user='"); + sb.append(row.get(1)); + sb.append("' AND role='"); + sb.append(row.get(2)); + sb.append("';\n"); + } + + public void batchExtend(StringBuilder sb, Date newDate) { + sb.append("UPDATE authz.user_role SET expires='"); + sb.append(Chrono.dateTime(newDate)); + sb.append("' WHERE user='"); + sb.append(user()); + sb.append("' AND role='"); + sb.append(role()); + sb.append("';\n"); + } + + public void batchUpdateExpires(StringBuilder sb) { + sb.append("UPDATE authz.user_role SET expires='"); + sb.append(Chrono.dateTime(expires())); + sb.append("' WHERE user='"); + sb.append(user()); + sb.append("' AND role='"); + sb.append(role()); + sb.append("';\n"); + } + + public static String histMemo(String fmt, List row) { + String reason; + if(row.size()>7) { // Reason included + reason = String.format("%s removed from %s because %s", + row.get(1),row.get(2),row.get(7)); + } else { + reason = String.format(fmt, row.get(1),row.get(2), row.get(5)); } - cache.getRemoved().clear(); - cache.resetLocalData(); + return reason; } - public void row(final CSV.Writer csvw) { - csvw.row("ur",user(),ns(),rname(),Chrono.dateOnlyStamp(expires()),expires().getTime()); + public static String histSubject(List row) { + return row.get(1) + '|' + row.get(2); + } + + public static void clear() { + data.clear(); + byUser.clear(); + byRole.clear(); + cache.resetLocalData(); + } - - public static void batchDelete(StringBuilder sb, List row) { - sb.append("DELETE from authz.user_role WHERE user='"); - sb.append(row.get(1)); - sb.append("' AND role='"); - sb.append(row.get(2)); - sb.append('.'); - sb.append(row.get(3)); - sb.append("';\n"); - } - - public static void batchExtend(StringBuilder sb, List row, String newDate ) { - sb.append("UPDATE authz.user_role SET expires='"); - sb.append(newDate); - sb.append("' WHERE user='"); - sb.append(row.get(1)); - sb.append("' AND role='"); - sb.append(row.get(2)); - sb.append('.'); - sb.append(row.get(3)); - sb.append("';\n"); - } - - public static String histMemo(String fmt, List row) { - return String.format(fmt, row.get(1),row.get(2)+'.'+row.get(3), row.get(4)); - } - - public static String histSubject(List row) { - return row.get(1) + '|' + row.get(2)+'.'+row.get(3); - } } \ No newline at end of file