// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
using System;
-using System.Web;\r
-using System.Web.Configuration;\r
+using System.ComponentModel;
+using System.Web;
+using System.Web.Configuration;
using System.Text;
namespace System.Web.Profile
{
public sealed class ProfileModule : IHttpModule
{
+ static readonly object migrateAnonymousEvent = new object ();
+ static readonly object personalizeEvent = new object ();
+ static readonly object profileAutoSavingEvent = new object ();
+
HttpApplication app;
- ProfileBase profile;\r
+ ProfileBase profile;
string anonymousCookieName = null;
+ EventHandlerList events = new EventHandlerList ();
+
+ public event ProfileMigrateEventHandler MigrateAnonymous {
+ add { events.AddHandler (migrateAnonymousEvent, value); }
+ remove { events.RemoveHandler (migrateAnonymousEvent, value); }
+ }
+
+ [MonoTODO ("implement event rising")]
+ public event ProfileEventHandler Personalize {
+ add { events.AddHandler (personalizeEvent, value); }
+ remove { events.RemoveHandler (personalizeEvent, value); }
+ }
+
+ public event ProfileAutoSaveEventHandler ProfileAutoSaving {
+ add { events.AddHandler (profileAutoSavingEvent, value); }
+ remove { events.RemoveHandler (profileAutoSavingEvent, value); }
+ }
+
public ProfileModule ()
{
}
public void Dispose ()
{
- app.EndRequest -= OnLeave;\r
+ app.EndRequest -= OnLeave;
app.PostMapRequestHandler -= OnEnter;
}
public void Init (HttpApplication app)
{
- this.app = app;\r
+ this.app = app;
app.PostMapRequestHandler += OnEnter;
- app.EndRequest += OnLeave;\r
-\r
- AnonymousIdentificationSection anonymousConfig = \r
- (AnonymousIdentificationSection) WebConfigurationManager.GetSection ("system.web/anonymousIdentification");\r
-\r
- if (anonymousConfig == null)\r
- return;\r
-\r
- anonymousCookieName = anonymousConfig.CookieName;\r
- }\r
-\r
- void OnEnter (object o, EventArgs eventArgs)\r
- {\r
- if (!ProfileManager.Enabled)\r
- return;\r
-\r
- if (HttpContext.Current.Request.IsAuthenticated) {\r
- HttpCookie cookie = app.Request.Cookies [anonymousCookieName];\r
- if (cookie != null && (cookie.Expires != DateTime.MinValue && cookie.Expires > DateTime.Now)) {\r
- if (MigrateAnonymous != null) {\r
- ProfileMigrateEventArgs e = new ProfileMigrateEventArgs (HttpContext.Current,\r
- Encoding.Unicode.GetString (Convert.FromBase64String (cookie.Value)));\r
- MigrateAnonymous (this, e);\r
- }\r
-\r
- HttpCookie newCookie = new HttpCookie (anonymousCookieName);\r
- newCookie.Path = app.Request.ApplicationPath;\r
- newCookie.Expires = new DateTime (1970, 1, 1);\r
- newCookie.Value = "";\r
- app.Response.AppendCookie (newCookie);\r
- }\r
- }\r
+ app.EndRequest += OnLeave;
+
+ AnonymousIdentificationSection anonymousConfig =
+ (AnonymousIdentificationSection) WebConfigurationManager.GetSection ("system.web/anonymousIdentification");
+
+ if (anonymousConfig == null)
+ return;
+
+ anonymousCookieName = anonymousConfig.CookieName;
+ }
+
+ void OnEnter (object o, EventArgs eventArgs)
+ {
+ if (!ProfileManager.Enabled)
+ return;
+
+ if (HttpContext.Current.Request.IsAuthenticated) {
+ HttpCookie cookie = app.Request.Cookies [anonymousCookieName];
+ if (cookie != null && (cookie.Expires != DateTime.MinValue && cookie.Expires > DateTime.Now)) {
+ ProfileMigrateEventHandler eh = events [migrateAnonymousEvent] as ProfileMigrateEventHandler;
+ if (eh != null) {
+ ProfileMigrateEventArgs e = new ProfileMigrateEventArgs (HttpContext.Current,
+ Encoding.Unicode.GetString (Convert.FromBase64String (cookie.Value)));
+ eh (this, e);
+ }
+
+ HttpCookie newCookie = new HttpCookie (anonymousCookieName);
+ newCookie.Path = app.Request.ApplicationPath;
+ newCookie.Expires = new DateTime (1970, 1, 1);
+ newCookie.Value = "";
+ app.Response.AppendCookie (newCookie);
+ }
+ }
}
void OnLeave (object o, EventArgs eventArgs)
- {\r
- if (!ProfileManager.Enabled)\r
- return;\r
-\r
- profile = app.Context.Profile;
-
- if (profile == null)
- return;\r
+ {
+ if (!ProfileManager.Enabled)
+ return;
+
+ if (!app.Context.ProfileInitialized)
+ return;
- if (ProfileAutoSaving != null) {
- ProfileAutoSaveEventArgs args = new ProfileAutoSaveEventArgs (app.Context);
- ProfileAutoSaving (this, args);
- if (!args.ContinueWithProfileAutoSave)
+ if (ProfileManager.AutomaticSaveEnabled) {
+ profile = app.Context.Profile;
+
+ if (profile == null)
return;
+
+ ProfileAutoSaveEventHandler eh = events [profileAutoSavingEvent] as ProfileAutoSaveEventHandler;
+ if (eh != null) {
+ ProfileAutoSaveEventArgs args = new ProfileAutoSaveEventArgs (app.Context);
+ eh (this, args);
+ if (!args.ContinueWithProfileAutoSave)
+ return;
+ }
+ profile.Save ();
}
- profile.Save();
- }\r
-\r
- public event ProfileMigrateEventHandler MigrateAnonymous;\r
- [MonoTODO ("implement event rising")]
- public event ProfileEventHandler Personalize;
- public event ProfileAutoSaveEventHandler ProfileAutoSaving;
+ }
}
}
-
-#endif