github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/cmd/platform/team.go (about)

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