// Copyright (c) Abstract Machines // SPDX-License-Identifier: Apache-2.0 package cli import ( "encoding/json" "fmt" smqsdk "github.com/absmach/magistrala/pkg/sdk" "github.com/spf13/cobra" ) const ( all = "all" create = "create" get = "get" update = "update" delete = "delete" enable = "enable" disable = "disable" users = "users" sendVerification = "send-verification" verifyEmail = "verify-email" usageCreate = "cli channels create " usageGet = "cli channels get " usageUpdate = "cli channels update " usageDelete = "cli channels delete " usageEnable = "cli channels enable " usageDisable = "cli channels disable " usageUsers = "cli channels users " ) func NewChannelsCmd() *cobra.Command { cmd := &cobra.Command{ Use: "channels [operation] [args...]", Short: "Channels management", Long: `Format: channels create [args...] channels [args...] Operations (require channel_id/all): get, update, delete, enable, disable, users Examples: channels create channels all get channels get channels update channels delete channels enable channels disable channels users `, Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { logUsageCmd(*cmd, cmd.Use) return } if args[0] == create { handleCreate(cmd, args[1:]) return } if len(args) < 2 { logUsageCmd(*cmd, "channels [args...]") return } channelParams := args[0] operation := args[1] opArgs := args[2:] switch operation { case get: handleGet(cmd, channelParams, opArgs) case update: handleUpdate(cmd, channelParams, opArgs) case delete: handleDelete(cmd, channelParams, opArgs) case enable: handleEnable(cmd, channelParams, opArgs) case disable: handleDisable(cmd, channelParams, opArgs) case users: handleUsers(cmd, channelParams, opArgs) default: logErrorCmd(*cmd, fmt.Errorf("unknown operation: %s", operation)) } }, } return cmd } func handleCreate(cmd *cobra.Command, args []string) { if len(args) != 3 { logUsageCmd(*cmd, usageCreate) return } var channel smqsdk.Channel if err := json.Unmarshal([]byte(args[0]), &channel); err != nil { logErrorCmd(*cmd, err) return } channel, err := sdk.CreateChannel(cmd.Context(), channel, args[1], args[2]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, channel) } func handleGet(cmd *cobra.Command, channelID string, args []string) { if len(args) != 2 { logUsageCmd(*cmd, usageGet) return } if channelID == all { metadata, err := convertMetadata(Metadata) if err != nil { logErrorCmd(*cmd, err) return } pageMetadata := smqsdk.PageMetadata{ Name: "", Offset: Offset, Limit: Limit, Metadata: metadata, } l, err := sdk.Channels(cmd.Context(), pageMetadata, args[0], args[1]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, l) return } c, err := sdk.Channel(cmd.Context(), channelID, args[0], args[1]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, c) } func handleUpdate(cmd *cobra.Command, channelID string, args []string) { if len(args) != 3 { logUsageCmd(*cmd, usageUpdate) return } var channel smqsdk.Channel if err := json.Unmarshal([]byte(args[0]), &channel); err != nil { logErrorCmd(*cmd, err) return } channel.ID = channelID channel, err := sdk.UpdateChannel(cmd.Context(), channel, args[1], args[2]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, channel) } func handleDelete(cmd *cobra.Command, channelID string, args []string) { if len(args) != 2 { logUsageCmd(*cmd, usageDelete) return } if err := sdk.DeleteChannel(cmd.Context(), channelID, args[0], args[1]); err != nil { logErrorCmd(*cmd, err) return } logOKCmd(*cmd) } func handleEnable(cmd *cobra.Command, channelID string, args []string) { if len(args) != 2 { logUsageCmd(*cmd, usageEnable) return } channel, err := sdk.EnableChannel(cmd.Context(), channelID, args[0], args[1]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, channel) } func handleDisable(cmd *cobra.Command, channelID string, args []string) { if len(args) != 2 { logUsageCmd(*cmd, usageDisable) return } channel, err := sdk.DisableChannel(cmd.Context(), channelID, args[0], args[1]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, channel) } func handleUsers(cmd *cobra.Command, channelID string, args []string) { if len(args) != 2 { logUsageCmd(*cmd, usageUsers) return } pm := smqsdk.PageMetadata{ Offset: Offset, Limit: Limit, } ul, err := sdk.ListChannelMembers(cmd.Context(), channelID, args[0], pm, args[1]) if err != nil { logErrorCmd(*cmd, err) return } logJSONCmd(*cmd, ul) }