示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }