forked from yvasiyarov/php_session_decoder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommon.go
189 lines (148 loc) · 3.82 KB
/
common.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package php_serialize
const (
TOKEN_NULL rune = 'N'
TOKEN_BOOL rune = 'b'
TOKEN_INT rune = 'i'
TOKEN_FLOAT rune = 'd'
TOKEN_STRING rune = 's'
TOKEN_ARRAY rune = 'a'
TOKEN_OBJECT rune = 'O'
TOKEN_OBJECT_SERIALIZED rune = 'C'
TOKEN_REFERENCE rune = 'R'
TOKEN_REFERENCE_OBJECT rune = 'r'
TOKEN_SPL_ARRAY rune = 'x'
TOKEN_SPL_ARRAY_MEMBERS rune = 'm'
SEPARATOR_VALUE_TYPE rune = ':'
SEPARATOR_VALUES rune = ';'
DELIMITER_STRING_LEFT rune = '"'
DELIMITER_STRING_RIGHT rune = '"'
DELIMITER_OBJECT_LEFT rune = '{'
DELIMITER_OBJECT_RIGHT rune = '}'
FORMATTER_FLOAT byte = 'g'
FORMATTER_PRECISION int = 17
)
var (
debugMode = false
)
func Debug(value bool) {
debugMode = value
}
func NewPhpObject(className string) *PhpObject {
return &PhpObject{
className: className,
members: PhpArray{},
}
}
type SerializedDecodeFunc func(string) (PhpValue, error)
type SerializedEncodeFunc func(PhpValue) (string, error)
type PhpValue interface{}
type PhpArray map[PhpValue]PhpValue
type PhpSlice []PhpValue
type PhpObject struct {
className string
members PhpArray
}
func (self *PhpObject) GetClassName() string {
return self.className
}
func (self *PhpObject) SetClassName(name string) *PhpObject {
self.className = name
return self
}
func (self *PhpObject) GetMembers() PhpArray {
return self.members
}
func (self *PhpObject) SetMembers(members PhpArray) *PhpObject {
self.members = members
return self
}
func (self *PhpObject) GetPrivate(name string) (v PhpValue, ok bool) {
v, ok = self.members["\x00"+self.className+"\x00"+name]
return
}
func (self *PhpObject) SetPrivate(name string, value PhpValue) *PhpObject {
self.members["\x00"+self.className+"\x00"+name] = value
return self
}
func (self *PhpObject) GetProtected(name string) (v PhpValue, ok bool) {
v, ok = self.members["\x00*\x00"+name]
return
}
func (self *PhpObject) SetProtected(name string, value PhpValue) *PhpObject {
self.members["\x00*\x00"+name] = value
return self
}
func (self *PhpObject) GetPublic(name string) (v PhpValue, ok bool) {
v, ok = self.members[name]
return
}
func (self *PhpObject) SetPublic(name string, value PhpValue) *PhpObject {
self.members[name] = value
return self
}
func NewPhpObjectSerialized(className string) *PhpObjectSerialized {
return &PhpObjectSerialized{
className: className,
}
}
type PhpObjectSerialized struct {
className string
data string
value PhpValue
}
func (self *PhpObjectSerialized) GetClassName() string {
return self.className
}
func (self *PhpObjectSerialized) SetClassName(name string) *PhpObjectSerialized {
self.className = name
return self
}
func (self *PhpObjectSerialized) GetData() string {
return self.data
}
func (self *PhpObjectSerialized) SetData(data string) *PhpObjectSerialized {
self.data = data
return self
}
func (self *PhpObjectSerialized) GetValue() PhpValue {
return self.value
}
func (self *PhpObjectSerialized) SetValue(value PhpValue) *PhpObjectSerialized {
self.value = value
return self
}
func NewPhpSplArray(array, properties PhpValue) *PhpSplArray {
if array == nil {
array = make(PhpArray)
}
if properties == nil {
properties = make(PhpArray)
}
return &PhpSplArray{
array: array,
properties: properties,
}
}
type PhpSplArray struct {
flags int
array PhpValue
properties PhpValue
}
func (self *PhpSplArray) GetFlags() int {
return self.flags
}
func (self *PhpSplArray) SetFlags(value int) {
self.flags = value
}
func (self *PhpSplArray) GetArray() PhpValue {
return self.array
}
func (self *PhpSplArray) SetArray(value PhpValue) {
self.array = value
}
func (self *PhpSplArray) GetProperties() PhpValue {
return self.properties
}
func (self *PhpSplArray) SetProperties(value PhpValue) {
self.properties = value
}