59 lines
2.2 KiB
Go
59 lines
2.2 KiB
Go
package team
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
|
|
"github.com/grafana/grafana/pkg/web"
|
|
)
|
|
|
|
type Service interface {
|
|
CreateTeam(ctx context.Context, name, email string, orgID int64) (Team, error)
|
|
UpdateTeam(ctx context.Context, cmd *UpdateTeamCommand) error
|
|
DeleteTeam(ctx context.Context, cmd *DeleteTeamCommand) error
|
|
SearchTeams(ctx context.Context, query *SearchTeamsQuery) (SearchTeamQueryResult, error)
|
|
GetTeamByID(ctx context.Context, query *GetTeamByIDQuery) (*TeamDTO, error)
|
|
GetTeamsByUser(ctx context.Context, query *GetTeamsByUserQuery) ([]*TeamDTO, error)
|
|
GetTeamIDsByUser(ctx context.Context, query *GetTeamIDsByUserQuery) ([]int64, error)
|
|
IsTeamMember(ctx context.Context, orgId int64, teamId int64, userId int64) (bool, error)
|
|
RemoveUsersMemberships(tx context.Context, userID int64) error
|
|
GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*TeamMemberDTO, error)
|
|
GetTeamMembers(ctx context.Context, query *GetTeamMembersQuery) ([]*TeamMemberDTO, error)
|
|
RegisterDelete(query string)
|
|
}
|
|
|
|
func UIDToIDHandler(teamService Service) func(ctx context.Context, orgID int64, resourceID string) (string, error) {
|
|
return func(ctx context.Context, orgID int64, resourceID string) (string, error) {
|
|
// if teamID is empty or is an integer, we assume it's a team id and we don't need to resolve it
|
|
_, err := strconv.ParseInt(resourceID, 10, 64)
|
|
if resourceID == "" || err == nil {
|
|
return resourceID, nil
|
|
}
|
|
team, err := teamService.GetTeamByID(ctx, &GetTeamByIDQuery{UID: resourceID, OrgID: orgID})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return strconv.FormatInt(team.ID, 10), err
|
|
}
|
|
}
|
|
|
|
func MiddlewareTeamUIDResolver(teamService Service, paramName string) web.Handler {
|
|
handler := UIDToIDHandler(teamService)
|
|
|
|
return func(c *contextmodel.ReqContext) {
|
|
// Get team id from request, fetch team and replace teamId with team id
|
|
teamID := web.Params(c.Req)[paramName]
|
|
id, err := handler(c.Req.Context(), c.OrgID, teamID)
|
|
if err == nil {
|
|
gotParams := web.Params(c.Req)
|
|
gotParams[paramName] = id
|
|
web.SetURLParams(c.Req, gotParams)
|
|
} else {
|
|
c.JsonApiErr(http.StatusNotFound, "Not found", nil)
|
|
}
|
|
}
|
|
}
|