diff options
author | Christopher Speller <crspeller@gmail.com> | 2016-12-06 10:49:34 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-06 10:49:34 -0500 |
commit | 026553e4f87bfc647a5c03129752e30fc523fa07 (patch) | |
tree | d5403c760151c0fa26fc6d020f7f4326ea9d6f8a /cmd/platform/channel.go | |
parent | dcf11a14d8363c79ab62aefca46834d6daa615ab (diff) | |
download | chat-026553e4f87bfc647a5c03129752e30fc523fa07.tar.gz chat-026553e4f87bfc647a5c03129752e30fc523fa07.tar.bz2 chat-026553e4f87bfc647a5c03129752e30fc523fa07.zip |
Improving command line interface (#4689)
Diffstat (limited to 'cmd/platform/channel.go')
-rw-r--r-- | cmd/platform/channel.go | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/cmd/platform/channel.go b/cmd/platform/channel.go new file mode 100644 index 000000000..cf5ef61bc --- /dev/null +++ b/cmd/platform/channel.go @@ -0,0 +1,284 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. +package main + +import ( + "errors" + + "github.com/mattermost/platform/api" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" + "github.com/spf13/cobra" +) + +var channelCmd = &cobra.Command{ + Use: "channel", + Short: "Management of channels", +} + +var channelCreateCmd = &cobra.Command{ + Use: "create", + Short: "Create a channel", + Long: `Create a channel.`, + Example: ` channel create --team myteam --name mynewchannel --display_name "My New Channel" + channel create --team myteam --name mynewprivatechannel --display_name "My New Private Channel" --private`, + RunE: createChannelCmdF, +} + +var removeChannelUsersCmd = &cobra.Command{ + Use: "remove [channel] [users]", + Short: "Remove users from channel", + Long: "Remove some users from channel", + Example: " channel remove mychannel user@example.com username", + RunE: removeChannelUsersCmdF, +} + +var addChannelUsersCmd = &cobra.Command{ + Use: "add [channel] [users]", + Short: "Add users to channel", + Long: "Add some users to channel", + Example: " channel add mychannel user@example.com username", + RunE: addChannelUsersCmdF, +} + +var deleteChannelsCmd = &cobra.Command{ + Use: "delete [channels]", + Short: "Delete channels", + Long: `Permanently delete some channels. +Permanently deletes a channel along with all related information including posts from the database. +Channels can be specified by [team]:[channel]. ie. myteam:mychannel or by channel ID.`, + Example: " channel delete myteam:mychannel", + RunE: deleteChannelsCmdF, +} + +var listChannelsCmd = &cobra.Command{ + Use: "list [teams]", + Short: "List all channels on specified teams.", + Long: `List all channels on specified teams. +Archived channels are appended with ' (archived)'.`, + Example: " channel list myteam", + RunE: listChannelsCmdF, +} + +var restoreChannelsCmd = &cobra.Command{ + Use: "restore [channels]", + Short: "Restore some channels", + Long: `Restore a previously deleted channel +Channels can be specified by [team]:[channel]. ie. myteam:mychannel or by channel ID.`, + Example: " channel restore myteam:mychannel", + RunE: restoreChannelsCmdF, +} + +func init() { + channelCreateCmd.Flags().String("name", "", "Channel Name") + channelCreateCmd.Flags().String("display_name", "", "Channel Display Name") + channelCreateCmd.Flags().String("team", "", "Team name or ID") + channelCreateCmd.Flags().String("header", "", "Channel header") + channelCreateCmd.Flags().String("purpose", "", "Channel purpose") + channelCreateCmd.Flags().Bool("private", false, "Create a private channel.") + + channelCmd.AddCommand( + channelCreateCmd, + removeChannelUsersCmd, + addChannelUsersCmd, + deleteChannelsCmd, + listChannelsCmd, + restoreChannelsCmd, + ) +} + +func createChannelCmdF(cmd *cobra.Command, args []string) error { + initDBCommandContextCobra(cmd) + + if !utils.IsLicensed { + return errors.New(utils.T("cli.license.critical")) + } + + name, errn := cmd.Flags().GetString("name") + if errn != nil || name == "" { + return errors.New("Name is required") + } + displayname, errdn := cmd.Flags().GetString("display_name") + if errdn != nil || displayname == "" { + return errors.New("Display Name is required") + } + teamArg, errteam := cmd.Flags().GetString("team") + if errteam != nil || teamArg == "" { + return errors.New("Team is required") + } + header, _ := cmd.Flags().GetString("header") + purpose, _ := cmd.Flags().GetString("purpose") + useprivate, _ := cmd.Flags().GetBool("private") + + channelType := model.CHANNEL_OPEN + if useprivate { + channelType = model.CHANNEL_PRIVATE + } + + team := getTeamFromTeamArg(teamArg) + + channel := &model.Channel{ + TeamId: team.Id, + Name: name, + DisplayName: displayname, + Header: header, + Purpose: purpose, + Type: channelType, + } + + c := getMockContext() + if _, err := api.CreateChannel(c, channel, false); err != nil { + return err + } + + return nil +} + +func removeChannelUsersCmdF(cmd *cobra.Command, args []string) error { + initDBCommandContextCobra(cmd) + + if !utils.IsLicensed { + return errors.New(utils.T("cli.license.critical")) + } + + if len(args) < 2 { + return errors.New("Not enough arguments.") + } + + channel := getChannelFromChannelArg(args[0]) + if channel == nil { + return errors.New("Unable to find channel '" + args[0] + "'") + } + + users := getUsersFromUserArgs(args[1:]) + for i, user := range users { + removeUserFromChannel(channel, user, args[i+1]) + } + + return nil +} + +func removeUserFromChannel(channel *model.Channel, user *model.User, userArg string) { + if user == nil { + CommandPrintErrorln("Can't find user '" + userArg + "'") + return + } + if err := api.RemoveUserFromChannel(user.Id, "", channel); err != nil { + CommandPrintErrorln("Unable to remove '" + userArg + "' from " + channel.Name + ". Error: " + err.Error()) + } +} + +func addChannelUsersCmdF(cmd *cobra.Command, args []string) error { + initDBCommandContextCobra(cmd) + + if !utils.IsLicensed { + return errors.New(utils.T("cli.license.critical")) + } + + if len(args) < 2 { + return errors.New("Not enough arguments.") + } + + channel := getChannelFromChannelArg(args[0]) + if channel == nil { + return errors.New("Unable to find channel '" + args[0] + "'") + } + + users := getUsersFromUserArgs(args[1:]) + for i, user := range users { + addUserToChannel(channel, user, args[i+1]) + } + + return nil +} + +func addUserToChannel(channel *model.Channel, user *model.User, userArg string) { + if user == nil { + CommandPrintErrorln("Can't find user '" + userArg + "'") + return + } + if _, err := api.AddUserToChannel(user, channel); err != nil { + CommandPrintErrorln("Unable to add '" + userArg + "' from " + channel.Name + ". Error: " + err.Error()) + } +} + +func deleteChannelsCmdF(cmd *cobra.Command, args []string) error { + initDBCommandContextCobra(cmd) + + if len(args) < 1 { + return errors.New("Enter at least one channel to delete.") + } + + channels := getChannelsFromChannelArgs(args) + for i, channel := range channels { + if channel == nil { + CommandPrintErrorln("Unable to find channel '" + args[i] + "'") + continue + } + if result := <-api.Srv.Store.Channel().Delete(channel.Id, model.GetMillis()); result.Err != nil { + CommandPrintErrorln("Unable to delete channel '" + channel.Name + "' error: " + result.Err.Error()) + } + } + + return nil +} + +func listChannelsCmdF(cmd *cobra.Command, args []string) error { + initDBCommandContextCobra(cmd) + + if !utils.IsLicensed { + return errors.New(utils.T("cli.license.critical")) + } + + if len(args) < 1 { + return errors.New("Enter at least one team.") + } + + teams := getTeamsFromTeamArgs(args) + for i, team := range teams { + if team == nil { + CommandPrintErrorln("Unable to find team '" + args[i] + "'") + continue + } + if result := <-api.Srv.Store.Channel().GetAll(team.Id); result.Err != nil { + CommandPrintErrorln("Unable to list channels for '" + args[i] + "'") + } else { + channels := result.Data.([]*model.Channel) + + for _, channel := range channels { + if channel.DeleteAt > 0 { + CommandPrettyPrintln(channel.Name + " (archived)") + } else { + CommandPrettyPrintln(channel.Name) + } + } + } + } + + return nil +} + +func restoreChannelsCmdF(cmd *cobra.Command, args []string) error { + initDBCommandContextCobra(cmd) + + if !utils.IsLicensed { + return errors.New(utils.T("cli.license.critical")) + } + + if len(args) < 1 { + return errors.New("Enter at least one channel.") + } + + channels := getChannelsFromChannelArgs(args) + for i, channel := range channels { + if channel == nil { + CommandPrintErrorln("Unable to find channel '" + args[i] + "'") + continue + } + if result := <-api.Srv.Store.Channel().SetDeleteAt(channel.Id, 0, model.GetMillis()); result.Err != nil { + CommandPrintErrorln("Unable to restore channel '" + args[i] + "'") + } + } + + return nil +} |