// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
using System;
+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;
+ 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); }
+ }
- [MonoTODO]
public ProfileModule ()
{
}
- [MonoTODO]
public void Dispose ()
{
app.EndRequest -= OnLeave;
+ app.PostMapRequestHandler -= OnEnter;
}
- [MonoTODO]
public void Init (HttpApplication app)
{
this.app = app;
+ app.PostMapRequestHandler += OnEnter;
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)
{
- if (profile == null)
+ 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;
- }
- profile.Save();
+ ProfileAutoSaveEventHandler eh = events [profileAutoSavingEvent] as ProfileAutoSaveEventHandler;
+ if (eh != null) {
+ ProfileAutoSaveEventArgs args = new ProfileAutoSaveEventArgs (app.Context);
+ eh (this, args);
+ if (!args.ContinueWithProfileAutoSave)
+ return;
+ }
+ profile.Save ();
+ }
}
-
- public event ProfileMigrateEventHandler MigrateAnonymous;
- public event ProfileEventHandler Personalize;
- public event ProfileAutoSaveEventHandler ProfileAutoSaving;
}
}
-
-#endif