deleteCW.comment("Approval is Orphaned");
Approval.row(deleteCW, appr);
} else {
- ticket.approvals.add(appr); // add to found Ticket
- approvers.add(appr.getApprover());
+ // for users and approvers still valid
+ String user = appr.getUser();
+
+ if(org.isRevoked(trans, appr.getApprover())) {
+ deleteCW.comment("Approver ID is revoked");
+ Approval.row(deleteCW, appr);
+ } else if(user!=null && !user.isEmpty() && org.isRevoked(trans, user)) {
+ deleteCW.comment("USER ID is revoked");
+ Approval.row(deleteCW, appr);
+ } else {
+ ticket.approvals.add(appr); // add to found Ticket
+ approvers.add(appr.getApprover());
+ }
}
}
} finally {
}
}
- /*
- * Do we delete now? Or work on Revocation semantics
- *
- trans.info().log("Checking for X509s without IDs");
- X509.load(trans, session, new Visitor<X509>() {
- @Override
- public void visit(X509 x509) {
- try {
- for(Certificate cert : Factory.toX509Certificate(x509.x509)) {
- X509Certificate xc = (X509Certificate)cert;
- xc.getSubjectDN();
- if(!check(transNoAvg,checked, (X))) {
- x509.row(notInOrgW,);
- }
- }
- } catch (CertificateException | IOException e) {
- trans.error().log(e, "Error Decrypting X509");
- }
- }
- });
- */
} catch (OrganizationException e) {
trans.info().log(e);
}
private Writer whichWriter(AuthzTrans transNoAvg, String id) {
Writer w = whichWriter.get(id);
if(w==null) {
- w = org.mayAutoDelete(transNoAvg, id)?
+ w = org.isRevoked(transNoAvg, id)?
notInOrgDeleteW:
notInOrgW;
whichWriter.put(id,w);
--- /dev/null
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.aaf
+ * ===========================================================================
+ * Copyright (c) 2018 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====================================================
+ *
+ */
+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) throws IOException {
+ super(access, ExpireRange.ONE_WEEK);
+ }
+
+ @Override
+ public String subject() {
+ return String.format("AAF Final Week Credential Notification (ENV: %s)",env);
+ }
+
+ /* (non-Javadoc)
+ * @see org.onap.aaf.auth.batch.reports.bodies.NotifyCredBody#dynamic()
+ */
+ @Override
+ protected String dynamic() {
+ return "Failure for your App is <b><i>IMMINENT</i></b>. This email is escalated to your superior and General Manager. " + super.dynamic();
+ }
+}
public Identity getIdentity(AuthzTrans trans, String id) throws OrganizationException;
/**
- * May AutoDelete
+ * Is Revoked
*
* Deletion of an Identity that has been removed from an Organization can be dangerous. Mistakes may have been made
* in the Organization side, a Feed might be corrupted, an API might not be quite right.
*
- * The implementation of this method can use a double check of some sort, such as comparsion of missing ID in Organization
+ * The implementation of this method can use a double check of some sort, such as comparison of missing ID in Organization
* feed with a "Deleted ID" feed.
*
- * The failure to be in Organization will still be reported, if returned "false", but if true, it is taken as an
- * ok to proceed with deletion.
*/
- public boolean mayAutoDelete(AuthzTrans trans, String id);
+ public boolean isRevoked(AuthzTrans trans, String id);
/**
}
@Override
- public boolean mayAutoDelete(AuthzTrans trans, String id) {
+ public boolean isRevoked(AuthzTrans trans, String id) {
// provide a corresponding feed that indicates that an ID has been intentionally removed from identities.dat table.
return false;
}
}
status = new File(status, fname);
if(status.exists()) {
- status.delete();
+ deleted=status.delete();
}
}
if(deleted) {
import java.util.regex.Pattern;
import org.onap.aaf.auth.env.AuthzTrans;
+import org.onap.aaf.auth.local.AbsData.Reuse;
import org.onap.aaf.auth.org.EmailWarnings;
import org.onap.aaf.auth.org.Executor;
import org.onap.aaf.auth.org.Mailer;
}
fIdentities.createNewFile();
}
+
}
} else {
fIdentities = new File(temp);
throw new OrganizationException(fIdentities.getCanonicalPath() + " does not exist.");
}
}
+
+ File fRevoked=null;
+ temp=env.getProperty(getClass().getName()+".file.revoked");
+ if(temp==null) {
+ temp = env.getProperty(AAF_DATA_DIR);
+ if (temp!=null) {
+ File dir = new File(temp);
+ fRevoked=new File(dir,"revoked.dat");
+ }
+ } else {
+ fRevoked = new File(temp);
+ }
+ if (fRevoked!=null && fRevoked.exists()) {
+ revoked = new Identities(fRevoked);
+ } else {
+ revoked = null;
+ }
+
} catch (IOException e) {
throw new OrganizationException(e);
}
static final List<String> NULL_DELEGATES = new ArrayList<>();
public Identities identities;
+ public Identities revoked;
private boolean dryRun;
private Mailer mailer;
public enum Types {Employee, Contractor, Application, NotActive};
return new DefaultOrgIdentity(trans,at<0?id:id.substring(0, at),this);
}
- /* (non-Javadoc)
+ /**
+ * If the ID isn't in the revoked file, if it exists, it is revoked.
+ */
+ @Override
+ public boolean isRevoked(AuthzTrans trans, String key) {
+ if(revoked!=null) {
+ try {
+ revoked.open(trans, DefaultOrgIdentity.TIMEOUT);
+ try {
+ Reuse r = revoked.reuse();
+ int at = key.indexOf(domain);
+ String search;
+ if (at>=0) {
+ search = key.substring(0,at);
+ } else {
+ search = key;
+ }
+ return revoked.find(search, r)!=null;
+ } finally {
+ revoked.close(trans);
+ }
+ } catch (IOException e) {
+ trans.error().log(e);
+ }
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
* @see org.onap.aaf.auth.org.Organization#getEsclaations(org.onap.aaf.auth.env.AuthzTrans, java.lang.String, int)
*/
@Override
return 0;
}
}
-
- @Override
- public boolean mayAutoDelete(AuthzTrans trans, String user) {
- // provide a corresponding feed that indicates that an ID has been intentionally removed from identities.dat table.
- return false;
- }
}
private static final String APPLICATION = "a";
private static final String NON_ACTIVE = "n";
- private final static int TIMEOUT = Integer.parseInt(Config.AAF_CONN_TIMEOUT_DEF);
+ final static int TIMEOUT = Integer.parseInt(Config.AAF_CONN_TIMEOUT_DEF);
private DefaultOrg org;
//package on purpose