mirror of
https://github.com/openziti/zrok.git
synced 2025-07-24 17:35:26 +02:00
.github
bin
build
cmd
controller
emailUi
store
zrokEdgeSdk
access.go
bootstrap.go
config.go
controller.go
createFrontend.go
createIdentity.go
deleteFrontend.go
disable.go
enable.go
gc.go
getService.go
invite.go
listFrontends.go
login.go
metrics.go
overview.go
register.go
share.go
sharePrivate.go
sharePublic.go
startup.go
unaccess.go
unshare.go
updateFrontend.go
updateShare.go
util.go
verify.go
verifyEmail.go
version.go
docs
endpoints
etc
model
rest_client_zrok
rest_model_zrok
rest_server_zrok
specs
ui
util
zrokdir
.gitignore
.goreleaser-darwin.yml
.goreleaser-linux.yml
.goreleaser-release.yml
.goreleaser-windows.yml
CHANGELOG.md
README.md
go.mod
go.sum
82 lines
2.5 KiB
Go
82 lines
2.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"github.com/go-openapi/runtime/middleware"
|
|
"github.com/openziti-test-kitchen/zrok/controller/store"
|
|
"github.com/openziti-test-kitchen/zrok/controller/zrokEdgeSdk"
|
|
"github.com/openziti-test-kitchen/zrok/rest_model_zrok"
|
|
"github.com/openziti-test-kitchen/zrok/rest_server_zrok/operations/environment"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type enableHandler struct {
|
|
}
|
|
|
|
func newEnableHandler() *enableHandler {
|
|
return &enableHandler{}
|
|
}
|
|
|
|
func (h *enableHandler) Handle(params environment.EnableParams, principal *rest_model_zrok.Principal) middleware.Responder {
|
|
// start transaction early; if it fails, don't bother creating ziti resources
|
|
tx, err := str.Begin()
|
|
if err != nil {
|
|
logrus.Errorf("error starting transaction: %v", err)
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
defer func() { _ = tx.Rollback() }()
|
|
|
|
client, err := edgeClient()
|
|
if err != nil {
|
|
logrus.Errorf("error getting edge client: %v", err)
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
ident, err := zrokEdgeSdk.CreateEnvironmentIdentity(principal.Email, params.Body.Description, client)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
envZId := ident.Payload.Data.ID
|
|
cfg, err := zrokEdgeSdk.EnrollIdentity(envZId, client)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
if err := zrokEdgeSdk.CreateEdgeRouterPolicy(envZId, envZId, client); err != nil {
|
|
logrus.Error(err)
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
envId, err := str.CreateEnvironment(int(principal.ID), &store.Environment{
|
|
Description: params.Body.Description,
|
|
Host: params.Body.Host,
|
|
Address: realRemoteAddress(params.HTTPRequest),
|
|
ZId: envZId,
|
|
}, tx)
|
|
if err != nil {
|
|
logrus.Errorf("error storing created identity: %v", err)
|
|
_ = tx.Rollback()
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
if err := tx.Commit(); err != nil {
|
|
logrus.Errorf("error committing: %v", err)
|
|
return environment.NewEnableInternalServerError()
|
|
}
|
|
logrus.Infof("created environment for '%v', with ziti identity '%v', and database id '%v'", principal.Email, ident.Payload.Data.ID, envId)
|
|
|
|
resp := environment.NewEnableCreated().WithPayload(&rest_model_zrok.EnableResponse{
|
|
Identity: envZId,
|
|
})
|
|
|
|
var out bytes.Buffer
|
|
enc := json.NewEncoder(&out)
|
|
enc.SetEscapeHTML(false)
|
|
err = enc.Encode(&cfg)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
resp.Payload.Cfg = out.String()
|
|
|
|
return resp
|
|
}
|