/// <summary> /// Check for clients whose authorization has expired. /// </summary> public static CheckExpiredClientsProcessResult CheckExpiredClients(IEnumerable <IResourceClient> expiredClients, IEnumerable <IResourceClient> expiredEveryone, bool noEmail = false) { //send notice to users with authorizations that have expired var startedAt = DateTime.Now; var expiredClientsCount = expiredClients.Count(); var expiredEveryoneCount = expiredEveryone.Count(); var expiredClientsEmailsSent = 0; var expiredEveryoneEmailsSent = 0; var data = new List <string>(); foreach (IResourceClient item in expiredClients) { //only send warnings to client who are still active if (item.ClientActive && item.Expiration != null) { string recipient = item.Email; string subject = "Your authorization has expired!"; string body = string.Format("Your authorization for the {0}", item.ResourceName) + string.Format(" expired on {0}.<br /><br />", item.Expiration.Value.ToLongDateString()) + string.Format("Please <a href=\"{0}\">create a ticket on the tool</a>", HelpdeskUtility.GetSchedulerHelpdeskUrl("ssel-sched.eecs.umich.edu", item.ResourceID)) + " to extend your authorization for the tool."; try { if (recipient.Count() > 0) { if (!noEmail) { SendEmail.SendSystemEmail("LNF.Scheduler.ResourceClientUtility.CheckExpiredClients", subject, body, new[] { recipient }); } data.Add($"Expired authorization: {recipient}, Resource: {item.ResourceName} [{item.ResourceID}]"); expiredClientsEmailsSent += 1; } else { data.Add($"Expired authorization: No recipient, Resource: {item.ResourceName} [{item.ResourceID}]"); } } catch (Exception ex) { data.Add($"Expired authorization ERROR: {recipient}, Resource: {item.ResourceName} [{item.ResourceID}], Message: {ex.Message}"); } } } //send notice to tool eng who manage everyones that have expired foreach (IResourceClient item in expiredEveryone) { if (item.Expiration != null) { //only send warnings to client who are still active List <string> recipient = new List <string>(); string subject = string.Empty; IList <IResourceClient> engineers = GetToolEngineers(item.ResourceID).ToList(); recipient.AddRange(engineers.Select(x => x.Email)); subject = "Everyone authorization has expired!"; string body = "The Everyone authorization for the " + item.ResourceName + " expired on " + item.Expiration.Value.ToLongDateString() + ".<br /><br />" + "Please update the authorization for the tool as appropriate."; try { if (recipient.Count > 0) { if (!noEmail) { SendEmail.SendSystemEmail("LNF.Scheduler.ResourceClientUtility.CheckExpiredClients", subject, body, recipient); } data.Add($"Expired Everyone authorization: {string.Join(",", recipient)}, Resource: {item.ResourceName} [{item.ResourceID}]"); expiredEveryoneEmailsSent += 1; } else { data.Add($"Expired Everyone authorization: No recipient, Resource: {item.ResourceName} [{item.ResourceID}]"); } } catch (Exception ex) { data.Add($"Expired Everyone authorization ERROR: {string.Join(",", recipient)}, Resource: {item.ResourceName} [{item.ResourceID}], Message: {ex.Message}"); } } } //Delete Clients var deleteExpiredClientsCount = DeleteExpiredClients(); var result = new CheckExpiredClientsProcessResult(startedAt, data) { ExpiredClientsCount = expiredClientsCount, ExpiredEveryoneCount = expiredEveryoneCount, ExpiredClientsEmailsSent = expiredClientsEmailsSent, ExpiredEveryoneEmailsSent = expiredEveryoneEmailsSent, DeleteExpiredClientsCount = deleteExpiredClientsCount }; return(result); }
/// <summary> /// Check for authorized clients whose authorizations are about to expire and email user. NOTE: Must deal with everyone separate from others. /// </summary> public static CheckExpiringClientsProcessResult CheckExpiringClients(IEnumerable <IResourceClient> expiringClients, IEnumerable <IResourceClient> expiringEveryone, bool noEmail = false) { //send warning to users with authorizations about to expire var startedAt = DateTime.Now; var expiringClientsCount = expiringClients.Count(); var expiringEveryoneCount = expiringEveryone.Count(); var expiringClientsEmailsSent = 0; var expiringEveryoneEmailsSent = 0; var data = new List <string>(); foreach (IResourceClient item in expiringClients) { //only send warnings to client who are still active if (item.ClientActive && item.Expiration != null) { //Check that the current time is within 5 min past the warning time //To prevent repeated sending of emails string resourceName = item.ResourceName; var expiration = item.Expiration.Value; var warning = GetWarningDate(item).Value; //Email client double daysTillExpire = DateTime.Now.Subtract(warning).TotalDays; if (daysTillExpire > 0 && daysTillExpire <= 1) { string recipient = item.Email; string subject = $"{SendEmail.CompanyName} tool authorization is about to expire!"; string body = "Your authorization for the " + resourceName + string.Format(" will expire on {0}.<br /><br />", expiration.ToLongDateString()) + string.Format("Please <a href=\"{0}\">create a ticket on the tool</a>", HelpdeskUtility.GetSchedulerHelpdeskUrl("ssel-sched.eecs.umich.edu", item.ResourceID)) + " to extend your authorization for the tool."; try { if (!string.IsNullOrEmpty(recipient)) { if (!noEmail) { SendEmail.SendSystemEmail("LNF.Scheduler.ResourceClientUtility.CheckExpiringClients", subject, body, new[] { recipient }); } data.Add($"Expiring authorization: {string.Join(",", recipient)}, Resource: {item.ResourceName} [{item.ResourceID}]"); expiringClientsEmailsSent += 1; } else { data.Add($"Expiring authorization: No recipient, Resource: {item.ResourceName} [{item.ResourceID}]"); } } catch (Exception ex) { data.Add($"Expiring authorization ERROR: {recipient}, Resource: {item.ResourceName} [{item.ResourceID}], Message: {ex.Message}"); } } } } //send warning to tool eng who manage everyones about to expire //For each client whose authorization is about to expire foreach (IResourceClient item in expiringEveryone) { if (item.Expiration != null) { //Check that the current time is within 5 min past the warning time //To prevent repeated sending of emails string resourceName = item.ResourceName; DateTime expiration = item.Expiration.Value; DateTime warning = GetWarningDate(item).Value; //Email client double daysTillExpire = DateTime.Now.Subtract(warning).TotalDays; if (daysTillExpire > 0 && daysTillExpire <= 1) { List <string> recipient = new List <string>(); string subject = string.Empty; IList <IResourceClient> engineers = GetToolEngineers(item.ResourceID).ToList(); recipient.AddRange(engineers.Select(x => x.Email)); subject = $"{SendEmail.CompanyName} tool authorization is about to expire!"; string body = "Everyone authorization for the " + resourceName + " will expire on " + expiration.ToLongDateString() + ".<br /><br />" + "Please update the authorization for the tool as appropriate."; try { if (recipient.Count > 0) { if (!noEmail) { SendEmail.SendSystemEmail("LNF.Scheduler.ResourceClientUtility.CheckExpiringClients", subject, body, recipient); } data.Add($"Expiring Everyone authorization: {string.Join(",", recipient)}, Resource: {item.ResourceName} [{item.ResourceID}]"); expiringEveryoneEmailsSent += 1; } else { data.Add($"Expiring Everyone authorization: No recipient, Resource: {item.ResourceName} [{item.ResourceID}]"); } } catch (Exception ex) { data.Add($"Expiring Everyone authorization ERROR: {string.Join(",", recipient)}, Resource: {item.ResourceName} [{item.ResourceID}], Message: {ex.Message}"); } } } } var result = new CheckExpiringClientsProcessResult(startedAt, data) { ExpiringClientsCount = expiringClientsCount, ExpiringEveryoneCount = expiringEveryoneCount, ExpiringClientsEmailsSent = expiringClientsEmailsSent, ExpiringEveryoneEmailsSent = expiringEveryoneEmailsSent }; return(result); }