func runAgentCmd(api *cait.ArchivesSpaceAPI, cmd *command) (string, error) { if err := api.Login(); err != nil { return "", err } //Agent Type Payload as JSON encoded objects agent := new(cait.Agent) if cmd.Payload != "" { err := json.Unmarshal([]byte(cmd.Payload), &agent) if err != nil { return "", fmt.Errorf("Could not decode cmd.Payload %s, error: %s", cmd.Payload, err) } } agentID := cait.URIToID(agent.URI) p := strings.Split(agent.URI, "/") if len(p) < 3 { return "", fmt.Errorf(`Agent commands require a uri in the JSON payload, e.g. {"uri":"/agents/people"} or {"uri":"/agents/poeple/3"}, %s`, cmd.Payload) } else if len(p) == 3 { agent.URI = "" } aType := p[2] switch cmd.Action { case "create": response, err := api.CreateAgent(aType, agent) if err != nil { return "", err } if response.Status != "Created" { return "", fmt.Errorf("Create agent status %s, %s", agent.URI, response) } src, err := json.Marshal(response) if err != nil { return "", err } return string(src), nil case "list": if agentID == 0 { agents, err := api.ListAgents(aType) if err != nil { return "", fmt.Errorf(`{"error": %q}`, err) } src, err := json.Marshal(agents) if err != nil { return "", fmt.Errorf(`{"error": "Cannot JSON encode %s %s"}`, cmd.Payload, err) } return string(src), nil } agent, err := api.GetAgent(aType, agentID) if err != nil { return "", fmt.Errorf(`{"error": %q}`, err) } src, err := json.Marshal(agent) if err != nil { return "", fmt.Errorf(`{"error": "Cannot find %s %s"}`, cmd.Payload, err) } return string(src), nil case "update": responseMsg, err := api.UpdateAgent(agent) if err != nil { return "", err } src, err := json.Marshal(responseMsg) return string(src), err case "delete": agent, err := api.GetAgent(aType, agentID) if err != nil { return "", err } responseMsg, err := api.DeleteAgent(agent) if err != nil { return "", err } src, err := json.Marshal(responseMsg) return string(src), err case "export": err := api.ExportAgents(aType) if err != nil { return "", fmt.Errorf("Exporting /agents/%s, %s", aType, err) } return `{"status": "ok"}`, nil } return "", fmt.Errorf("action %s not implemented for %s", cmd.Action, cmd.Subject) }