2 // System.Web.Security.AnonymousIdentificationModule
5 // Ben Maurer (bmaurer@users.sourceforge.net)
6 // Chris Toshok (toshok@ximian.com)
9 // Copyright (c) 2005 Novell, Inc (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System
.Web
.Configuration
;
38 namespace System
.Web
.Security
{
40 public sealed class AnonymousIdentificationModule
: IHttpModule
{
43 public event AnonymousIdentificationEventHandler Creating
;
45 public static void ClearAnonymousIdentifier ()
47 if (Config
== null || !Config
.Enabled
)
48 /* XXX The user for the current request is anonymous */
49 throw new NotSupportedException ();
52 public void Dispose ()
54 app
.PostAuthenticateRequest
-= OnEnter
;
58 public void Init (HttpApplication app
)
61 app
.PostAuthenticateRequest
+= OnEnter
;
64 [MonoTODO ("cookieless userid")]
65 void OnEnter (object source
, EventArgs eventArgs
)
70 string anonymousID
= null;
72 HttpCookie cookie
= app
.Request
.Cookies
[Config
.CookieName
];
73 if (cookie
!= null && (cookie
.Expires
== DateTime
.MinValue
|| cookie
.Expires
> DateTime
.Now
)) {
75 anonymousID
= Encoding
.Unicode
.GetString (Convert
.FromBase64String (cookie
.Value
));
80 if (anonymousID
== null) {
81 if (Creating
!= null) {
82 AnonymousIdentificationEventArgs e
= new AnonymousIdentificationEventArgs (HttpContext
.Current
);
85 anonymousID
= e
.AnonymousID
;
88 if (anonymousID
== null)
89 anonymousID
= Guid
.NewGuid ().ToString ();
91 HttpCookie newCookie
= new HttpCookie (Config
.CookieName
);
92 newCookie
.Path
= app
.Request
.ApplicationPath
;
93 newCookie
.Expires
= DateTime
.Now
+ Config
.CookieTimeout
;
94 newCookie
.Value
= Convert
.ToBase64String (Encoding
.Unicode
.GetBytes (anonymousID
));
95 app
.Response
.AppendCookie (newCookie
);
97 app
.Request
.AnonymousID
= anonymousID
;
100 public static bool Enabled
{
105 return Config
.Enabled
;
109 static AnonymousIdentificationSection Config
113 return (AnonymousIdentificationSection
) WebConfigurationManager
.GetSection ("system.web/anonymousIdentification");