import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import sailpoint.api.IdentityService;
import sailpoint.api.SailPointContext;
import sailpoint.object.Application;
import sailpoint.object.EmailOptions;
import sailpoint.object.EmailTemplate;
import sailpoint.object.Filter;
import sailpoint.object.Identity;
import sailpoint.object.Link;
import sailpoint.object.QueryOptions;
import sailpoint.tools.GeneralException;
public class AccountExpirationRule {
static SailPointContext context = null;
static Logger log = null;
static void sendEmail(String identityName, String emailTemplate, String daysRemaining, Date endDate) {
String company = null;
String mgrFirstName = null;
String mgrLastName = null;
String EMAIL_ADMIN = "reddy@mightypedia.com";
String recipient = null;
String ccRecipient = null;
Map args = null;
EmailOptions options = null;
EmailTemplate eTemp = null;
Identity mgr = null;
Identity identity = null;
try {
identity = context.getObjectByName(Identity.class, identityName);
if (identity.getAttribute("company") != null) {
company = identity.getAttribute("company").toString();
}
if (identity.getManager() != null) {
mgr = identity.getManager();
if (mgr.getFirstname() != null) {
mgrFirstName = mgr.getFirstname().toString();
}
if (mgr.getLastname() != null) {
mgrLastName = mgr.getLastname().toString();
}
if (mgr.getEmail() != null) {
recipient = mgr.getEmail().trim().toString();
} else {
log.debug("Manager email is null and setting recipient to admin");
recipient = EMAIL_ADMIN;
}
} else {
log.debug("Identity Manager is null and setting recipient to admin");
recipient = EMAIL_ADMIN;
}
SimpleDateFormat formatDate = new SimpleDateFormat("MM/dd/yyyy");
String startDateFor = "";
String endDateFor = null;
if (identity.getAttribute("startDate").toString() != null) {
startDateFor = formatDate.format(identity.getAttribute("startDate").toString());
}
endDateFor = formatDate.format(endDate);
if (identity.getFirstname() != null && identity.getLastname() != null && identity.getEmail() != null
&& startDateFor != null) {
args = new HashMap();
args.put("identity", identity);
args.put("daysRemaining", daysRemaining);
args.put("firstName", identity.getFirstname());
args.put("lastName", identity.getLastname());
args.put("email", identity.getEmail());
args.put("startDate", startDateFor);
args.put("endDate", endDateFor);
args.put("managerFirstName", mgrFirstName);
args.put("managerLastName", mgrLastName);
args.put("company", company);
}
options = new EmailOptions();
options.setVariables(args);
options.setTo(recipient);
options.setCc(ccRecipient);
eTemp = context.getObject(EmailTemplate.class, emailTemplate);
if (eTemp != null) {
context.sendEmailNotification(eTemp, options);
}
} catch (GeneralException e) {
log.error("GeneralException: " + e.getMessage());
} finally {
try {
context.decache(identity);
context.decache(mgr);
context.decache(eTemp);
} catch (GeneralException e) {
log.error("GeneralException: " + e.getMessage());
}
}
}
public static void main(String[] args) {
Date today = null;
Date todayPlus15 = null;
Date todayPlus30 = null;
Date accuntExpDate = null;
Calendar cal = null;
SimpleDateFormat format = null;
String identityName = null;
String accountExpires = null;
String todayPlus15Conversion = null;
String todayPlus30Conversion = null;
String accuntExpDateConversion = null;
String filter = "(inactive == false && (type == \"consultant\"))";
List<Link> identityLinks = null;
List<Identity> identities = null;
Application application = null;
IdentityService iDS = new IdentityService(context);
QueryOptions ops = null;
try {
application = context.getObjectByName(Application.class, "AD");
ops = new QueryOptions();
Filter identityFilter = Filter.compile(filter);
ops.addFilter(identityFilter);
identities = context.getObjects(Identity.class, ops);
if (identities != null) {
for (Identity identity : identities) {
identityName = identity.getName();
identityLinks = iDS.getLinks(identity, application);
for (Link identityLink : identityLinks) {
Boolean isDisabled = identityLink.isDisabled();
if (!isDisabled) {
if (identityLink.getAttribute("accountExpires") != null
&& !identityLink.getAttribute("accountExpires").equals("") && !identityLink
.getAttribute("accountExpires").toString().equalsIgnoreCase("never")) {
accountExpires = identityLink.getAttribute("accountExpires").toString();
format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aa ZZZ");
try {
accuntExpDate = format.parse(accountExpires);
} catch (ParseException e) {
log.error("ParseException: " + e.getMessage());
}
today = new Date();
cal = Calendar.getInstance();
cal.setTime(today);
cal.set(Calendar.HOUR_OF_DAY, 12);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.DATE, 15);
todayPlus15 = cal.getTime();
cal.add(Calendar.DATE, 15);
todayPlus30 = cal.getTime();
if (accuntExpDate != null) {
todayPlus15Conversion = new SimpleDateFormat("MM/dd/yyyy").format(todayPlus15);
todayPlus30Conversion = new SimpleDateFormat("MM/dd/yyyy").format(todayPlus30);
accuntExpDateConversion = new SimpleDateFormat("MM/dd/yyyy").format(accuntExpDate);
if (todayPlus15Conversion.equals(accuntExpDateConversion)) {
sendEmail(identity.getName(), "Account Expiry", "15", todayPlus15);
} else if (todayPlus30Conversion.equals(accuntExpDateConversion)) {
sendEmail(identity.getName(), "Account Expiry", "30", todayPlus30);
} else {
log.debug("Criteria is not matched...");
}
}
}
}
}
}
} else {
log.debug("No Identities found...");
}
} catch (GeneralException e) {
log.error("GeneralException: " + e.getMessage());
}
finally {
try {
context.decache(application);
} catch (GeneralException e) {
log.error("GeneralException: " + e.getMessage());
}
}
}
}
No comments:
Post a Comment