-
Notifications
You must be signed in to change notification settings - Fork 62
/
StorageValidator.ts
119 lines (108 loc) · 3.2 KB
/
StorageValidator.ts
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
import { Storage, StorageKey } from '@airgap/beacon-types'
export class StorageValidator {
constructor(private readonly storage: Storage) {}
private validateNumber(param: any) {
return typeof param === 'number' && !isNaN(param)
}
private validateText(param: any) {
return typeof param === 'string'
}
private validateBoolean(param: any) {
return typeof param === 'boolean'
}
private validateArray(param: any) {
return Array.isArray(param)
}
private objHasProperty(obj: any, path: string) {
if (!obj) return false // Return false if the object is null or undefined
const properties = path.split('.') // Split the path into individual properties
let current = obj
for (const property of properties) {
// If the property doesn't exist, return false
if (!current.hasOwnProperty(property)) {
return false
}
// Move to the next level in the path
current = current[property]
}
return true
}
private innerValidate(value: any, type: 'num' | 'str' | 'bol' | 'obj' | 'arr', prop?: string) {
if (!value) {
return true
}
switch (type) {
case 'num':
return this.validateNumber(value)
case 'str':
return this.validateText(value)
case 'bol':
return this.validateBoolean(value)
case 'obj':
return this.objHasProperty(value, prop!)
case 'arr':
return this.validateArray(value)
default:
return false
}
}
async validate(): Promise<boolean> {
if (!this.innerValidate(await this.storage.get(StorageKey.BEACON_SDK_VERSION), 'str')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.MATRIX_SELECTED_NODE), 'str')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.MULTI_NODE_SETUP_DONE), 'bol')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.TRANSPORT_P2P_PEERS_DAPP), 'arr')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.TRANSPORT_P2P_PEERS_WALLET), 'arr')) {
return false
}
if (
!this.innerValidate(
await this.storage.get(StorageKey.TRANSPORT_POSTMESSAGE_PEERS_DAPP),
'arr'
)
) {
return false
}
if (
!this.innerValidate(
await this.storage.get(StorageKey.TRANSPORT_POSTMESSAGE_PEERS_WALLET),
'arr'
)
) {
return false
}
if (
!this.innerValidate(
await this.storage.get(StorageKey.TRANSPORT_WALLETCONNECT_PEERS_DAPP),
'arr'
)
) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.ACCOUNTS), 'arr')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.APP_METADATA_LIST), 'arr')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.PERMISSION_LIST), 'arr')) {
return false
}
if (!this.innerValidate(await this.storage.get(StorageKey.ACTIVE_ACCOUNT), 'str')) {
return false
}
if (
!this.innerValidate(await this.storage.get(StorageKey.LAST_SELECTED_WALLET), 'obj', 'key')
) {
return false
}
return true
}
}