Merge pull request #2735 from xmcclure/early-lookup-addr
[mono.git] / mcs / class / System.Web / System.Web.Security / FormsAuthenticationTicket.cs
index 1f4be166fd1f636858987e8ebe4d369a07d8ab27..5adad7863bb14a5cf00698c61b9a2e0b4ca22e53 100644 (file)
 //     Gonzalo Paniagua Javier (gonzalo@ximian.com)
 //
 // (C) 2002 Ximian, Inc (http://www.ximian.com)
+// Copyright (c) 2005 Novell, Inc (http://www.novell.com)
 //
 
-using System;
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.IO;
+using System.Security.Permissions;
 
 namespace System.Web.Security
 {
+       // CAS - no InheritanceDemand here as the class is sealed
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       // attributes
        [Serializable]
        public sealed class FormsAuthenticationTicket
        {
                int version;
-               string name;
-               DateTime issueDate;
+               bool persistent;
+               DateTime issue_date;
                DateTime expiration;
-               bool isPersistent;
-               string userData;
-               string cookiePath;
+               string name;
+               string cookie_path;
+               string user_data;
+
+               /*
+               internal void ToStr ()
+               {
+                       Console.WriteLine ("version: {0}", version);
+                       Console.WriteLine ("persistent: {0}", persistent);
+                       Console.WriteLine ("issue_date: {0}", issue_date);
+                       Console.WriteLine ("expiration: {0}", expiration);
+                       Console.WriteLine ("name: {0}", name);
+                       Console.WriteLine ("cookie_path: {0}", cookie_path);
+                       Console.WriteLine ("user_data: {0}", user_data);
+               }
+               */
+
+               internal byte [] ToByteArray ()
+               {
+                       MemoryStream ms = new MemoryStream ();
+                       BinaryWriter writer = new BinaryWriter (ms);
+                       writer.Write (version);
+                       writer.Write (persistent);
+                       writer.Write (issue_date.Ticks);
+                       writer.Write (expiration.Ticks);
+                       writer.Write (name != null);
+                       if (name != null)
+                               writer.Write (name);
+
+                       writer.Write (cookie_path != null);
+                       if (cookie_path != null)
+                               writer.Write (cookie_path);
+
+                       writer.Write (user_data != null);
+                       if (user_data != null)
+                               writer.Write (user_data);
+
+                       writer.Flush ();
+                       return ms.ToArray ();
+               }
+
+               internal static FormsAuthenticationTicket FromByteArray (byte [] bytes)
+               {
+                       if (bytes == null)
+                               throw new ArgumentNullException ("bytes");
+                       
+                       MemoryStream ms = new MemoryStream (bytes);
+                       BinaryReader reader = new BinaryReader (ms);
+                       FormsAuthenticationTicket ticket = new FormsAuthenticationTicket ();
+                       ticket.version = reader.ReadInt32 ();
+                       ticket.persistent = reader.ReadBoolean ();
+                       ticket.issue_date = new DateTime (reader.ReadInt64 ());
+                       ticket.expiration = new DateTime (reader.ReadInt64 ());
+                       if (reader.ReadBoolean ())
+                               ticket.name = reader.ReadString ();
+
+                       if (reader.ReadBoolean ())
+                               ticket.cookie_path = reader.ReadString ();
+
+                       if (reader.ReadBoolean ())
+                               ticket.user_data = reader.ReadString ();
+
+                       return ticket;
+               }
+
+               FormsAuthenticationTicket ()
+               {
+               }
 
                public FormsAuthenticationTicket (int version,
                                                  string name,
@@ -31,11 +122,11 @@ namespace System.Web.Security
                {
                        this.version = version;
                        this.name = name;
-                       this.issueDate = issueDate;
+                       this.issue_date = issueDate;
                        this.expiration = expiration;
-                       this.isPersistent = isPersistent;
-                       this.userData = userData;
-                       //FIXME: cookiePath???
+                       this.persistent = isPersistent;
+                       this.user_data = userData;
+                       this.cookie_path = "/";
                }
 
                public FormsAuthenticationTicket (int version,
@@ -48,82 +139,75 @@ namespace System.Web.Security
                {
                        this.version = version;
                        this.name = name;
-                       this.issueDate = issueDate;
+                       this.issue_date = issueDate;
                        this.expiration = expiration;
-                       this.isPersistent = isPersistent;
-                       this.userData = userData;
-                       this.cookiePath = cookiePath;
+                       this.persistent = isPersistent;
+                       this.user_data = userData;
+                       this.cookie_path = cookiePath;
                }
 
                public FormsAuthenticationTicket (string name, bool isPersistent, int timeout)
                {
                        this.version = 1;
                        this.name = name;
-                       this.issueDate = DateTime.Now;
-                       this.isPersistent = isPersistent;
-                       if (isPersistent)
-                               expiration = issueDate.AddYears (50);
+                       this.issue_date = DateTime.Now;
+                       this.persistent = isPersistent;
+                       if (persistent)
+                               expiration = issue_date.AddYears (50);
                        else
-                               expiration = issueDate.AddMinutes ((double) timeout);
+                               expiration = issue_date.AddMinutes ((double) timeout);
 
-                       this.userData = String.Empty;
-                       //FIXME: cookiePath???
+                       this.user_data = "";
+                       this.cookie_path = "/";
                }
 
-               public string CookiePath
+               internal void SetDates (DateTime issue_date, DateTime expiration)
                {
-                       get {
-                               return cookiePath;
-                       }
+                       this.issue_date = issue_date;
+                       this.expiration = expiration;
                }
-
-               public DateTime Expiration
+               
+               internal FormsAuthenticationTicket Clone ()
                {
-                       get {
-                               return expiration;
-                       }
+                       return new FormsAuthenticationTicket   (version,
+                                                               name,
+                                                               issue_date,
+                                                               expiration,
+                                                               persistent,
+                                                               user_data,
+                                                               cookie_path);
                }
 
-               public bool Expired
-               {
-                       get {
-                               return DateTime.Now > expiration;
-                       }
+               public string CookiePath {
+                       get { return cookie_path; }
                }
 
-               public bool IsPersistent
-               {
-                       get {
-                               return isPersistent;
-                       }
+               public DateTime Expiration {
+                       get { return expiration; }
                }
 
-               public DateTime IssueDate
-               {
-                       get {
-                               return issueDate;
-                       }
+               public bool Expired {
+                       get { return DateTime.Now > expiration; }
                }
 
-               public string Name
-               {
-                       get {
-                               return name;
-                       }
+               public bool IsPersistent {
+                       get { return persistent; }
                }
 
-               public string UserData
-               {
-                       get {
-                               return userData;
-                       }
+               public DateTime IssueDate {
+                       get { return issue_date; }
                }
 
-               public int Version
-               {
-                       get {
-                               return version;
-                       }
+               public string Name {
+                       get { return name; }
+               }
+
+               public string UserData {
+                       get { return user_data; }
+               }
+
+               public int Version {
+                       get { return version; }
                }
        }
 }