Files
ziti/controller/internal/routes/router_api_model.go
T
Andrew Martinez b562fb5c07 splits API specs into composible modules
- splits Open API 2.0 (swagger) into client/management APIs
- uses go-swaggers flatten capabilities
- uses newer version of go-swagger (v0.27.0)
- introduces /edge/client/v1, /edge/management/v1
- non-prefixed URLs default to /edge/client/v1
- splits some shared management/client API handlers
- renames some REST models to "client" instead of "limited"
- passes all apitests, fails dataflow upd test (main fails this as well)
- updates generate rest script for powershell
- todo: test generate rest script for bash
- todo: use xweb (different branch)
2021-05-04 11:30:32 -04:00

111 lines
2.9 KiB
Go

package routes
import (
"fmt"
"github.com/go-openapi/strfmt"
"github.com/michaelquigley/pfxlog"
"github.com/openziti/edge/controller/env"
"github.com/openziti/edge/controller/model"
"github.com/openziti/edge/controller/response"
"github.com/openziti/edge/rest_model"
"github.com/openziti/fabric/controller/models"
"github.com/openziti/foundation/util/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),
}
return ret
}
func MapUpdateTransitRouterToModel(id string, router *rest_model.RouterUpdate) *model.TransitRouter {
ret := &model.TransitRouter{
BaseEntity: models.BaseEntity{
Tags: router.Tags,
Id: id,
},
Name: stringz.OrEmpty(router.Name),
}
return ret
}
func MapPatchTransitRouterToModel(id string, router *rest_model.RouterPatch) *model.TransitRouter {
ret := &model.TransitRouter{
BaseEntity: models.BaseEntity{
Tags: router.Tags,
Id: id,
},
Name: router.Name,
}
return ret
}
func MapTransitRouterToRestEntity(ae *env.AppEnv, _ *response.RequestContext, e models.Entity) (interface{}, error) {
router, ok := e.(*model.TransitRouter)
if !ok {
err := fmt.Errorf("entity is not a TransitRouter \"%s\"", e.GetId())
log := pfxlog.Logger()
log.Error(err)
return nil, err
}
restModel, err := MapTransitRouterToRestModel(ae, router)
if err != nil {
err := fmt.Errorf("could not convert to API entity \"%s\": %s", e.GetId(), err)
log := pfxlog.Logger()
log.Error(err)
return nil, err
}
return restModel, nil
}
func MapTransitRouterToRestModel(ae *env.AppEnv, router *model.TransitRouter) (*rest_model.RouterDetail, error) {
isConnected := ae.GetHandlers().Router.IsConnected(router.GetId())
ret := &rest_model.RouterDetail{
BaseEntity: BaseEntityToRestModel(router, TransitRouterLinkFactory),
Fingerprint: router.Fingerprint,
IsOnline: &isConnected,
IsVerified: &router.IsVerified,
Name: &router.Name,
}
if !router.IsBase && !router.IsVerified {
var enrollments []*model.Enrollment
err := ae.GetHandlers().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
}