mirror of
https://github.com/openziti/zrok.git
synced 2025-07-09 10:47:17 +02:00
.github
agent
bin
build
canary
cmd
controller
config
emailUi
env
limits
metrics
store
zrokEdgeSdk
access.go
accountDetail.go
addOrganizationMember.go
bootstrap.go
changePassword.go
configuration.go
controller.go
createAccount.go
createFrontend.go
createIdentity.go
createOrganization.go
deleteFrontend.go
deleteOrganization.go
disable.go
enable.go
environmentDetail.go
frontendDetail.go
gc.go
grants.go
health.go
invite.go
inviteTokenGenerate.go
listFrontends.go
listMemberships.go
listOrgMembers.go
listOrganizationMembers.go
listOrganizations.go
login.go
maintenance.go
metrics.go
orgAccountOverview.go
overview.go
passwords.go
regenerateAccountToken.go
register.go
removeOrganizationMember.go
resetPassword.go
resetPasswordEmail.go
resetPasswordRequest.go
share.go
shareDetail.go
sharePrivate.go
sharePublic.go
sparkData.go
sparklines.go
startup.go
unaccess.go
unbootstrap.go
unshare.go
updateAccess.go
updateFrontend.go
updateShare.go
util.go
verify.go
verifyEmail.go
version.go
docker
docs
drives
endpoints
environment
etc
google
nfpm
rest_client_zrok
rest_model_zrok
rest_server_zrok
sdk
specs
tui
ui
util
website
.flake8
.gitattributes
.gitignore
.goreleaser-darwin.yml
.goreleaser-linux-amd64.yml
.goreleaser-linux-arm64.yml
.goreleaser-linux-armel.yml
.goreleaser-linux-armhf.yml
.goreleaser-release.yml
.goreleaser-windows.yml
.markdownlint.yaml
ACKNOWLEDGEMENTS.md
BUILD.md
CHANGELOG.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE
README.md
RELEASING.md
SECURITY.md
go.mod
go.sum
openapitools.json
98 lines
3.1 KiB
Go
98 lines
3.1 KiB
Go
package controller
|
|
|
|
import (
|
|
"github.com/go-openapi/runtime/middleware"
|
|
"github.com/openziti/zrok/rest_model_zrok"
|
|
"github.com/openziti/zrok/rest_server_zrok/operations/share"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type updateShareHandler struct{}
|
|
|
|
func newUpdateShareHandler() *updateShareHandler {
|
|
return &updateShareHandler{}
|
|
}
|
|
|
|
func (h *updateShareHandler) Handle(params share.UpdateShareParams, principal *rest_model_zrok.Principal) middleware.Responder {
|
|
shrToken := params.Body.ShareToken
|
|
backendProxyEndpoint := params.Body.BackendProxyEndpoint
|
|
|
|
tx, err := str.Begin()
|
|
if err != nil {
|
|
logrus.Errorf("error starting transaction: %v", err)
|
|
return share.NewUpdateShareInternalServerError()
|
|
}
|
|
defer func() { _ = tx.Rollback() }()
|
|
|
|
sshr, err := str.FindShareWithToken(shrToken, tx)
|
|
if err != nil {
|
|
logrus.Errorf("share '%v' not found: %v", shrToken, err)
|
|
return share.NewUpdateShareNotFound()
|
|
}
|
|
|
|
senvs, err := str.FindEnvironmentsForAccount(int(principal.ID), tx)
|
|
if err != nil {
|
|
logrus.Errorf("error finding environments for account '%v': %v", principal.Email, err)
|
|
return share.NewUpdateShareInternalServerError()
|
|
}
|
|
|
|
envFound := false
|
|
for _, senv := range senvs {
|
|
if senv.Id == sshr.EnvironmentId {
|
|
envFound = true
|
|
break
|
|
}
|
|
}
|
|
if !envFound {
|
|
logrus.Errorf("environment not found for share '%v'", shrToken)
|
|
return share.NewUpdateShareNotFound()
|
|
}
|
|
|
|
doCommit := false
|
|
if backendProxyEndpoint != "" {
|
|
sshr.BackendProxyEndpoint = &backendProxyEndpoint
|
|
if err := str.UpdateShare(sshr, tx); err != nil {
|
|
logrus.Errorf("error updating share '%v': %v", shrToken, err)
|
|
return share.NewUpdateShareInternalServerError()
|
|
}
|
|
doCommit = true
|
|
}
|
|
|
|
for _, addr := range params.Body.AddAccessGrants {
|
|
acct, err := str.FindAccountWithEmail(addr, tx)
|
|
if err != nil {
|
|
logrus.Errorf("error looking up account by email '%v' for user '%v': %v", addr, principal.Email, err)
|
|
return share.NewUpdateShareBadRequest()
|
|
}
|
|
if _, err := str.CreateAccessGrant(sshr.Id, acct.Id, tx); err != nil {
|
|
logrus.Errorf("error adding access grant '%v' for share '%v': %v", acct.Email, shrToken, err)
|
|
return share.NewUpdateShareInternalServerError()
|
|
}
|
|
logrus.Infof("added access grant '%v' to share '%v'", acct.Email, shrToken)
|
|
doCommit = true
|
|
}
|
|
|
|
for _, addr := range params.Body.RemoveAccessGrants {
|
|
acct, err := str.FindAccountWithEmail(addr, tx)
|
|
if err != nil {
|
|
logrus.Errorf("error looking up account by email '%v' for user '%v': %v", addr, principal.Email, err)
|
|
return share.NewUpdateShareBadRequest()
|
|
}
|
|
if err := str.DeleteAccessGrantsForShareAndAccount(sshr.Id, acct.Id, tx); err != nil {
|
|
logrus.Errorf("error removing access grant '%v' for share '%v': %v", acct.Email, shrToken, err)
|
|
return share.NewUpdateShareInternalServerError()
|
|
}
|
|
logrus.Infof("removed access grant '%v' from share '%v'", acct.Email, shrToken)
|
|
doCommit = true
|
|
}
|
|
|
|
if doCommit {
|
|
if err := tx.Commit(); err != nil {
|
|
logrus.Errorf("error committing transaction for share '%v' update: %v", shrToken, err)
|
|
return share.NewUpdateShareInternalServerError()
|
|
}
|
|
}
|
|
|
|
return share.NewUpdateShareOK()
|
|
}
|