-
Notifications
You must be signed in to change notification settings - Fork 1
/
hexa_policy.go
66 lines (53 loc) · 1.54 KB
/
hexa_policy.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
package hexapolicy
import (
"time"
"github.com/hexa-org/policy-mapper/hexaIdql/pkg/hexapolicy/conditions"
)
const (
SAnyUser string = "any"
SAnyAuth string = "anyAuthenticated"
SBasicAuth string = "basic"
SJwtAuth string = "jwt"
SSamlAuth string = "saml"
SCidr string = "net"
)
type Policies struct {
Policies []PolicyInfo `json:"policies"`
}
func (p *Policies) AddPolicy(info PolicyInfo) {
p.Policies = append(p.Policies, info)
}
func (p *Policies) AddPolicies(policies Policies) {
for _, v := range policies.Policies {
p.AddPolicy(v)
}
}
type PolicyInfoSaurabh struct {
Name string
}
type PolicyInfoSaurabhV2 struct {
Name string
}
type PolicyInfo struct {
Meta MetaInfo `validate:"required"`
Subject SubjectInfo `validate:"required"`
Actions []ActionInfo `validate:"required"`
Object ObjectInfo `validate:"required"`
Condition *conditions.ConditionInfo `json:",omitempty"` // Condition is optional
}
type MetaInfo struct {
Version string `validate:"required"`
SourceMeta interface{} `json:",omitempty"` // Logistical information required to map in source provider, e.g. type, identifiers
Description string `json:",omitempty"`
Created *time.Time `json:",omitempty"`
Modified *time.Time `json:",omitempty"`
}
type ActionInfo struct {
ActionUri string `validate:"required"`
}
type SubjectInfo struct {
Members []string `validate:"required"`
}
type ObjectInfo struct {
ResourceID string `json:"resource_id" validate:"required"`
}