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 }