Added: data hashing for security reasons

This commit is contained in:
Aleksandr Soloshenko 2023-12-13 00:11:04 +07:00
parent 18a8637d89
commit 571604eab2
6 changed files with 37 additions and 1 deletions

View File

@ -42,7 +42,7 @@ Content-Type: application/json
[
{
"id": "Z4oS32CY5XktsYTCcMWMn",
"id": "ZoK8jU8y74cZRnZH1xNIH",
"state": "Delivered",
"recipients": [
{

View File

@ -40,5 +40,16 @@ func Run() {
logOption.UseLogLevel(zapcore.DebugLevel)
return &logOption
}),
// fx.Invoke(
// func(lc fx.Lifecycle, logger *zap.Logger, messagesSvc *services.MessagesService) {
// lc.Append(
// fx.Hook{
// OnStart: func(ctx context.Context) error {
// return messagesSvc.HashProcessed()
// },
// },
// )
// },
// ),
).Run()
}

View File

@ -3,6 +3,9 @@
ALTER TABLE `messages`
ADD `is_hashed` tinyint(1) unsigned NOT NULL DEFAULT false;
-- +goose StatementEnd
-- +goose StatementBegin
CREATE INDEX `idx_messages_is_hashed` USING HASH ON `messages` (`is_hashed`);
-- +goose StatementEnd
---
-- +goose Down
-- +goose StatementBegin

View File

@ -66,6 +66,23 @@ func (r *MessagesRepository) UpdateState(message *models.Message) error {
})
}
func (r *MessagesRepository) HashProcessed() error {
return r.db.Transaction(func(tx *gorm.DB) error {
err := tx.Model(&models.MessageRecipient{}).
Where("message_id IN (?)", tx.Model(&models.Message{}).Select("id").Where("is_hashed = ? AND state <> ?", false, models.MessageStatePending)).
Update("phone_number", gorm.Expr("LEFT(SHA2(phone_number, 256), 16)")).
Error
if err != nil {
return err
}
return tx.Model(&models.Message{}).
Where("is_hashed = ? AND state <> ?", false, models.MessageStatePending).
Updates(map[string]interface{}{"is_hashed": true, "message": gorm.Expr("SHA2(message, 256)")}).
Error
})
}
func NewMessagesRepository(db *gorm.DB) *MessagesRepository {
return &MessagesRepository{
db: db,

View File

@ -164,6 +164,10 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag
return state, nil
}
func (s *MessagesService) HashProcessed() error {
return s.Messages.HashProcessed()
}
func (s *MessagesService) filterTimeouted(messages []models.Message) []models.Message {
result := make([]models.Message, 0, len(messages))
for _, v := range messages {

View File

@ -0,0 +1 @@
package tasks