package controller import ( "github.com/go-openapi/runtime/middleware" "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_server_zrok/operations/admin" "github.com/sirupsen/logrus" ) type updateFrontendHandler struct{} func newUpdateFrontendHandler() *updateFrontendHandler { return &updateFrontendHandler{} } func (h *updateFrontendHandler) Handle(params admin.UpdateFrontendParams, principal *rest_model_zrok.Principal) middleware.Responder { feToken := params.Body.FrontendToken publicName := params.Body.PublicName urlTemplate := params.Body.URLTemplate if !principal.Admin { logrus.Errorf("invalid admin principal") return admin.NewUpdateFrontendUnauthorized() } tx, err := str.Begin() if err != nil { logrus.Errorf("error starting transaction: %v", err) return admin.NewUpdateFrontendInternalServerError() } defer func() { _ = tx.Rollback() }() fe, err := str.FindFrontendWithToken(feToken, tx) if err != nil { logrus.Errorf("error finding frontend with token '%v': %v", feToken, err) return admin.NewUpdateFrontendNotFound() } doUpdate := false if publicName != "" { if fe.PublicName == nil || (fe.PublicName != nil && *fe.PublicName != publicName) { fe.PublicName = &publicName doUpdate = true } } if urlTemplate != "" { if fe.UrlTemplate == nil || (fe.UrlTemplate != nil && *fe.UrlTemplate != urlTemplate) { fe.UrlTemplate = &urlTemplate doUpdate = true } } if doUpdate { if err := str.UpdateFrontend(fe, tx); err != nil { logrus.Errorf("error updating frontend: %v", err) return admin.NewUpdateFrontendInternalServerError() } if err := tx.Commit(); err != nil { logrus.Errorf("error committing frontend update: %v", err) return admin.NewUpdateFrontendInternalServerError() } } return admin.NewUpdateFrontendOK() }