Compare commits

...

2 Commits

Author SHA1 Message Date
Pancakes
9efd1b751a
Update StoreSystemSaveData 2024-06-05 23:01:12 -04:00
Frederico Santos
52c5c9ee6c
Reject saves with 2 days difference (#29)
* Reject saves with 2 days difference

* improved timestamp checks

* chore: Refactor timestamp checks for saving system data

* Refactor timestamp checks for saving system data
2024-06-05 22:56:29 -04:00

View File

@ -21,6 +21,8 @@ import (
"bytes"
"encoding/gob"
"errors"
"fmt"
"time"
"github.com/pagefaultgames/rogueserver/defs"
)
@ -70,9 +72,27 @@ func ReadSystemSaveData(uuid []byte) (defs.SystemSaveData, error) {
}
func StoreSystemSaveData(uuid []byte, data defs.SystemSaveData) error {
currentTime := time.Now()
futureTime := currentTime.Add(time.Hour * 24).UnixMilli()
pastTime := currentTime.Add(-time.Hour * 24).UnixMilli()
systemData, err := ReadSystemSaveData(uuid)
if err == nil && systemData.Timestamp > data.Timestamp {
return errors.New("attempted to save an older system save")
if err == nil { // system save exists
// Check if the new data timestamp is in the past against the system save but only if the system save is not past 24 hours from now
if systemData.Timestamp > data.Timestamp && systemData.Timestamp < int(futureTime) {
// Error if the new data timestamp is older than the current system save timestamp
return fmt.Errorf("attempted to save an older system save from %d when the current system save is from %d", data.Timestamp, systemData.Timestamp)
}
}
// Check if the data.Timestamp is too far in the future
if data.Timestamp > int(futureTime) {
return fmt.Errorf("attempted to save a system save in the future from %d", data.Timestamp)
}
// Check if the data.Timestamp is too far in the past
if data.Timestamp < int(pastTime) {
return fmt.Errorf("attempted to save a system save in the past from %d", data.Timestamp)
}
var buf bytes.Buffer