Skip to content

Commit d819f7d

Browse files
committed
Remove deviceToken if it’s too long
1 parent 82bff3f commit d819f7d

File tree

6 files changed

+33
-0
lines changed

6 files changed

+33
-0
lines changed

database/bbolt.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ func (d *BboltDB) SaveDeviceTokenByKey(key, deviceToken string) (string, error)
9292
return key, nil
9393
}
9494

95+
// DeleteDeviceByKey delete device of specified key
96+
func (d *BboltDB) DeleteDeviceByKey(key string) error {
97+
err := db.Update(func(tx *bbolt.Tx) error {
98+
bucket := tx.Bucket([]byte(bucketName))
99+
return bucket.Delete([]byte(key))
100+
})
101+
return err
102+
}
103+
95104
// bboltSetup setup the bbolt database
96105
func bboltSetup(dataDir string) {
97106
dbOnce.Do(func() {

database/database.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ type Database interface {
55
CountAll() (int, error) //Get db records count
66
DeviceTokenByKey(key string) (string, error) //Get specified device's token
77
SaveDeviceTokenByKey(key, token string) (string, error) //Create or update specified devices's token
8+
DeleteDeviceByKey(key string) error //Delete specified device
89
Close() error //Close the database
910
}

database/envbase.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ func (d *EnvBase) SaveDeviceTokenByKey(key, token string) (string, error) {
3030
return "nil", fmt.Errorf("device token is invalid")
3131
}
3232

33+
func (d *EnvBase) DeleteDeviceByKey(key string) error {
34+
return fmt.Errorf("not supported")
35+
}
36+
3337
func (d *EnvBase) Close() error {
3438
return nil
3539
}

database/membase.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ func (d *MemBase) SaveDeviceTokenByKey(key, token string) (string, error) {
3737
return key, nil
3838
}
3939

40+
func (d *MemBase) DeleteDeviceByKey(key string) error {
41+
if key != "" && key != cacheKey {
42+
return fmt.Errorf("key not found")
43+
}
44+
cacheDeviceToken = ""
45+
return nil
46+
}
47+
4048
func (d *MemBase) Close() error {
4149
return nil
4250
}

database/mysql.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ func (d *MySQL) SaveDeviceTokenByKey(key, token string) (string, error) {
7373
return key, nil
7474
}
7575

76+
func (d *MySQL) DeleteDeviceByKey(key string) error {
77+
_, err := mysqlDB.Exec("DELETE FROM `devices` WHERE `key`=?", key)
78+
return err
79+
}
80+
7681
func (d *MySQL) Close() error {
7782
return mysqlDB.Close()
7883
}

route_push.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,12 @@ func push(params map[string]interface{}) (int, error) {
260260
if err != nil {
261261
return 400, fmt.Errorf("failed to get device token: %v", err)
262262
}
263+
264+
// Remove deviceToken if it’s too long, to clean up junk data.
265+
if len(deviceToken) > 128 {
266+
_ = db.DeleteDeviceByKey(msg.DeviceKey)
267+
}
268+
263269
msg.DeviceToken = deviceToken
264270

265271
code, err := apns.Push(&msg)

0 commit comments

Comments
 (0)