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 }