// Copyright (c) Mainflux // SPDX-License-Identifier: Apache-2.0 package cli import ( "encoding/json" mfxsdk "github.com/mainflux/mainflux/pkg/sdk/go" "github.com/spf13/cobra" ) const all = "all" var cmdChannels = []cobra.Command{ { Use: "create ", Short: "Create channel", Long: `Creates new channel and generates it's UUID`, Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } var channel mfxsdk.Channel if err := json.Unmarshal([]byte(args[0]), &channel); err != nil { logError(err) return } channel, err := sdk.CreateChannel(channel, args[1]) if err != nil { logError(err) return } logJSON(channel) }, }, { Use: "get [all | ] ", Short: "Get channel", Long: `Get all channels or get channel by id. Channels can be filtered by name or metadata. all - lists all channels - shows thing with provided `, Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } metadata, err := convertMetadata(Metadata) if err != nil { logError(err) return } pageMetadata := mfxsdk.PageMetadata{ Name: "", Offset: Offset, Limit: Limit, Metadata: metadata, } if args[0] == all { l, err := sdk.Channels(pageMetadata, args[1]) if err != nil { logError(err) return } logJSON(l) return } c, err := sdk.Channel(args[0], args[1]) if err != nil { logError(err) return } logJSON(c) }, }, { Use: "update ", Short: "Update channel", Long: `Updates channel record`, Run: func(cmd *cobra.Command, args []string) { if len(args) != 3 { logUsage(cmd.Use) return } var channel mfxsdk.Channel if err := json.Unmarshal([]byte(args[1]), &channel); err != nil { logError(err) return } channel.ID = args[0] channel, err := sdk.UpdateChannel(channel, args[2]) if err != nil { logError(err) return } logJSON(channel) }, }, { Use: "connections ", Short: "Connections list", Long: `List of Things connected to a Channel`, Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } pm := mfxsdk.PageMetadata{ Offset: Offset, Limit: Limit, } cl, err := sdk.ThingsByChannel(args[0], pm, args[1]) if err != nil { logError(err) return } logJSON(cl) }, }, { Use: "enable ", Short: "Change channel status to enabled", Long: `Change channel status to enabled`, Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } channel, err := sdk.EnableChannel(args[0], args[1]) if err != nil { logError(err) return } logJSON(channel) }, }, { Use: "disable ", Short: "Change channel status to disabled", Long: `Change channel status to disabled`, Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } channel, err := sdk.DisableChannel(args[0], args[1]) if err != nil { logError(err) return } logJSON(channel) }, }, { Use: "assign user ", Short: "Assign user", Long: "Assign user to a channel\n" + "Usage:\n" + "\tmainflux-cli channels assign user '[\"\", \"\"]' $USERTOKEN\n", Run: func(cmd *cobra.Command, args []string) { if len(args) != 5 { logUsage(cmd.Use) return } var userIDs []string if err := json.Unmarshal([]byte(args[1]), &userIDs); err != nil { logError(err) return } if err := sdk.AddUserToChannel(args[2], mfxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3]); err != nil { logError(err) return } logOK() }, }, { Use: "unassign user ", Short: "Unassign user", Long: "Unassign user from a channel\n" + "Usage:\n" + "\tmainflux-cli channels unassign user '[\"\", \"\"]' $USERTOKEN\n", Run: func(cmd *cobra.Command, args []string) { if len(args) != 5 { logUsage(cmd.Use) return } var userIDs []string if err := json.Unmarshal([]byte(args[1]), &userIDs); err != nil { logError(err) return } if err := sdk.RemoveUserFromChannel(args[2], mfxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3]); err != nil { logError(err) return } logOK() }, }, { Use: "assign group ", Short: "Assign group", Long: "Assign group to a channel\n" + "Usage:\n" + "\tmainflux-cli channels assign group '[\"\", \"\"]' $USERTOKEN\n", Run: func(cmd *cobra.Command, args []string) { if len(args) != 5 { logUsage(cmd.Use) return } var groupIDs []string if err := json.Unmarshal([]byte(args[0]), &groupIDs); err != nil { logError(err) return } if err := sdk.AddUserGroupToChannel(args[1], mfxsdk.UserGroupsRequest{UserGroupIDs: groupIDs}, args[2]); err != nil { logError(err) return } logOK() }, }, { Use: "unassign group ", Short: "Unassign group", Long: "Unassign group from a channel\n" + "Usage:\n" + "\tmainflux-cli channels unassign group '[\"\", \"\"]' $USERTOKEN\n", Run: func(cmd *cobra.Command, args []string) { if len(args) != 5 { logUsage(cmd.Use) return } var groupIDs []string if err := json.Unmarshal([]byte(args[0]), &groupIDs); err != nil { logError(err) return } if err := sdk.RemoveUserGroupFromChannel(args[1], mfxsdk.UserGroupsRequest{UserGroupIDs: groupIDs}, args[2]); err != nil { logError(err) return } logOK() }, }, { Use: "users ", Short: "List users", Long: "List users of a channel\n" + "Usage:\n" + "\tmainflux-cli channels users $USERTOKEN\n", Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } pm := mfxsdk.PageMetadata{ Offset: Offset, Limit: Limit, } ul, err := sdk.ListChannelUsers(args[0], pm, args[1]) if err != nil { logError(err) return } logJSON(ul) }, }, { Use: "groups ", Short: "List groups", Long: "List groups of a channel\n" + "Usage:\n" + "\tmainflux-cli channels groups $USERTOKEN\n", Run: func(cmd *cobra.Command, args []string) { if len(args) != 2 { logUsage(cmd.Use) return } pm := mfxsdk.PageMetadata{ Offset: Offset, Limit: Limit, } ul, err := sdk.ListChannelUserGroups(args[0], pm, args[1]) if err != nil { logError(err) return } logJSON(ul) }, }, } // NewChannelsCmd returns channels command. func NewChannelsCmd() *cobra.Command { cmd := cobra.Command{ Use: "channels [create | get | update | delete | connections | not-connected | assign | unassign | users | groups]", Short: "Channels management", Long: `Channels management: create, get, update or delete Channel and get list of Things connected or not connected to a Channel`, } for i := range cmdChannels { cmd.AddCommand(&cmdChannels[i]) } return &cmd }