(req *restful.Request, rsp *restful.Response)
| 196 | } |
| 197 | |
| 198 | func (h *WorkspaceHandler) SearchWorkspaces(req *restful.Request, rsp *restful.Response) error { |
| 199 | |
| 200 | ctx := req.Request.Context() |
| 201 | var restRequest rest.SearchWorkspaceRequest |
| 202 | if err := req.ReadEntity(&restRequest); err != nil { |
| 203 | return err |
| 204 | } |
| 205 | |
| 206 | // Transform to standard query |
| 207 | query := &service.Query{ |
| 208 | Limit: restRequest.Limit, |
| 209 | Offset: restRequest.Offset, |
| 210 | GroupBy: restRequest.GroupBy, |
| 211 | Operation: restRequest.Operation, |
| 212 | } |
| 213 | |
| 214 | for _, q := range restRequest.Queries { |
| 215 | anyfied, _ := anypb.New(q) |
| 216 | query.SubQueries = append(query.SubQueries, anyfied) |
| 217 | } |
| 218 | |
| 219 | var er error |
| 220 | if query.ResourcePolicyQuery, er = h.RestToServiceResourcePolicy(ctx, restRequest.ResourcePolicyQuery); er != nil { |
| 221 | return errors.Tag(er, errors.StatusForbidden) |
| 222 | } |
| 223 | |
| 224 | cli := idmc.WorkspaceServiceClient(ctx) |
| 225 | |
| 226 | collection := &rest.WorkspaceCollection{} |
| 227 | var uuids []string |
| 228 | wss := make(map[string]*idm.Workspace) |
| 229 | |
| 230 | streamer, err := cli.SearchWorkspace(ctx, &idm.SearchWorkspaceRequest{ |
| 231 | Query: query, |
| 232 | }) |
| 233 | if err = commons.ForEach(streamer, err, func(resp *idm.SearchWorkspaceResponse) error { |
| 234 | resp.Workspace.PoliciesContextEditable = h.IsContextEditable(ctx, resp.Workspace.UUID, resp.Workspace.Policies) |
| 235 | uuids = append(uuids, resp.Workspace.UUID) |
| 236 | wss[resp.Workspace.UUID] = resp.Workspace |
| 237 | collection.Workspaces = append(collection.Workspaces, resp.Workspace) |
| 238 | collection.Total++ |
| 239 | return nil |
| 240 | }); err != nil { |
| 241 | return err |
| 242 | } |
| 243 | if len(collection.Workspaces) > 0 { |
| 244 | if e := permissions.LoadRootNodesForWorkspaces(ctx, uuids, wss, h.virtualPathResolver()); e != nil { |
| 245 | log.Logger(ctx).Warn("Error while calling LoadRootNodesForWorkspaces", zap.Error(e)) |
| 246 | } |
| 247 | if e := permissions.BulkReadDefaultRights(ctx, uuids, wss); e != nil { |
| 248 | log.Logger(ctx).Warn("Error while calling BulkReadDefaultRights", zap.Error(e)) |
| 249 | } |
| 250 | } |
| 251 | return rsp.WriteEntity(collection) |
| 252 | |
| 253 | } |
| 254 | |
| 255 | func (h *WorkspaceHandler) loadPoliciesForResource(ctx context.Context, resourceId string, resourceClient interface{}) (policies []*service.ResourcePolicy, e error) { |
nothing calls this directly
no test coverage detected