mirror of
https://github.com/makayabou/asg-server.git
synced 2026-05-02 17:43:36 +02:00
Added: support of hashed messages
This commit is contained in:
parent
acfe8a00a8
commit
18a8637d89
@ -42,12 +42,12 @@ Content-Type: application/json
|
||||
|
||||
[
|
||||
{
|
||||
"id": "8GHr-tUz6JBRFpTUXDV4w",
|
||||
"state": "Pending",
|
||||
"id": "Z4oS32CY5XktsYTCcMWMn",
|
||||
"state": "Delivered",
|
||||
"recipients": [
|
||||
{
|
||||
"phoneNumber": "79990001234",
|
||||
"state": "Pending"
|
||||
"phoneNumber": "79504241345",
|
||||
"state": "Delivered"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE `messages`
|
||||
ADD `is_hashed` tinyint(1) unsigned NOT NULL DEFAULT false;
|
||||
-- +goose StatementEnd
|
||||
---
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE `messages` DROP `is_hashed`;
|
||||
-- +goose StatementEnd
|
||||
@ -51,6 +51,8 @@ type Message struct {
|
||||
SimNumber *uint8 `gorm:"type:tinyint(1) unsigned"`
|
||||
WithDeliveryReport bool `gorm:"not null;type:tinyint(1) unsigned"`
|
||||
|
||||
IsHashed bool `gorm:"not null;type:tinyint(1) unsigned;default:0"`
|
||||
|
||||
Device Device `gorm:"foreignKey:DeviceID;constraint:OnDelete:CASCADE"`
|
||||
Recipients []MessageRecipient `gorm:"foreignKey:MessageID;constraint:OnDelete:CASCADE"`
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
@ -85,7 +86,7 @@ func (s *MessagesService) UpdateState(deviceID string, message smsgateway.Messag
|
||||
}
|
||||
|
||||
existing.State = models.MessageState(message.State)
|
||||
existing.Recipients = s.recipientsStateToModel(message.Recipients)
|
||||
existing.Recipients = s.recipientsStateToModel(message.Recipients, existing.IsHashed)
|
||||
|
||||
return s.Messages.UpdateState(&existing)
|
||||
}
|
||||
@ -202,12 +203,13 @@ func (s *MessagesService) recipientsToModel(input []string) []models.MessageReci
|
||||
return output
|
||||
}
|
||||
|
||||
func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientState) []models.MessageRecipient {
|
||||
func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientState, hash bool) []models.MessageRecipient {
|
||||
output := make([]models.MessageRecipient, len(input))
|
||||
|
||||
for i, v := range input {
|
||||
phoneNumber := v.PhoneNumber
|
||||
if len(phoneNumber) > 0 && phoneNumber[0] != '+' {
|
||||
// compatibility with Android app before 1.1.1
|
||||
phoneNumber = "+" + phoneNumber
|
||||
}
|
||||
|
||||
@ -215,6 +217,10 @@ func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientSta
|
||||
v.State = smsgateway.MessageStateProcessed
|
||||
}
|
||||
|
||||
if hash {
|
||||
phoneNumber = fmt.Sprintf("%x", sha256.Sum256([]byte(phoneNumber)))[:16]
|
||||
}
|
||||
|
||||
output[i] = models.MessageRecipient{
|
||||
PhoneNumber: phoneNumber,
|
||||
State: models.MessageState(v.State),
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
func TestMessagesService_recipientsStateToModel(t *testing.T) {
|
||||
type args struct {
|
||||
input []smsgateway.RecipientState
|
||||
hash bool
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
@ -56,6 +57,26 @@ func TestMessagesService_recipientsStateToModel(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "With hashing",
|
||||
s: &MessagesService{},
|
||||
args: args{
|
||||
input: []smsgateway.RecipientState{
|
||||
{
|
||||
PhoneNumber: "+79990001234",
|
||||
State: "",
|
||||
},
|
||||
},
|
||||
hash: true,
|
||||
},
|
||||
want: []models.MessageRecipient{
|
||||
{
|
||||
MessageID: 0,
|
||||
PhoneNumber: "62d17792b45c5307",
|
||||
State: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Empty phone",
|
||||
s: &MessagesService{},
|
||||
@ -78,7 +99,7 @@ func TestMessagesService_recipientsStateToModel(t *testing.T) {
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := tt.s.recipientsStateToModel(tt.args.input); !reflect.DeepEqual(got, tt.want) {
|
||||
if got := tt.s.recipientsStateToModel(tt.args.input, tt.args.hash); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("MessagesService.recipientsStateToModel() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user