@@ -7,34 +7,86 @@ import (
77)
88
99const (
10- tailnetCreated = "ionscale.tailnet.created"
11- tailnetDeleted = "ionscale.tailnet.deleted"
12- nodeCreated = "ionscale.node.created"
10+ tailnetCreated = "ionscale.tailnet.create"
11+ tailnetIamUpdated = "ionscale.tailnet.iam.update"
12+ tailnetAclUpdated = "ionscale.tailnet.acl.update"
13+ tailnetDNSConfigUpdated = "ionscale.tailnet.dns_config.update"
14+ nodeCreated = "ionscale.node.create"
1315)
1416
15- func TailnetCreated (tailnet * domain.Tailnet , actor * domain. User ) cloudevents.Event {
16- data := & EventData {
17+ func TailnetCreated (tailnet * domain.Tailnet , actor ActorOpts ) cloudevents.Event {
18+ data := & EventData [ any ] {
1719 Tailnet : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
1820 Target : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
19- Actor : system ,
21+ Actor : actor () ,
2022 }
2123
22- if actor != nil {
23- data .Actor = Actor {ID : idToStr (actor .ID ), Name : actor .Name }
24+ event := cloudevents .NewEvent ()
25+ event .SetType (tailnetCreated )
26+ _ = event .SetData (cloudevents .ApplicationJSON , data )
27+
28+ return event
29+ }
30+
31+ func TailnetIAMUpdated (tailnet * domain.Tailnet , old * domain.IAMPolicy , actor ActorOpts ) cloudevents.Event {
32+ data := & EventData [* domain.IAMPolicy ]{
33+ Tailnet : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
34+ Target : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
35+ Actor : actor (),
36+ Attr : & Attr [* domain.IAMPolicy ]{
37+ New : & tailnet .IAMPolicy ,
38+ Old : old ,
39+ },
2440 }
2541
2642 event := cloudevents .NewEvent ()
27- event .SetType (tailnetCreated )
43+ event .SetType (tailnetIamUpdated )
44+ _ = event .SetData (cloudevents .ApplicationJSON , data )
45+
46+ return event
47+ }
48+
49+ func TailnetACLUpdated (tailnet * domain.Tailnet , old * domain.ACLPolicy , actor ActorOpts ) cloudevents.Event {
50+ data := & EventData [* domain.ACLPolicy ]{
51+ Tailnet : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
52+ Target : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
53+ Actor : actor (),
54+ Attr : & Attr [* domain.ACLPolicy ]{
55+ New : & tailnet .ACLPolicy ,
56+ Old : old ,
57+ },
58+ }
59+
60+ event := cloudevents .NewEvent ()
61+ event .SetType (tailnetAclUpdated )
2862 _ = event .SetData (cloudevents .ApplicationJSON , data )
2963
3064 return event
3165}
3266
33- func MachineCreated (machine * domain.Machine , actor * domain.User ) cloudevents.Event {
34- data := & EventData {
67+ func TailnetDNSConfigUpdated (tailnet * domain.Tailnet , old * domain.DNSConfig , actor ActorOpts ) cloudevents.Event {
68+ data := & EventData [* domain.DNSConfig ]{
69+ Tailnet : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
70+ Target : & Target {ID : idToStr (tailnet .ID ), Name : tailnet .Name },
71+ Actor : actor (),
72+ Attr : & Attr [* domain.DNSConfig ]{
73+ New : & tailnet .DNSConfig ,
74+ Old : old ,
75+ },
76+ }
77+
78+ event := cloudevents .NewEvent ()
79+ event .SetType (tailnetDNSConfigUpdated )
80+ _ = event .SetData (cloudevents .ApplicationJSON , data )
81+
82+ return event
83+ }
84+
85+ func MachineCreated (machine * domain.Machine , actor ActorOpts ) cloudevents.Event {
86+ data := & EventData [any ]{
3587 Tailnet : & Target {ID : idToStr (machine .Tailnet .ID ), Name : machine .Tailnet .Name },
36- Target : & Target {ID : idToStr (machine .ID ), Name : machine .CompleteName (), Addresses : machine . IPs () },
37- Actor : UserToActor ( actor ),
88+ Target : & Target {ID : idToStr (machine .ID ), Name : machine .CompleteName ()},
89+ Actor : actor ( ),
3890 }
3991
4092 event := cloudevents .NewEvent ()
@@ -44,38 +96,51 @@ func MachineCreated(machine *domain.Machine, actor *domain.User) cloudevents.Eve
4496 return event
4597}
4698
47- func UserToActor (actor * domain.User ) Actor {
48- if actor == nil {
49- return system
99+ type ActorOpts func () Actor
100+
101+ func User (u * domain.User ) ActorOpts {
102+ if u == nil {
103+ return SystemAdmin ()
50104 }
51105
52- switch actor .UserType {
106+ switch u .UserType {
53107 case domain .UserTypePerson :
54- return Actor {ID : idToStr (actor .ID ), Name : actor .Name }
108+ return func () Actor {
109+ return Actor {ID : idToStr (u .ID ), Name : u .Name }
110+ }
55111 default :
56- return system
112+ return SystemAdmin ()
113+ }
114+ }
115+
116+ func SystemAdmin () ActorOpts {
117+ return func () Actor {
118+ return Actor {ID : "" , Name : "system admin" }
57119 }
58120}
59121
60- type EventData struct {
61- Tailnet * Target `json:"tailnet,omitempty"`
62- Target * Target `json:"target,omitempty"`
63- Actor Actor `json:"actor"`
122+ type EventData [T any ] struct {
123+ Tailnet * Target `json:"tailnet,omitempty"`
124+ Target * Target `json:"target,omitempty"`
125+ Attr * Attr [T ] `json:"attr,omitempty"`
126+ Actor Actor `json:"actor"`
64127}
65128
66129type Target struct {
67- ID string `json:"id"`
68- Name string `json:"name"`
69- Addresses []string `json:"addresses,omitempty"`
130+ ID string `json:"id"`
131+ Name string `json:"name"`
70132}
71133
72134type Actor struct {
73135 ID string `json:"id,omitempty"`
74136 Name string `json:"name"`
75137}
76138
139+ type Attr [T any ] struct {
140+ New T `json:"new"`
141+ Old T `json:"old,omitempty"`
142+ }
143+
77144func idToStr (id uint64 ) string {
78145 return big .NewInt (int64 (id )).Text (10 )
79146}
80-
81- var system = Actor {ID : "" , Name : "ionscale system" }
0 commit comments