actually I gave wrong file name.
[mono.git] / mcs / class / System.Web / System.Web.Profile / ProfileModule.cs
1 //
2 // System.Web.UI.WebControls.ProfileModule.cs
3 //
4 // Authors:
5 //      Chris Toshok (toshok@ximian.com)
6 //
7 // (C) 2005 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 #if NET_2_0
30 using System;
31 using System.Web;\r
32 using System.Web.Configuration;\r
33 using System.Text;
34
35 namespace System.Web.Profile
36 {
37         public sealed class ProfileModule : IHttpModule
38         {
39                 HttpApplication app;
40                 ProfileBase profile;\r
41                 string anonymousCookieName = null;
42
43                 public ProfileModule ()
44                 {
45                 }
46
47                 public void Dispose ()
48                 {
49                         app.EndRequest -= OnLeave;\r
50                         app.PostMapRequestHandler -= OnEnter;
51                 }
52
53                 public void Init (HttpApplication app)
54                 {
55                         this.app = app;\r
56                         app.PostMapRequestHandler += OnEnter;
57                         app.EndRequest += OnLeave;\r
58 \r
59                         AnonymousIdentificationSection anonymousConfig = \r
60                                 (AnonymousIdentificationSection) WebConfigurationManager.GetSection ("system.web/anonymousIdentification");\r
61 \r
62                         if (anonymousConfig == null)\r
63                                 return;\r
64 \r
65                         anonymousCookieName = anonymousConfig.CookieName;\r
66                 }\r
67 \r
68                 void OnEnter (object o, EventArgs eventArgs)\r
69                 {\r
70                         if (!ProfileManager.Enabled)\r
71                                 return;\r
72 \r
73                         if (HttpContext.Current.Request.IsAuthenticated) {\r
74                                 HttpCookie cookie = app.Request.Cookies [anonymousCookieName];\r
75                                 if (cookie != null && (cookie.Expires != DateTime.MinValue && cookie.Expires > DateTime.Now)) {\r
76                                         if (MigrateAnonymous != null) {\r
77                                                 ProfileMigrateEventArgs e = new ProfileMigrateEventArgs (HttpContext.Current,\r
78                                                         Encoding.Unicode.GetString (Convert.FromBase64String (cookie.Value)));\r
79                                                 MigrateAnonymous (this, e);\r
80                                         }\r
81 \r
82                                         HttpCookie newCookie = new HttpCookie (anonymousCookieName);\r
83                                         newCookie.Path = app.Request.ApplicationPath;\r
84                                         newCookie.Expires = new DateTime (1970, 1, 1);\r
85                                         newCookie.Value = "";\r
86                                         app.Response.AppendCookie (newCookie);\r
87                                 }\r
88                         }\r
89                 }
90
91                 void OnLeave (object o, EventArgs eventArgs)
92                 {\r
93                         if (!ProfileManager.Enabled)\r
94                                 return;\r
95 \r
96                         if (!app.Context.ProfileInitialized)
97                                 return;
98
99                         if (ProfileManager.AutomaticSaveEnabled) {\r
100                                 profile = app.Context.Profile;\r
101 \r
102                                 if (profile == null)\r
103                                         return;\r
104 \r
105                                 if (ProfileAutoSaving != null) {\r
106                                         ProfileAutoSaveEventArgs args = new ProfileAutoSaveEventArgs (app.Context);\r
107                                         ProfileAutoSaving (this, args);\r
108                                         if (!args.ContinueWithProfileAutoSave)\r
109                                                 return;\r
110                                 }\r
111                                 profile.Save ();\r
112                         }
113                 }\r
114 \r
115                 public event ProfileMigrateEventHandler MigrateAnonymous;\r
116                 [MonoTODO ("implement event rising")]
117                 public event ProfileEventHandler Personalize;
118                 public event ProfileAutoSaveEventHandler ProfileAutoSaving;
119         }
120 }
121
122 #endif