-
Notifications
You must be signed in to change notification settings - Fork 0
/
kv.go
117 lines (90 loc) · 2.22 KB
/
kv.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
package a5gvkpayments
import (
"net/url"
"strings"
"github.com/armor5games/a5g/a5gapi"
"github.com/pkg/errors"
)
// VKAPIKV vk payment's key values
type VKAPIKV map[string]string
var ErrVKAPIKVKeyName = errors.New("unknown vk payment's key name")
func NewVKAPIKVByURLValues(keyValues url.Values) VKAPIKV {
kv := make(VKAPIKV)
if keyValues == nil {
return kv
}
for k, v := range keyValues {
if len(v) > 0 {
kv[k] = v[0]
}
}
return kv
}
func (keyValues VKAPIKV) Validate() error {
for k := range keyValues {
switch k {
default:
return ErrVKAPIKVKeyName
case
"notification_type",
"app_id",
"user_id",
"receiver_id",
"order_id",
"sig":
// VKAPIPayment.
case "item":
// VKAPIPaymentInfo and VKAPIPaymentOrder.
case "lang":
// VKAPIPaymentInfo.
case
"date",
"item_id",
"item_photo_url",
"item_price",
"item_title",
"status":
// VKAPIPaymentOrder.
}
}
if strings.TrimSpace(keyValues["app_id"]) == "" {
return errors.New(`empty vk payment's "app_id"`)
}
if strings.TrimSpace(keyValues["notification_type"]) == "" {
return errors.New(`empty vk payment's "notification_type"`)
}
if strings.TrimSpace(keyValues["order_id"]) == "" {
return errors.New(`empty vk payment's "order_id"`)
}
if strings.TrimSpace(keyValues["receiver_id"]) == "" {
return errors.New(`empty vk payment's "receiver_id"`)
}
if strings.TrimSpace(keyValues["sig"]) == "" {
return errors.New(`empty vk payment's "sig"`)
}
if strings.TrimSpace(keyValues["user_id"]) == "" {
return errors.New(`empty vk payment's "user_id"`)
}
err := VKAPIPaymentNotificationType(keyValues["notification_type"]).Validate()
if err != nil {
return errors.WithStack(err)
}
return nil
}
func (m VKAPIKV) Item() string { return m["item"] }
func (m VKAPIKV) NotificationType() string { return m["notification_type"] }
func (m VKAPIKV) OrderID() string { return m["order_id"] }
func (m VKAPIKV) Sig() string { return m["sig"] }
func (keyValues VKAPIKV) KV() a5gapi.KV {
kv := make(a5gapi.KV)
if len(keyValues) == 0 {
return kv
}
for k, v := range keyValues {
kv[k] = v
}
return kv
}
func (keyValues VKAPIKV) KVS() a5gapi.KVS {
return a5gapi.KVS(keyValues)
}