Merge pull request #1275 from ranma42/fix-lib64
[mono.git] / mcs / class / System.Web / System.Web.Security / MembershipUser.cs
index fb5c4b89a10aa7cd6ccd4af02d7cba8474547a75..b2bae459a52116303d52b0691a7ea04bf1f16b36 100644 (file)
 // 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;
+using System.Reflection;
+using System.Runtime.CompilerServices;
 
-#if NET_2_0
 namespace System.Web.Security
 {
+#if NET_4_0
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
        [Serializable]
        public class MembershipUser
        {
@@ -47,7 +52,7 @@ namespace System.Web.Security
                DateTime lastActivityDate;
                DateTime lastPasswordChangedDate;
                DateTime lastLockoutDate;
-               
+
                protected MembershipUser ()
                {
                }
@@ -65,18 +70,39 @@ namespace System.Web.Security
                        this.comment = comment;
                        this.isApproved = isApproved;
                        this.isLockedOut = isLockedOut;
-                       this.creationDate = creationDate;
-                       this.lastLoginDate = lastLoginDate;
-                       this.lastActivityDate = lastActivityDate;
-                       this.lastPasswordChangedDate = lastPasswordChangedDate;
-                       this.lastLockoutDate = lastLockoutDate;
+                       this.creationDate = creationDate.ToUniversalTime ();
+                       this.lastLoginDate = lastLoginDate.ToUniversalTime ();
+                       this.lastActivityDate = lastActivityDate.ToUniversalTime ();
+                       this.lastPasswordChangedDate = lastPasswordChangedDate.ToUniversalTime ();
+                       this.lastLockoutDate = lastLockoutDate.ToUniversalTime ();
                }
                
+               void UpdateSelf (MembershipUser fromUser)
+               {
+                       try { Comment = fromUser.Comment; } catch (NotSupportedException) {}
+                       try { creationDate = fromUser.CreationDate; } catch (NotSupportedException) {}
+                       try { Email = fromUser.Email; } catch (NotSupportedException) {}
+                       try { IsApproved = fromUser.IsApproved; } catch (NotSupportedException) {}
+                       try { isLockedOut = fromUser.IsLockedOut; } catch (NotSupportedException) {}
+                       try { LastActivityDate = fromUser.LastActivityDate; } catch (NotSupportedException) {}
+                       try { lastLockoutDate = fromUser.LastLockoutDate; } catch (NotSupportedException) {}
+                       try { LastLoginDate = fromUser.LastLoginDate; } catch (NotSupportedException) {}
+                       try { lastPasswordChangedDate = fromUser.LastPasswordChangedDate; } catch (NotSupportedException) {}
+                       try { passwordQuestion = fromUser.PasswordQuestion; } catch (NotSupportedException) {}
+                       try { providerUserKey = fromUser.ProviderUserKey; } catch (NotSupportedException) {}
+               }
+
+               internal void UpdateUser ()
+               {
+                       MembershipUser newUser = Provider.GetUser (name, false);
+                       UpdateSelf (newUser);
+               }
+
                public virtual bool ChangePassword (string oldPassword, string newPassword)
                {
                        bool success = Provider.ChangePassword (UserName, oldPassword, newPassword);
-                       if (success)
-                               lastPasswordChangedDate = DateTime.Now;
+
+                       UpdateUser ();
                        
                        return success;
                }
@@ -84,8 +110,8 @@ namespace System.Web.Security
                public virtual bool ChangePasswordQuestionAndAnswer (string password, string newPasswordQuestion, string newPasswordAnswer)
                {
                        bool success = Provider.ChangePasswordQuestionAndAnswer (UserName, password, newPasswordQuestion, newPasswordAnswer);
-                       if (success)
-                               passwordQuestion = newPasswordQuestion;
+
+                       UpdateUser ();
                        
                        return success;
                }
@@ -108,8 +134,8 @@ namespace System.Web.Security
                public virtual string ResetPassword (string answer)
                {
                        string newPass = Provider.ResetPassword (UserName, answer);
-                       if (newPass != null)
-                               lastPasswordChangedDate = DateTime.Now;
+
+                       UpdateUser ();
                        
                        return newPass;
                }
@@ -120,7 +146,7 @@ namespace System.Web.Security
                }
                
                public virtual DateTime CreationDate {
-                       get { return creationDate; }
+                       get { return creationDate.ToLocalTime (); }
                }
                
                public virtual string Email {
@@ -136,29 +162,43 @@ namespace System.Web.Security
                public virtual bool IsLockedOut {
                        get { return isLockedOut; }
                }
-               
-               public bool IsOnline {
+
+#if NET_4_0
+               public virtual
+#else
+               public
+#endif
+               bool IsOnline {
                        get {
-                               return LastActivityDate > DateTime.Now - TimeSpan.FromMinutes (Membership.UserIsOnlineTimeWindow);  
+                               int minutes;
+#if NET_4_0
+                               IMembershipHelper helper = MembershipProvider.Helper;
+                               if (helper == null)
+                                       throw new PlatformNotSupportedException ("The method is not available.");
+                               minutes = helper.UserIsOnlineTimeWindow;
+#else
+                               minutes = Membership.UserIsOnlineTimeWindow;
+#endif
+                               return LastActivityDate > DateTime.Now - TimeSpan.FromMinutes (minutes);
                        }
                }
                
                public virtual DateTime LastActivityDate {
-                       get { return lastActivityDate; }
-                       set { lastActivityDate = value; }
+                       get { return lastActivityDate.ToLocalTime (); }
+                       set { lastActivityDate = value.ToUniversalTime (); }
                }
                
                public virtual DateTime LastLoginDate {
-                       get { return lastLoginDate; }
-                       set { lastLoginDate = value; }
+                       get { return lastLoginDate.ToLocalTime (); }
+                       set { lastLoginDate = value.ToUniversalTime (); }
                }
                
                public virtual DateTime LastPasswordChangedDate {
-                       get { return lastPasswordChangedDate; }
+                       get { return lastPasswordChangedDate.ToLocalTime (); }
                }
                
                public virtual DateTime LastLockoutDate {
-                       get { return lastLockoutDate; }
+                       get { return lastLockoutDate.ToLocalTime (); }
                }
                
                public virtual string PasswordQuestion {
@@ -184,21 +224,30 @@ namespace System.Web.Security
                
                public virtual bool UnlockUser ()
                {
-                       if (Provider.UnlockUser (UserName)) {
-                               isLockedOut = false;
-                               return true;
-                       }
-                       return false;
+                       bool retval = Provider.UnlockUser (UserName);
+
+                       UpdateUser ();
+
+                       return retval;
                }
                
                MembershipProvider Provider {
                        get {
-                               MembershipProvider p = Membership.Providers [ProviderName];
-                               if (p == null) throw new InvalidOperationException ("Membership provider '" + ProviderName + "' not found.");
+                               MembershipProvider p;                           
+#if NET_4_0
+                               IMembershipHelper helper = MembershipProvider.Helper;
+                               if (helper == null)
+                                       throw new PlatformNotSupportedException ("The method is not available.");
+                               p = helper.Providers [ProviderName];
+#else
+                               p = Membership.Providers [ProviderName];
+#endif
+                               if (p == null)
+                                       throw new InvalidOperationException ("Membership provider '" + ProviderName + "' not found.");
                                return p;
                        }
                }
        }
 }
-#endif
+