internal override bool OnExpire(MessageItem message, out bool sendUpdate) { AutoGroupApplication.diag.TraceFunction((long)this.GetHashCode(), "AutoGroupApplication.OnExpire"); sendUpdate = true; message.Load(new PropertyDefinition[] { MessageItemSchema.ReceivedBy, MessageItemSchema.ApprovalDecisionMaker, MessageItemSchema.ApprovalRequestor, MessageItemSchema.ApprovalAllowedDecisionMakers, MessageItemSchema.ApprovalApplicationData }); CultureInfo messageCulture = null; string arg; SmtpAddress arg2; SmtpAddress smtpAddress; SmtpAddress[] array; if (!AutoGroupApplication.GetItemRecipients(message, out arg, out arg2, out smtpAddress, out array)) { AutoGroupApplication.diag.TraceError <string, SmtpAddress, SmtpAddress>((long)this.GetHashCode(), "'{0}' message has invalid approver '{1}', requester '{2}', or empty moderators list.", arg, arg2, smtpAddress); return(false); } SmtpAddress emailAddressFromMailboxItem = AutoGroupApplication.GetEmailAddressFromMailboxItem(message); if (emailAddressFromMailboxItem == SmtpAddress.Empty) { AutoGroupApplication.diag.TraceError <string>((long)this.GetHashCode(), "'{0}' cannot get arbitration mailbox SMTP address from message.", arg); return(false); } string valueOrDefault = message.GetValueOrDefault <string>(MessageItemSchema.ApprovalApplicationData); string text; ADObjectId adobjectId; if (string.IsNullOrEmpty(valueOrDefault) || !AutoGroupApplication.ParseApprovalData(valueOrDefault, out text, out adobjectId)) { AutoGroupApplication.diag.TraceError <string, string>((long)this.GetHashCode(), "'{0}' applicationData '{1}' cannot be parsed", arg, valueOrDefault); return(false); } IRecipientSession recipientSession = ApprovalProcessor.CreateRecipientSessionFromSmtpAddress(smtpAddress); MiniRecipient miniRecipient = recipientSession.ReadMiniRecipient(adobjectId, null); if (miniRecipient == null) { AutoGroupApplication.diag.TraceError <string, ADObjectId>((long)this.GetHashCode(), "'{0}' group '{1}' not found in AD.", arg, adobjectId); return(false); } string group; if (string.IsNullOrEmpty(miniRecipient.DisplayName)) { group = miniRecipient.Name; } else { group = miniRecipient.DisplayName; } ADRawEntry adrawEntry = recipientSession.FindByProxyAddress(new SmtpProxyAddress(smtpAddress.ToString(), true), new PropertyDefinition[] { ADObjectSchema.Id, ADUserSchema.Languages }); if (adrawEntry != null) { MultiValuedProperty <CultureInfo> multiValuedProperty = (MultiValuedProperty <CultureInfo>)adrawEntry[ADUserSchema.Languages]; if (multiValuedProperty.Count > 0) { messageCulture = multiValuedProperty[0]; } } ApprovalProcessor.SendNotification(emailAddressFromMailboxItem, message.Id.ObjectId, new SmtpAddress[] { smtpAddress }, Strings.AutoGroupRequestExpiredSubject(group), Strings.AutoGroupRequestExpiredBody(group), LocalizedString.Empty, LocalizedString.Empty, messageCulture); return(true); }
internal override bool OnApprove(MessageItem message) { AutoGroupApplication.diag.TraceFunction((long)this.GetHashCode(), "AutoGroupApplication.OnApprove"); message.Load(new PropertyDefinition[] { MessageItemSchema.ReceivedBy, MessageItemSchema.ApprovalDecisionMaker, MessageItemSchema.ApprovalRequestor, MessageItemSchema.ApprovalAllowedDecisionMakers, MessageItemSchema.ApprovalApplicationData }); CultureInfo cultureInfo = null; CultureInfo messageCulture = null; string arg; SmtpAddress smtpAddress; SmtpAddress smtpAddress2; SmtpAddress[] array; if (!AutoGroupApplication.GetItemRecipients(message, out arg, out smtpAddress, out smtpAddress2, out array)) { AutoGroupApplication.diag.TraceError <string, SmtpAddress, SmtpAddress>((long)this.GetHashCode(), "'{0}' message has invalid approver '{1}', requester '{2}', or empty moderators list.", arg, smtpAddress, smtpAddress2); return(false); } SmtpAddress emailAddressFromMailboxItem = AutoGroupApplication.GetEmailAddressFromMailboxItem(message); if (emailAddressFromMailboxItem == SmtpAddress.Empty) { AutoGroupApplication.diag.TraceError <string>((long)this.GetHashCode(), "'{0}' cannot get arbitration mailbox SMTP address from message.", arg); return(false); } string valueOrDefault = message.GetValueOrDefault <string>(MessageItemSchema.ApprovalApplicationData); string text; ADObjectId adobjectId; if (string.IsNullOrEmpty(valueOrDefault) || !AutoGroupApplication.ParseApprovalData(valueOrDefault, out text, out adobjectId)) { AutoGroupApplication.diag.TraceError <string, string>((long)this.GetHashCode(), "'{0}' applicationData '{1}' cannot be parsed", arg, valueOrDefault); return(false); } IRecipientSession recipientSession = ApprovalProcessor.CreateRecipientSessionFromSmtpAddress(smtpAddress); ADRawEntry adrawEntry = null; bool flag = true; try { adrawEntry = recipientSession.FindByProxyAddress(new SmtpProxyAddress(smtpAddress.ToString(), true), new PropertyDefinition[] { ADObjectSchema.Id, ADUserSchema.Languages }); } catch (NonUniqueRecipientException) { flag = false; } ADRawEntry adrawEntry2 = null; bool flag2 = true; try { adrawEntry2 = recipientSession.FindByProxyAddress(new SmtpProxyAddress(smtpAddress2.ToString(), true), new PropertyDefinition[] { ADObjectSchema.Id, ADRecipientSchema.PrimarySmtpAddress, ADUserSchema.Languages }); } catch (NonUniqueRecipientException) { flag2 = false; } MiniRecipient miniRecipient = recipientSession.ReadMiniRecipient(adobjectId, null); if (miniRecipient == null) { AutoGroupApplication.diag.TraceError <string, ADObjectId>((long)this.GetHashCode(), "'{0}' group '{1}' not found in AD.", arg, adobjectId); return(false); } string group; if (string.IsNullOrEmpty(miniRecipient.DisplayName)) { group = miniRecipient.Name; } else { group = miniRecipient.DisplayName; } if (adrawEntry == null) { if (flag) { AutoGroupApplication.diag.TraceError <string, SmtpAddress>((long)this.GetHashCode(), "'{0}' approver '{1}' not found in AD.", arg, smtpAddress); } else { AutoGroupApplication.diag.TraceError <string, SmtpAddress>((long)this.GetHashCode(), "'{0}' approver '{1}' not unique in AD.", arg, smtpAddress); } ApprovalProcessor.SendNotification(emailAddressFromMailboxItem, message.Id.ObjectId, new SmtpAddress[] { smtpAddress }, Strings.AutoGroupRequestFailedSubject(group), Strings.AutoGroupRequestFailedHeader(group), Strings.AutoGroupRequestFailedBodyBadApprover(group, ApprovalProcessor.GetDisplayNameFromSmtpAddress(smtpAddress2.ToString()), ApprovalProcessor.GetDisplayNameFromSmtpAddress(smtpAddress.ToString())), LocalizedString.Empty, null); return(false); } MultiValuedProperty <CultureInfo> multiValuedProperty = (MultiValuedProperty <CultureInfo>)adrawEntry[ADUserSchema.Languages]; if (multiValuedProperty.Count > 0) { cultureInfo = multiValuedProperty[0]; } if (adrawEntry2 == null) { if (flag2) { AutoGroupApplication.diag.TraceError <string, SmtpAddress>((long)this.GetHashCode(), "'{0}' requester '{1}' not found in AD.", arg, smtpAddress2); } else { AutoGroupApplication.diag.TraceError <string, SmtpAddress>((long)this.GetHashCode(), "'{0}' requester '{1}' not unique in AD.", arg, smtpAddress2); } ApprovalProcessor.SendNotification(emailAddressFromMailboxItem, message.Id.ObjectId, new SmtpAddress[] { smtpAddress }, Strings.AutoGroupRequestFailedSubject(group), Strings.AutoGroupRequestFailedHeader(group), Strings.AutoGroupRequestFailedBodyBadRequester(group, ApprovalProcessor.GetDisplayNameFromSmtpAddress(smtpAddress2.ToString())), LocalizedString.Empty, cultureInfo); return(false); } MultiValuedProperty <CultureInfo> multiValuedProperty2 = (MultiValuedProperty <CultureInfo>)adrawEntry2[ADUserSchema.Languages]; if (multiValuedProperty2.Count > 0) { messageCulture = multiValuedProperty2[0]; } bool flag3 = false; string a; if ((a = text) != null) { if (!(a == "Add-DistributionGroupMember")) { if (!(a == "Remove-DistributionGroupMember")) { goto IL_393; } flag3 = true; } PSCommand pscommand = new PSCommand().AddCommand(text); pscommand.AddParameter("Identity", adobjectId); pscommand.AddParameter("Member", adrawEntry2.Id); if (flag3) { pscommand.AddParameter("Confirm", new SwitchParameter(false)); } AutoGroupApplication.diag.Information <string, string>((long)this.GetHashCode(), "'{0}' executing command '{1}'.", arg, pscommand.ToString()); string text2; string text3; ApprovalApplication.ExecuteCommandsInRunspace(smtpAddress, pscommand, cultureInfo, out text2, out text3); if (!text2.Equals(string.Empty)) { AutoGroupApplication.diag.TraceError <string, string, string>((long)this.GetHashCode(), "'{0}' command '{1}' failed with error {2}.", arg, pscommand.ToString(), text2); ApprovalProcessor.SendNotification(emailAddressFromMailboxItem, message.Id.ObjectId, new SmtpAddress[] { smtpAddress }, Strings.AutoGroupRequestFailedSubject(group), Strings.AutoGroupRequestFailedHeader(group), Strings.AutoGroupRequestFailedBodyTaskError(text2), LocalizedString.Empty, cultureInfo); return(false); } AutoGroupApplication.diag.Information <string, string>((long)this.GetHashCode(), "'{0}' command '{1}' completed successfully.", arg, pscommand.ToString()); ApprovalProcessor.SendApproveNotification(emailAddressFromMailboxItem, message.Id.ObjectId, new SmtpAddress[] { (SmtpAddress)adrawEntry2[ADRecipientSchema.PrimarySmtpAddress] }, Strings.AutoGroupRequestApprovedSubject(group), Strings.AutoGroupRequestApprovedHeader(ApprovalProcessor.GetDisplayNameFromSmtpAddress(smtpAddress.ToString()), group), Strings.AutoGroupRequestApprovedBody, LocalizedString.Empty, messageCulture); return(true); } IL_393: AutoGroupApplication.diag.TraceError <string, string>((long)this.GetHashCode(), "'{0}' command '{1}' not recognized.", arg, text); return(false); }