Skip to content
This repository was archived by the owner on Jan 29, 2026. It is now read-only.

Commit a85b2b6

Browse files
committed
Add AuditEvent helper
1 parent 5275100 commit a85b2b6

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package dstu2
2+
3+
import (
4+
dstu2dt "github.com/google/fhir/go/proto/google/fhir/proto/dstu2/datatypes_go_proto"
5+
dstu2pb "github.com/google/fhir/go/proto/google/fhir/proto/dstu2/resources_go_proto"
6+
)
7+
8+
type WithFunc func(sub *dstu2pb.AuditEvent) error
9+
10+
// NewAuditEvent creates a new audit event. It takes
11+
// productKey and tenant as arguments as these are required
12+
// for publishing to to Host Auditing service
13+
func NewAuditEvent(productKey, tenant string, options ...WithFunc) (*dstu2pb.AuditEvent, error) {
14+
event := &dstu2pb.AuditEvent{}
15+
16+
if err := WithSourceExtensionUriValue("productKey", productKey)(event); err != nil {
17+
return nil, err
18+
}
19+
if err := WithSourceExtensionUriValue("tenant", tenant)(event); err != nil {
20+
return nil, err
21+
}
22+
for _, w := range options {
23+
if err := w(event); err != nil {
24+
return nil, err
25+
}
26+
}
27+
return event, nil
28+
}
29+
30+
// WithObject adds the passed object to the AuditEvent
31+
func WithObject(object *dstu2pb.AuditEvent_Object) WithFunc {
32+
return func(event *dstu2pb.AuditEvent) error {
33+
if event.Object == nil {
34+
event.Object = []*dstu2pb.AuditEvent_Object{}
35+
}
36+
event.Object = append(event.Object, object)
37+
return nil
38+
}
39+
}
40+
41+
// WithExtensionUriValue sets extension Uri/Value tuples, some of which are mandatory
42+
// for successfully posting to HSDP Audit
43+
func WithSourceExtensionUriValue(extensionUri, extensionValue string) WithFunc {
44+
return func(event *dstu2pb.AuditEvent) error {
45+
if event.Source == nil {
46+
event.Source = &dstu2pb.AuditEvent_Source{}
47+
}
48+
if event.Source.Extension == nil {
49+
event.Source.Extension = []*dstu2dt.Extension{}
50+
}
51+
var ext *dstu2dt.Extension
52+
// Find the extension
53+
for _, e := range event.Source.Extension {
54+
if e.Url != nil && e.Url.Value == "/fhir/device" {
55+
ext = e
56+
break
57+
}
58+
}
59+
if ext == nil {
60+
ext = &dstu2dt.Extension{
61+
Url: &dstu2dt.Uri{},
62+
}
63+
event.Source.Extension = append(event.Source.Extension, ext)
64+
}
65+
if ext.Extension == nil {
66+
ext.Extension = []*dstu2dt.Extension{}
67+
}
68+
var extensionEntry *dstu2dt.Extension
69+
for _, e := range ext.Extension {
70+
if e.Url != nil && e.Url.Value == extensionUri {
71+
extensionEntry = e
72+
break
73+
}
74+
}
75+
if extensionEntry == nil {
76+
extensionEntry = &dstu2dt.Extension{
77+
Url: &dstu2dt.Uri{
78+
Value: extensionUri,
79+
},
80+
}
81+
ext.Extension = append(ext.Extension, extensionEntry)
82+
}
83+
extensionEntry.Value = &dstu2dt.Extension_ValueX{
84+
Choice: &dstu2dt.Extension_ValueX_StringValue{
85+
StringValue: &dstu2dt.String{Value: extensionValue},
86+
},
87+
}
88+
return nil
89+
}
90+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dstu2_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/philips-software/go-hsdp-api/audit/helper/fhir/dstu2"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestNewAuditEvent(t *testing.T) {
11+
event, err := dstu2.NewAuditEvent("key", "tenant")
12+
13+
if !assert.Nil(t, err) {
14+
return
15+
}
16+
if !assert.NotNil(t, event) {
17+
return
18+
}
19+
}

0 commit comments

Comments
 (0)