-
-
Notifications
You must be signed in to change notification settings - Fork 17
/
publishResource.go
59 lines (55 loc) · 2.15 KB
/
publishResource.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
package service
import (
"context"
raCqrs "github.com/plgd-dev/cloud/resource-aggregate/cqrs"
pbCQRS "github.com/plgd-dev/cloud/resource-aggregate/pb"
pbRA "github.com/plgd-dev/cloud/resource-aggregate/pb"
kitNetGrpc "github.com/plgd-dev/kit/net/grpc"
kitHttp "github.com/plgd-dev/kit/net/http"
"github.com/plgd-dev/sdk/schema"
"github.com/plgd-dev/sdk/schema/cloud"
)
func publishResource(ctx context.Context, raClient pbRA.ResourceAggregateClient, userID string, link schema.ResourceLink, cmdMeta pbCQRS.CommandMetadata) error {
endpoints := make([]*pbRA.EndpointInformation, 0, 4)
for _, endpoint := range link.GetEndpoints() {
endpoints = append(endpoints, &pbRA.EndpointInformation{
Endpoint: endpoint.URI,
Priority: int64(endpoint.Priority),
})
}
href := trimDeviceIDFromHref(link.DeviceID, link.Href)
resourceId := raCqrs.MakeResourceId(link.DeviceID, kitHttp.CanonicalHref(href))
_, err := raClient.PublishResource(kitNetGrpc.CtxWithUserID(ctx, userID), &pbRA.PublishResourceRequest{
AuthorizationContext: &pbCQRS.AuthorizationContext{
DeviceId: link.DeviceID,
},
ResourceId: resourceId,
Resource: &pbRA.Resource{
Id: resourceId,
Href: href,
ResourceTypes: link.ResourceTypes,
Interfaces: link.Interfaces,
DeviceId: link.DeviceID,
InstanceId: link.InstanceID,
Anchor: link.Anchor,
Policies: &pbRA.Policies{BitFlags: int32(link.Policy.BitMask)},
Title: link.Title,
SupportedContentTypes: link.SupportedContentTypes,
EndpointInformations: endpoints,
},
CommandMetadata: &cmdMeta,
})
return err
}
func publishCloudDeviceStatus(ctx context.Context, raClient pbRA.ResourceAggregateClient, userID, deviceID string, cmdMeta pbCQRS.CommandMetadata) error {
return publishResource(ctx, raClient, userID, schema.ResourceLink{
Href: cloud.StatusHref,
ResourceTypes: cloud.StatusResourceTypes,
Interfaces: cloud.StatusInterfaces,
DeviceID: deviceID,
Policy: &schema.Policy{
BitMask: schema.Discoverable + schema.Observable,
},
Title: "Cloud device status",
}, cmdMeta)
}