Added identity impersonation logic to all background operations (ThreadPool).
This commit is contained in:
parent
ec69ace193
commit
180e45d90c
3 changed files with 50 additions and 42 deletions
|
@ -16,5 +16,5 @@ using System.Reflection;
|
||||||
//
|
//
|
||||||
// You can specify all the values or you can default the Revision and Build Numbers
|
// You can specify all the values or you can default the Revision and Build Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
[assembly: AssemblyVersion("3.0.4.575")]
|
[assembly: AssemblyVersion("3.0.4.576")]
|
||||||
[assembly: AssemblyFileVersion("3.0.4.575")]
|
[assembly: AssemblyFileVersion("3.0.4.576")]
|
|
@ -3,36 +3,39 @@ using System;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
|
using System.Security.Principal;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Security;
|
using System.Web.Security;
|
||||||
using System.Web.UI;
|
using System.Web.UI;
|
||||||
|
using System.Web.UI.HtmlControls;
|
||||||
using System.Web.UI.WebControls;
|
using System.Web.UI.WebControls;
|
||||||
using System.Web.UI.WebControls.WebParts;
|
using System.Web.UI.WebControls.WebParts;
|
||||||
using System.Web.UI.HtmlControls;
|
|
||||||
using ScrewTurn.Wiki.PluginFramework;
|
using ScrewTurn.Wiki.PluginFramework;
|
||||||
|
|
||||||
namespace ScrewTurn.Wiki {
|
namespace ScrewTurn.Wiki {
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implements email-related tools.
|
/// Implements email-related tools.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class EmailTools {
|
public static class EmailTools {
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends an email.
|
/// Sends an email.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="recipient">The recipient.</param>
|
/// <param name="recipient">The recipient.</param>
|
||||||
/// <param name="sender">The sender.</param>
|
/// <param name="sender">The sender.</param>
|
||||||
/// <param name="subject">The subject.</param>
|
/// <param name="subject">The subject.</param>
|
||||||
/// <param name="body">The message body.</param>
|
/// <param name="body">The message body.</param>
|
||||||
/// <param name="html"><c>true</c> if the body is HTML.</param>
|
/// <param name="html"><c>true</c> if the body is HTML.</param>
|
||||||
public static void AsyncSendEmail(string recipient, string sender, string subject, string body, bool html) {
|
public static void AsyncSendEmail(string recipient, string sender, string subject, string body, bool html) {
|
||||||
System.Threading.ThreadPool.QueueUserWorkItem(delegate(object state) {
|
System.Threading.ThreadPool.QueueUserWorkItem(delegate(object state) {
|
||||||
MailMessage message = new MailMessage(sender, recipient, subject, body);
|
using(((WindowsIdentity)state).Impersonate()) {
|
||||||
message.IsBodyHtml = html;
|
MailMessage message = new MailMessage(sender, recipient, subject, body);
|
||||||
TrySendMessage(message);
|
message.IsBodyHtml = html;
|
||||||
});
|
TrySendMessage(message);
|
||||||
}
|
}
|
||||||
|
}, WindowsIdentity.GetCurrent());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tries to send a message, swallowing all exceptions.
|
/// Tries to send a message, swallowing all exceptions.
|
||||||
|
@ -94,15 +97,17 @@ namespace ScrewTurn.Wiki {
|
||||||
if(recipients.Length == 0) return;
|
if(recipients.Length == 0) return;
|
||||||
|
|
||||||
System.Threading.ThreadPool.QueueUserWorkItem(delegate(object state) {
|
System.Threading.ThreadPool.QueueUserWorkItem(delegate(object state) {
|
||||||
MailMessage message = new MailMessage(new MailAddress(sender), new MailAddress(sender));
|
using(((WindowsIdentity)state).Impersonate()) {
|
||||||
message.Subject = subject;
|
MailMessage message = new MailMessage(new MailAddress(sender), new MailAddress(sender));
|
||||||
message.Body = body;
|
message.Subject = subject;
|
||||||
for(int i = 0; i < recipients.Length; i++) {
|
message.Body = body;
|
||||||
message.Bcc.Add(new MailAddress(recipients[i]));
|
for(int i = 0; i < recipients.Length; i++) {
|
||||||
|
message.Bcc.Add(new MailAddress(recipients[i]));
|
||||||
|
}
|
||||||
|
message.IsBodyHtml = html;
|
||||||
|
TrySendMessage(message);
|
||||||
}
|
}
|
||||||
message.IsBodyHtml = html;
|
}, WindowsIdentity.GetCurrent());
|
||||||
TrySendMessage(message);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Resources;
|
using System.Resources;
|
||||||
|
using System.Security.Principal;
|
||||||
using System.Web.Configuration;
|
using System.Web.Configuration;
|
||||||
using ScrewTurn.Wiki.PluginFramework;
|
using ScrewTurn.Wiki.PluginFramework;
|
||||||
|
|
||||||
|
@ -192,24 +193,26 @@ namespace ScrewTurn.Wiki {
|
||||||
|
|
||||||
Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername);
|
Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername);
|
||||||
|
|
||||||
System.Threading.ThreadPool.QueueUserWorkItem(ignored => {
|
System.Threading.ThreadPool.QueueUserWorkItem(state => {
|
||||||
if((DateTime.Now - Settings.LastPageIndexing).TotalDays > 7) {
|
using(((WindowsIdentity)state).Impersonate()) {
|
||||||
Settings.LastPageIndexing = DateTime.Now;
|
if((DateTime.Now - Settings.LastPageIndexing).TotalDays > 7) {
|
||||||
System.Threading.Thread.Sleep(10000);
|
Settings.LastPageIndexing = DateTime.Now;
|
||||||
using(MemoryStream ms = new MemoryStream()) {
|
System.Threading.Thread.Sleep(10000);
|
||||||
using(StreamWriter wr = new System.IO.StreamWriter(ms)) {
|
using(MemoryStream ms = new MemoryStream()) {
|
||||||
System.Web.HttpContext.Current = new System.Web.HttpContext(new System.Web.Hosting.SimpleWorkerRequest("", "", wr));
|
using(StreamWriter wr = new System.IO.StreamWriter(ms)) {
|
||||||
foreach(var provider in Collectors.PagesProviderCollector.AllProviders) {
|
System.Web.HttpContext.Current = new System.Web.HttpContext(new System.Web.Hosting.SimpleWorkerRequest("", "", wr));
|
||||||
if(!provider.ReadOnly) {
|
foreach(var provider in Collectors.PagesProviderCollector.AllProviders) {
|
||||||
Log.LogEntry("Starting automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername);
|
if(!provider.ReadOnly) {
|
||||||
provider.RebuildIndex();
|
Log.LogEntry("Starting automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername);
|
||||||
Log.LogEntry("Finished automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername);
|
provider.RebuildIndex();
|
||||||
|
Log.LogEntry("Finished automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, WindowsIdentity.GetCurrent());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue