Esempio n. 1
0
            /// <summary>
            /// Updates the encrypted data for a record being re-encrypted
            /// </summary>
            /// <param name="tableName">Name of the table to update</param>
            /// <param name="primaryKey">Primary key ID for the record to be updated</param>
            /// <param name="encryptedData">Re-encrypted data to save for the specfied record</param>
            /// <returns>True if the update is successful</returns>
            private static bool SaveRecryptedData(string tableName, int primaryKey, string encryptedData)
            {
                // DETERMINE APPROPRIATE FIELD NAMES
                string dataFieldName, keyFieldName;

                switch (tableName)
                {
                case "ac_Payments":
                    dataFieldName = "EncryptedAccountData";
                    keyFieldName  = "PaymentId";
                    break;

                case "ac_PaymentGateways":
                    dataFieldName = "ConfigData";
                    keyFieldName  = "PaymentGatewayId";
                    break;

                case "ac_ShipGateways":
                    dataFieldName = "ConfigData";
                    keyFieldName  = "ShipGatewayId";
                    break;

                case "ac_TaxGateways":
                    dataFieldName = "ConfigData";
                    keyFieldName  = "TaxGatewayId";
                    break;

                default:
                    throw new ArgumentException("tableName must be one of these values: ac_Payments, ac_PaymentGateways, ac_ShipGateways, ac_TaxGateways", "tableName");
                }

                // EXECUTE THE UPDATE QUERY
                Database  database      = Token.Instance.Database;
                DbCommand updateCommand = database.GetSqlStringCommand("UPDATE " + tableName + " SET " + dataFieldName + " = @encryptedData, ReCrypt = 0 WHERE " + keyFieldName + " = @primaryKey");

                database.AddInParameter(updateCommand, "@encryptedData", DbType.String, NullableData.DbNullify(encryptedData));
                database.AddInParameter(updateCommand, "@primaryKey", DbType.Int32, primaryKey);
                int affected = AlwaysConvert.ToInt(database.ExecuteNonQuery(updateCommand));

                return(affected == 1);
            }
Esempio n. 2
0
        /// <summary>
        /// Estimates the number of records that may need to be updated with a key change
        /// </summary>
        /// <returns>Number of records that may need to be updated with a key change</returns>
        public static int EstimateRecryptionWorkload()
        {
            Database database = Token.Instance.Database;

            // COUNT ENCRYPTED DATA IN PAYMENTS TABLE
            DbCommand selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_Payments WHERE EncryptedAccountData IS NOT NULL");
            int       totalCount    = AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));

            // COUNT CONFIGDATA IN PAYMENTGATEWAYS TABLE
            selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_PaymentGateways WHERE ConfigData IS NOT NULL");
            totalCount   += AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));

            // COUNT CONFIGDATA IN SHIPGATEWAYS TABLE
            selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_ShipGateways WHERE ConfigData IS NOT NULL");
            totalCount   += AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));

            // COUNT CONFIGDATA IN TAXGATEWAYS TABLE
            selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_TaxGateways WHERE ConfigData IS NOT NULL");
            totalCount   += AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));
            return(totalCount);
        }
Esempio n. 3
0
        /// <summary>
        /// Counts the total number of records in the database that are marked for recrypt
        /// </summary>
        /// <returns>The total number of records in the database that are marked for recrypt</returns>
        /// <remarks>Unless a recryption is in progress, this will always return 0. Use EstimateRecryptionWorkload to
        /// count the records that would need recryption in the event of a key change.</remarks>
        public static int GetRecryptionWorkload()
        {
            Database database = Token.Instance.Database;

            // COUNT FOR PAYMENTS TABLE
            DbCommand selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_Payments WHERE ReCrypt = 1");
            int       totalCount    = AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));

            // COUNT FOR PAYMENTGATEWAYS TABLE
            selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_PaymentGateways WHERE ReCrypt = 1");
            totalCount   += AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));

            // COUNT FOR PAYMENTGATEWAYS TABLE
            selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_ShipGateways WHERE ReCrypt = 1");
            totalCount   += AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));

            // COUNT FOR PAYMENTGATEWAYS TABLE
            selectCommand = database.GetSqlStringCommand("SELECT COUNT(*) AS TotalRecords FROM ac_TaxGateways WHERE ReCrypt = 1");
            totalCount   += AlwaysConvert.ToInt(database.ExecuteScalar(selectCommand));
            return(totalCount);
        }
        /// <summary>
        /// Saves this ErrorMessage object to the database.
        /// </summary>
        /// <returns><b>SaveResult</b> enumeration that represents the result of the save operation.</returns>
        public virtual SaveResult Save()
        {
            if (this.IsDirty)
            {
                Database database     = Token.Instance.Database;
                bool     recordExists = true;

                //SET EMPTY STOREID TO CURRENT CONTEXT
                if (this.StoreId == 0)
                {
                    this.StoreId = Token.Instance.StoreId;
                }
                if (this.ErrorMessageId == 0)
                {
                    recordExists = false;
                }

                //SET DEFAULT FOR DATE FIELD
                if (this.EntryDate == System.DateTime.MinValue)
                {
                    this.EntryDate = LocaleHelper.LocalNow;
                }

                if (recordExists)
                {
                    //verify whether record is already present
                    StringBuilder selectQuery = new StringBuilder();
                    selectQuery.Append("SELECT COUNT(*) As RecordCount FROM ac_ErrorMessages");
                    selectQuery.Append(" WHERE ErrorMessageId = @ErrorMessageId");
                    using (DbCommand selectCommand = database.GetSqlStringCommand(selectQuery.ToString()))
                    {
                        database.AddInParameter(selectCommand, "@ErrorMessageId", System.Data.DbType.Int32, this.ErrorMessageId);
                        if ((int)database.ExecuteScalar(selectCommand) == 0)
                        {
                            recordExists = false;
                        }
                    }
                }

                int result = 0;
                if (recordExists)
                {
                    //UPDATE
                    StringBuilder updateQuery = new StringBuilder();
                    updateQuery.Append("UPDATE ac_ErrorMessages SET ");
                    updateQuery.Append("EntryDate = @EntryDate");
                    updateQuery.Append(", StoreId = @StoreId");
                    updateQuery.Append(", MessageSeverityId = @MessageSeverityId");
                    updateQuery.Append(", Text = @Text");
                    updateQuery.Append(", DebugData = @DebugData");
                    updateQuery.Append(" WHERE ErrorMessageId = @ErrorMessageId");
                    using (DbCommand updateCommand = database.GetSqlStringCommand(updateQuery.ToString()))
                    {
                        database.AddInParameter(updateCommand, "@ErrorMessageId", System.Data.DbType.Int32, this.ErrorMessageId);
                        database.AddInParameter(updateCommand, "@EntryDate", System.Data.DbType.DateTime, LocaleHelper.FromLocalTime(this.EntryDate));
                        database.AddInParameter(updateCommand, "@StoreId", System.Data.DbType.Int32, this.StoreId);
                        database.AddInParameter(updateCommand, "@MessageSeverityId", System.Data.DbType.Byte, this.MessageSeverityId);
                        database.AddInParameter(updateCommand, "@Text", System.Data.DbType.String, this.Text);
                        database.AddInParameter(updateCommand, "@DebugData", System.Data.DbType.String, NullableData.DbNullify(this.DebugData));
                        //RESULT IS NUMBER OF RECORDS AFFECTED
                        result = database.ExecuteNonQuery(updateCommand);
                    }
                }
                else
                {
                    //INSERT
                    StringBuilder insertQuery = new StringBuilder();
                    insertQuery.Append("INSERT INTO ac_ErrorMessages (EntryDate, StoreId, MessageSeverityId, Text, DebugData)");
                    insertQuery.Append(" VALUES (@EntryDate, @StoreId, @MessageSeverityId, @Text, @DebugData)");
                    insertQuery.Append("; SELECT Scope_Identity()");
                    using (DbCommand insertCommand = database.GetSqlStringCommand(insertQuery.ToString()))
                    {
                        database.AddInParameter(insertCommand, "@ErrorMessageId", System.Data.DbType.Int32, this.ErrorMessageId);
                        database.AddInParameter(insertCommand, "@EntryDate", System.Data.DbType.DateTime, LocaleHelper.FromLocalTime(this.EntryDate));
                        database.AddInParameter(insertCommand, "@StoreId", System.Data.DbType.Int32, this.StoreId);
                        database.AddInParameter(insertCommand, "@MessageSeverityId", System.Data.DbType.Byte, this.MessageSeverityId);
                        database.AddInParameter(insertCommand, "@Text", System.Data.DbType.String, this.Text);
                        database.AddInParameter(insertCommand, "@DebugData", System.Data.DbType.String, NullableData.DbNullify(this.DebugData));
                        //RESULT IS NEW IDENTITY;
                        result = AlwaysConvert.ToInt(database.ExecuteScalar(insertCommand));
                        this._ErrorMessageId = result;
                    }
                }

                //OBJECT IS DIRTY IF NO RECORDS WERE UPDATED OR INSERTED
                this.IsDirty = (result == 0);
                if (this.IsDirty)
                {
                    return(SaveResult.Failed);
                }
                else
                {
                    return(recordExists ? SaveResult.RecordUpdated : SaveResult.RecordInserted);
                }
            }

            //SAVE IS SUCCESSFUL IF OBJECT IS NOT DIRTY
            return(SaveResult.NotDirty);
        }
Esempio n. 5
0
 /// <summary>
 /// Parses the given input value and converts it to a byte. Default return value is 0.
 /// </summary>
 /// <param name="parseValue">The input value to parse</param>
 /// <returns>The converted byte value</returns>
 public static byte ToByte(object parseValue)
 {
     return(AlwaysConvert.ToByte(parseValue, 0));
 }