-
Notifications
You must be signed in to change notification settings - Fork 135
/
router_api_model.go
107 lines (88 loc) · 3.21 KB
/
router_api_model.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
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
package routes
import (
"fmt"
"github.com/go-openapi/strfmt"
"github.com/openziti/edge-api/rest_model"
"github.com/openziti/ziti/controller/env"
"github.com/openziti/ziti/controller/model"
"github.com/openziti/ziti/controller/response"
"github.com/openziti/ziti/controller/models"
"github.com/openziti/foundation/v2/stringz"
)
const EntityNameTransitRouter = "transit-routers"
var TransitRouterLinkFactory = NewBasicLinkFactory(EntityNameTransitRouter)
func MapCreateRouterToModel(router *rest_model.RouterCreate) *model.TransitRouter {
ret := &model.TransitRouter{
BaseEntity: models.BaseEntity{},
Name: stringz.OrEmpty(router.Name),
Cost: uint16(Int64OrDefault(router.Cost)),
NoTraversal: BoolOrDefault(router.NoTraversal),
}
return ret
}
func MapUpdateTransitRouterToModel(id string, router *rest_model.RouterUpdate) *model.TransitRouter {
ret := &model.TransitRouter{
BaseEntity: models.BaseEntity{
Tags: TagsOrDefault(router.Tags),
Id: id,
},
Name: stringz.OrEmpty(router.Name),
Cost: uint16(Int64OrDefault(router.Cost)),
NoTraversal: BoolOrDefault(router.NoTraversal),
Disabled: BoolOrDefault(router.Disabled),
}
return ret
}
func MapPatchTransitRouterToModel(id string, router *rest_model.RouterPatch) *model.TransitRouter {
ret := &model.TransitRouter{
BaseEntity: models.BaseEntity{
Tags: TagsOrDefault(router.Tags),
Id: id,
},
Name: router.Name,
Cost: uint16(Int64OrDefault(router.Cost)),
NoTraversal: BoolOrDefault(router.NoTraversal),
Disabled: BoolOrDefault(router.Disabled),
}
return ret
}
func MapTransitRouterToRestEntity(ae *env.AppEnv, _ *response.RequestContext, router *model.TransitRouter) (interface{}, error) {
return MapTransitRouterToRestModel(ae, router)
}
func MapTransitRouterToRestModel(ae *env.AppEnv, router *model.TransitRouter) (*rest_model.RouterDetail, error) {
isConnected := ae.GetManagers().Router.IsConnected(router.GetId())
cost := int64(router.Cost)
ret := &rest_model.RouterDetail{
BaseEntity: BaseEntityToRestModel(router, TransitRouterLinkFactory),
Fingerprint: router.Fingerprint,
IsOnline: &isConnected,
IsVerified: &router.IsVerified,
Name: &router.Name,
UnverifiedFingerprint: router.UnverifiedFingerprint,
UnverifiedCertPem: router.UnverifiedCertPem,
Cost: &cost,
NoTraversal: &router.NoTraversal,
Disabled: &router.Disabled,
}
if !router.IsBase && !router.IsVerified {
var enrollments []*model.Enrollment
err := ae.GetManagers().TransitRouter.CollectEnrollments(router.Id, func(entity *model.Enrollment) error {
enrollments = append(enrollments, entity)
return nil
})
if err != nil {
return nil, err
}
if len(enrollments) != 1 {
return nil, fmt.Errorf("expected enrollment not found for unverified transit router %s", router.Id)
}
enrollment := enrollments[0]
expiresAt := strfmt.DateTime(*enrollment.ExpiresAt)
createdAt := strfmt.DateTime(*enrollment.IssuedAt)
ret.EnrollmentExpiresAt = &expiresAt
ret.EnrollmentCreatedAt = &createdAt
ret.EnrollmentJWT = &enrollment.Jwt
ret.EnrollmentToken = &enrollment.Token
}
return ret, nil
}