/
get_object_info_by_data_id_with_password.go
90 lines (78 loc) · 2.4 KB
/
get_object_info_by_data_id_with_password.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package datastore_db
import (
"database/sql"
"time"
"github.com/PretendoNetwork/nex-go"
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
"github.com/PretendoNetwork/super-mario-maker-secure/database"
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
"github.com/lib/pq"
)
func GetObjectInfoByDataIDWithPassword(dataID uint64, password uint64) (*datastore_types.DataStoreMetaInfo, uint32) {
errCode := IsObjectAvailableWithPassword(dataID, password)
if errCode != 0 {
return nil, errCode
}
metaInfo := datastore_types.NewDataStoreMetaInfo()
metaInfo.Permission = datastore_types.NewDataStorePermission()
metaInfo.DelPermission = datastore_types.NewDataStorePermission()
metaInfo.CreatedTime = nex.NewDateTime(0)
metaInfo.UpdatedTime = nex.NewDateTime(0)
metaInfo.ReferredTime = nex.NewDateTime(0)
metaInfo.ExpireTime = nex.NewDateTime(0x9C3f3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
metaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
var createdDate time.Time
var updatedDate time.Time
err := database.Postgres.QueryRow(`SELECT
data_id,
owner,
size,
name,
data_type,
meta_binary,
permission,
permission_recipients,
delete_permission,
delete_permission_recipients,
period,
refer_data_id,
flag,
tags,
creation_date,
update_date
FROM datastore.objects WHERE data_id=$1`, dataID).Scan(
&metaInfo.DataID,
&metaInfo.OwnerID,
&metaInfo.Size,
&metaInfo.Name,
&metaInfo.DataType,
&metaInfo.MetaBinary,
&metaInfo.Permission.Permission,
pq.Array(&metaInfo.Permission.RecipientIDs),
&metaInfo.DelPermission.Permission,
pq.Array(&metaInfo.DelPermission.RecipientIDs),
&metaInfo.Period,
&metaInfo.ReferDataID,
&metaInfo.Flag,
pq.Array(&metaInfo.Tags),
&createdDate,
&updatedDate,
)
if err != nil {
if err == sql.ErrNoRows {
return nil, nex.Errors.DataStore.NotFound
}
globals.Logger.Error(err.Error())
// TODO - Send more specific errors?
return nil, nex.Errors.DataStore.Unknown
}
ratings, errCode := GetObjectRatingsWithSlotByDataIDWithPassword(metaInfo.DataID, password)
if errCode != 0 {
return nil, errCode
}
metaInfo.Ratings = ratings
metaInfo.CreatedTime.FromTimestamp(createdDate)
metaInfo.UpdatedTime.FromTimestamp(updatedDate)
metaInfo.ReferredTime.FromTimestamp(createdDate) // * This is what the real server does
return metaInfo, 0
}