github.com/coincircle/mattermost-server@v4.8.1-0.20180321182714-9d701c704416+incompatible/cmd/commands/team.go (about)

     1  // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package commands
     5  
     6  import (
     7  	"errors"
     8  	"fmt"
     9  
    10  	"github.com/mattermost/mattermost-server/app"
    11  	"github.com/mattermost/mattermost-server/cmd"
    12  	"github.com/mattermost/mattermost-server/model"
    13  	"github.com/spf13/cobra"
    14  )
    15  
    16  var TeamCmd = &cobra.Command{
    17  	Use:   "team",
    18  	Short: "Management of teams",
    19  }
    20  
    21  var TeamCreateCmd = &cobra.Command{
    22  	Use:   "create",
    23  	Short: "Create a team",
    24  	Long:  `Create a team.`,
    25  	Example: `  team create --name mynewteam --display_name "My New Team"
    26    team create --name private --display_name "My New Private Team" --private`,
    27  	RunE: createTeamCmdF,
    28  }
    29  
    30  var RemoveUsersCmd = &cobra.Command{
    31  	Use:     "remove [team] [users]",
    32  	Short:   "Remove users from team",
    33  	Long:    "Remove some users from team",
    34  	Example: "  team remove myteam user@example.com username",
    35  	RunE:    removeUsersCmdF,
    36  }
    37  
    38  var AddUsersCmd = &cobra.Command{
    39  	Use:     "add [team] [users]",
    40  	Short:   "Add users to team",
    41  	Long:    "Add some users to team",
    42  	Example: "  team add myteam user@example.com username",
    43  	RunE:    addUsersCmdF,
    44  }
    45  
    46  var DeleteTeamsCmd = &cobra.Command{
    47  	Use:   "delete [teams]",
    48  	Short: "Delete teams",
    49  	Long: `Permanently delete some teams.
    50  Permanently deletes a team along with all related information including posts from the database.`,
    51  	Example: "  team delete myteam",
    52  	RunE:    deleteTeamsCmdF,
    53  }
    54  
    55  func init() {
    56  	TeamCreateCmd.Flags().String("name", "", "Team Name")
    57  	TeamCreateCmd.Flags().String("display_name", "", "Team Display Name")
    58  	TeamCreateCmd.Flags().Bool("private", false, "Create a private team.")
    59  	TeamCreateCmd.Flags().String("email", "", "Administrator Email (anyone with this email is automatically a team admin)")
    60  
    61  	DeleteTeamsCmd.Flags().Bool("confirm", false, "Confirm you really want to delete the team and a DB backup has been performed.")
    62  
    63  	TeamCmd.AddCommand(
    64  		TeamCreateCmd,
    65  		RemoveUsersCmd,
    66  		AddUsersCmd,
    67  		DeleteTeamsCmd,
    68  	)
    69  	cmd.RootCmd.AddCommand(TeamCmd)
    70  }
    71  
    72  func createTeamCmdF(command *cobra.Command, args []string) error {
    73  	a, err := cmd.InitDBCommandContextCobra(command)
    74  	if err != nil {
    75  		return err
    76  	}
    77  
    78  	name, errn := command.Flags().GetString("name")
    79  	if errn != nil || name == "" {
    80  		return errors.New("Name is required")
    81  	}
    82  	displayname, errdn := command.Flags().GetString("display_name")
    83  	if errdn != nil || displayname == "" {
    84  		return errors.New("Display Name is required")
    85  	}
    86  	email, _ := command.Flags().GetString("email")
    87  	useprivate, _ := command.Flags().GetBool("private")
    88  
    89  	teamType := model.TEAM_OPEN
    90  	if useprivate {
    91  		teamType = model.TEAM_INVITE
    92  	}
    93  
    94  	team := &model.Team{
    95  		Name:        name,
    96  		DisplayName: displayname,
    97  		Email:       email,
    98  		Type:        teamType,
    99  	}
   100  
   101  	if _, err := a.CreateTeam(team); err != nil {
   102  		return errors.New("Team creation failed: " + err.Error())
   103  	}
   104  
   105  	return nil
   106  }
   107  
   108  func removeUsersCmdF(command *cobra.Command, args []string) error {
   109  	a, err := cmd.InitDBCommandContextCobra(command)
   110  	if err != nil {
   111  		return err
   112  	}
   113  
   114  	if len(args) < 2 {
   115  		return errors.New("Not enough arguments.")
   116  	}
   117  
   118  	team := getTeamFromTeamArg(a, args[0])
   119  	if team == nil {
   120  		return errors.New("Unable to find team '" + args[0] + "'")
   121  	}
   122  
   123  	users := getUsersFromUserArgs(a, args[1:])
   124  	for i, user := range users {
   125  		removeUserFromTeam(a, team, user, args[i+1])
   126  	}
   127  
   128  	return nil
   129  }
   130  
   131  func removeUserFromTeam(a *app.App, team *model.Team, user *model.User, userArg string) {
   132  	if user == nil {
   133  		cmd.CommandPrintErrorln("Can't find user '" + userArg + "'")
   134  		return
   135  	}
   136  	if err := a.LeaveTeam(team, user, ""); err != nil {
   137  		cmd.CommandPrintErrorln("Unable to remove '" + userArg + "' from " + team.Name + ". Error: " + err.Error())
   138  	}
   139  }
   140  
   141  func addUsersCmdF(command *cobra.Command, args []string) error {
   142  	a, err := cmd.InitDBCommandContextCobra(command)
   143  	if err != nil {
   144  		return err
   145  	}
   146  
   147  	if len(args) < 2 {
   148  		return errors.New("Not enough arguments.")
   149  	}
   150  
   151  	team := getTeamFromTeamArg(a, args[0])
   152  	if team == nil {
   153  		return errors.New("Unable to find team '" + args[0] + "'")
   154  	}
   155  
   156  	users := getUsersFromUserArgs(a, args[1:])
   157  	for i, user := range users {
   158  		addUserToTeam(a, team, user, args[i+1])
   159  	}
   160  
   161  	return nil
   162  }
   163  
   164  func addUserToTeam(a *app.App, team *model.Team, user *model.User, userArg string) {
   165  	if user == nil {
   166  		cmd.CommandPrintErrorln("Can't find user '" + userArg + "'")
   167  		return
   168  	}
   169  	if err := a.JoinUserToTeam(team, user, ""); err != nil {
   170  		cmd.CommandPrintErrorln("Unable to add '" + userArg + "' to " + team.Name)
   171  	}
   172  }
   173  
   174  func deleteTeamsCmdF(command *cobra.Command, args []string) error {
   175  	a, err := cmd.InitDBCommandContextCobra(command)
   176  	if err != nil {
   177  		return err
   178  	}
   179  
   180  	if len(args) < 1 {
   181  		return errors.New("Not enough arguments.")
   182  	}
   183  
   184  	confirmFlag, _ := command.Flags().GetBool("confirm")
   185  	if !confirmFlag {
   186  		var confirm string
   187  		cmd.CommandPrettyPrintln("Have you performed a database backup? (YES/NO): ")
   188  		fmt.Scanln(&confirm)
   189  
   190  		if confirm != "YES" {
   191  			return errors.New("ABORTED: You did not answer YES exactly, in all capitals.")
   192  		}
   193  		cmd.CommandPrettyPrintln("Are you sure you want to delete the teams specified?  All data will be permanently deleted? (YES/NO): ")
   194  		fmt.Scanln(&confirm)
   195  		if confirm != "YES" {
   196  			return errors.New("ABORTED: You did not answer YES exactly, in all capitals.")
   197  		}
   198  	}
   199  
   200  	teams := getTeamsFromTeamArgs(a, args)
   201  	for i, team := range teams {
   202  		if team == nil {
   203  			cmd.CommandPrintErrorln("Unable to find team '" + args[i] + "'")
   204  			continue
   205  		}
   206  		if err := deleteTeam(a, team); err != nil {
   207  			cmd.CommandPrintErrorln("Unable to delete team '" + team.Name + "' error: " + err.Error())
   208  		} else {
   209  			cmd.CommandPrettyPrintln("Deleted team '" + team.Name + "'")
   210  		}
   211  	}
   212  
   213  	return nil
   214  }
   215  
   216  func deleteTeam(a *app.App, team *model.Team) *model.AppError {
   217  	return a.PermanentDeleteTeam(team)
   218  }