zrok/controller/listOrgMembers.go
2024-12-10 14:15:27 -05:00

52 lines
1.8 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/metadata"
"github.com/sirupsen/logrus"
)
type listOrgMembersHandler struct{}
func newListOrgMembersHandler() *listOrgMembersHandler {
return &listOrgMembersHandler{}
}
func (h *listOrgMembersHandler) Handle(params metadata.ListOrgMembersParams, principal *rest_model_zrok.Principal) middleware.Responder {
trx, err := str.Begin()
if err != nil {
logrus.Errorf("error starting transaction: %v", err)
return metadata.NewListOrgMembersInternalServerError()
}
defer func() { _ = trx.Rollback() }()
org, err := str.FindOrganizationByToken(params.OrganizationToken, trx)
if err != nil {
logrus.Errorf("error finding organization by token: %v", err)
return metadata.NewListOrgMembersNotFound()
}
admin, err := str.IsAccountAdminOfOrganization(int(principal.ID), org.Id, trx)
if err != nil {
logrus.Errorf("error checking account '%v' admin: %v", principal.Email, err)
return metadata.NewListOrgMembersNotFound()
}
if !admin {
logrus.Errorf("requesting account '%v' is not admin of organization '%v'", principal.Email, org.Token)
return metadata.NewOrgAccountOverviewNotFound()
}
members, err := str.FindAccountsForOrganization(org.Id, trx)
if err != nil {
logrus.Errorf("error finding accounts for organization '%v': %v", org.Token, err)
return metadata.NewListOrgMembersInternalServerError()
}
var out []*metadata.ListOrgMembersOKBodyMembersItems0
for _, member := range members {
out = append(out, &metadata.ListOrgMembersOKBodyMembersItems0{Email: member.Email, Admin: member.Admin})
}
return metadata.NewListOrgMembersOK().WithPayload(&metadata.ListOrgMembersOKBody{Members: out})
}