1
1
mirror of https://github.com/openziti/zrok.git synced 2025-07-24 17:35:26 +02:00
Files
.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
zrok/controller/enable.go
2022-12-14 14:57:55 -05:00

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
}