Mark tests as not working under TARGET_JVM
[mono.git] / mcs / class / Mainsoft.Web / Mainsoft.Web.Security / DerbyMembershipProvider.cs
index 5f19282184e85c66cca0d9b7f9bef07bed20d01e..7590f46366106c19b06081b136922f19e0ee5611 100644 (file)
@@ -61,11 +61,20 @@ namespace Mainsoft.Web.Security {
                string passwordStrengthRegularExpression;
                TimeSpan userIsOnlineTimeWindow;
                ConnectionStringSettings connectionString;
+               bool schemaChecked = false;
+               DerbyUnloadManager.DerbyShutDownPolicy shutDownPolicy = DerbyUnloadManager.DerbyShutDownPolicy.Default;
 
                string applicationName;
 
                DbConnection CreateConnection ()
                {\r
+                       if (!schemaChecked) {\r
+                               DerbyDBSchema.CheckSchema (connectionString.ConnectionString);\r
+                               schemaChecked = true;\r
+\r
+                               DerbyUnloadManager.RegisterUnloadHandler (connectionString.ConnectionString, shutDownPolicy);\r
+                       }\r
+\r
                        OleDbConnection connection = new OleDbConnection (connectionString.ConnectionString);
                        connection.Open ();
                        return connection;
@@ -96,7 +105,7 @@ namespace Mainsoft.Web.Security {
                                        EmitValidatingPassword (username, newPwd, false);\r
                                        string db_password = EncodePassword (newPwd, pi.PasswordFormat, pi.PasswordSalt);\r
 \r
-                                       int st = DerbyMembershipHelper.Membership_SetPassword (connection, ApplicationName, username, newPwd, (int) pi.PasswordFormat, pi.PasswordSalt, DateTime.UtcNow);\r
+                                       int st = DerbyMembershipHelper.Membership_SetPassword (connection, ApplicationName, username, db_password, (int) pi.PasswordFormat, pi.PasswordSalt, DateTime.UtcNow);\r
 \r
                                        if (st == 0)\r
                                                return true;\r
@@ -123,7 +132,7 @@ namespace Mainsoft.Web.Security {
                                if (pi != null) {
                                        string db_passwordAnswer = EncodePassword (newPwdAnswer, pi.PasswordFormat, pi.PasswordSalt);\r
 \r
-                                       int st = DerbyMembershipHelper.Membership_ChangePasswordQuestionAndAnswer (connection, ApplicationName, username, newPwdQuestion, newPwdAnswer);
+                                       int st = DerbyMembershipHelper.Membership_ChangePasswordQuestionAndAnswer (connection, ApplicationName, username, newPwdQuestion, db_passwordAnswer);
 
                                        if (st == 0)
                                                return true;
@@ -179,7 +188,7 @@ namespace Mainsoft.Web.Security {
                                status = MembershipCreateStatus.InvalidAnswer;
                                return null;
                        }
-                       if (providerUserKey != null && !(providerUserKey is string)) {
+                       if (providerUserKey != null && !(providerUserKey is Guid)) {
                                status = MembershipCreateStatus.InvalidProviderUserKey;
                                return null;
                        }\r
@@ -214,12 +223,13 @@ namespace Mainsoft.Web.Security {
 
                        using (DbConnection connection = CreateConnection ()) {
                                try {\r
-                                       \r
 \r
+                                       object helperUserKey = providerUserKey != null ? providerUserKey.ToString () : null;\r
                                        DateTime Now = DateTime.UtcNow;\r
                                        int st = DerbyMembershipHelper.Membership_CreateUser (connection, ApplicationName, username, password, passwordSalt, email,\r
-                                               pwdQuestion, pwdAnswer, isApproved, Now, Now, RequiresUniqueEmail, (int)PasswordFormat, ref providerUserKey);\r
+                                               pwdQuestion, pwdAnswer, isApproved, Now, Now, RequiresUniqueEmail, (int) PasswordFormat, ref helperUserKey);\r
 \r
+                                       providerUserKey = new Guid ((string) helperUserKey);\r
                                        if (st == 0)\r
                                                return GetUser (providerUserKey, false);
                                        else if (st == 2)
@@ -408,7 +418,7 @@ namespace Mainsoft.Web.Security {
                        string password = null;
 
                        using (DbConnection connection = CreateConnection ()) {\r
-                               int st = DerbyMembershipHelper.Membership_GetPassword (connection, ApplicationName, username, answer, MaxInvalidPasswordAttempts, PasswordAttemptWindow, DateTime.UtcNow, out password);\r
+                               int st = DerbyMembershipHelper.Membership_GetPassword (connection, ApplicationName, username, user_answer, MaxInvalidPasswordAttempts, PasswordAttemptWindow, DateTime.UtcNow, out password);\r
 \r
                                if (st == 1)\r
                                        throw new ProviderException ("User specified by username is not found in the membership database");\r
@@ -421,24 +431,24 @@ namespace Mainsoft.Web.Security {
 
                                return DecodePassword (password, pi.PasswordFormat);
                        }
-               }
-
-               MembershipUser GetUserFromReader (DbDataReader reader)
-               {
-                       return new MembershipUser (
+               }\r
+\r
+               MembershipUser GetUserFromReader (DbDataReader reader)\r
+               {\r
+                       return new MembershipUser (\r
                                this.Name,                                          /* XXX is this right?  */\r
                                reader.GetString (0),                               /* name */\r
-                               reader.GetString (1),                               /* providerUserKey */
+                               new Guid (reader.GetString (1)),                    /* providerUserKey */\r
                                reader.IsDBNull (2) ? null : reader.GetString (2),  /* email */\r
                                reader.IsDBNull (3) ? null : reader.GetString (3),  /* passwordQuestion */\r
-                               reader.IsDBNull (4) ? null : reader.GetString (4),  /* comment */
+                               reader.IsDBNull (4) ? null : reader.GetString (4),  /* comment */\r
                                reader.GetInt32 (5) > 0,                            /* isApproved */\r
-                               reader.GetInt32 (6) > 0,                            /* isLockedOut */
+                               reader.GetInt32 (6) > 0,                            /* isLockedOut */\r
                                reader.GetDateTime (7).ToLocalTime (),              /* creationDate */\r
                                reader.GetDateTime (8).ToLocalTime (),              /* lastLoginDate */\r
                                reader.GetDateTime (9).ToLocalTime (),              /* lastActivityDate */\r
                                reader.GetDateTime (10).ToLocalTime (),             /* lastPasswordChangedDate */\r
-                               reader.GetDateTime (11).ToLocalTime ()              /* lastLockoutDate */);
+                               reader.GetDateTime (11).ToLocalTime ()              /* lastLockoutDate */);\r
                }
 
                public override MembershipUser GetUser (string username, bool userIsOnline)
@@ -466,12 +476,12 @@ namespace Mainsoft.Web.Security {
                        if (providerUserKey == null)\r
                                throw new ArgumentNullException ("providerUserKey");\r
 \r
-                       if (!(providerUserKey is string))\r
-                               throw new ArgumentException ("providerUserKey is not of type string");\r
+                       if (!(providerUserKey is Guid))\r
+                               throw new ArgumentException ("providerUserKey is not of type Guid", "providerUserKey");\r
 \r
                        using (DbConnection connection = CreateConnection ()) {\r
                                DbDataReader reader = null;\r
-                               int st = DerbyMembershipHelper.Membership_GetUserByUserId (connection, providerUserKey, userIsOnline, DateTime.UtcNow, out reader);\r
+                               int st = DerbyMembershipHelper.Membership_GetUserByUserId (connection, providerUserKey.ToString (), userIsOnline, DateTime.UtcNow, out reader);\r
                                using (reader) {\r
                                        if (st == 0 && reader != null) {\r
                                                MembershipUser u = GetUserFromReader (reader);\r
@@ -598,8 +608,15 @@ namespace Mainsoft.Web.Security {
                                throw new ProviderException ("The ConnectionStringName attribute must be present and non-zero length.");
 
                        connectionString = WebConfigurationManager.ConnectionStrings [connectionStringName];\r
+                       if (connectionString == null)\r
+                               throw new ProviderException (String.Format ("The connection name '{0}' was not found in the applications configuration or the connection string is empty.", connectionStringName));\r
+\r
+                       if (connectionString == null)\r
+                               throw new ProviderException (String.Format ("The connection name '{0}' was not found in the applications configuration or the connection string is empty.", connectionStringName));\r
 \r
-                       DerbyDBSchema.InitializeSchema (connectionString.ConnectionString);\r
+                       string shutdown = config ["shutdown"];\r
+                       if (!String.IsNullOrEmpty (shutdown))\r
+                               shutDownPolicy = (DerbyUnloadManager.DerbyShutDownPolicy) Enum.Parse (typeof (DerbyUnloadManager.DerbyShutDownPolicy), shutdown, true);\r
                }
 
                public override string ResetPassword (string username, string answer)