-
Notifications
You must be signed in to change notification settings - Fork 0
/
validate-tags.go
87 lines (78 loc) · 2.55 KB
/
validate-tags.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
package warp
import (
"fmt"
"github.com/warp-contracts/syncer/src/utils/arweave"
"github.com/warp-contracts/syncer/src/utils/smartweave"
)
type Validator func(arweave.Base64String) error
func min(min int) Validator {
return func(v arweave.Base64String) error {
if len(v) < min {
return fmt.Errorf("tag length less than min %d ", min)
}
return nil
}
}
func max(max int) Validator {
return func(v arweave.Base64String) error {
if len(v) > max {
return fmt.Errorf("tag length greater than max %d ", max)
}
return nil
}
}
var validators = map[string][]Validator{
TagSequencer: {min(0), max(10000)},
TagSequencerOwner: {min(0), max(10000)},
TagSequencerMillis: {min(0), max(10000)},
TagSequencerSortKey: {min(0), max(10000)},
TagSequencerLastSortKey: {min(0), max(10000)},
TagSequencerTxId: {min(0), max(10000)},
TagSequencerBlockHeight: {min(0), max(10000)},
TagSequencerBlockId: {min(0), max(10000)},
TagSequencerBlockTimestamp: {min(0), max(10000)},
TagSequencerNonce: {min(0), max(10000)},
TagInitState: {min(0), max(10000)},
TagInitStateTx: {min(0), max(10000)},
TagInteractWrite: {min(0), max(10000)},
TagWasmLang: {min(0), max(10000)},
TagWasmLangVersion: {min(0), max(10000)},
TagWasmMeta: {min(0), max(10000)},
TagRequestVrf: {min(0), max(10000)},
TagSignatureType: {min(0), max(10000)},
TagWarpTestnet: {min(0), max(10000)},
TagManifest: {min(0), max(10000)},
TagNonce: {min(0), max(10000)},
smartweave.TagAppName: {min(0), max(10000)},
smartweave.TagAppVersion: {min(0), max(10000)},
smartweave.TagContractTxId: {min(0), max(10000)},
smartweave.TagInput: {min(0), max(10000)},
smartweave.TagContentType: {min(0), max(10000)},
smartweave.TagContractSrcTxId: {min(0), max(10000)},
smartweave.TagSDK: {min(0), max(10000)},
smartweave.TagMinFee: {min(0), max(10000)},
}
func ValidateTag(tag *arweave.Tag) (err error) {
tagValidators, ok := validators[string(tag.Name)]
if !ok {
// Unknown tag, skip validation
return
}
for _, validator := range tagValidators {
err = validator(tag.Value)
if err != nil {
// Doesn't validate
return
}
}
return
}
func ValidateTags(tags []arweave.Tag) (err error) {
for _, tag := range tags {
err = ValidateTag(&tag)
if err != nil {
return
}
}
return nil
}