/// <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); }
/// <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); }
/// <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); }
/// <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)); }