diff options
Diffstat (limited to 'mattermost.go')
-rw-r--r-- | mattermost.go | 270 |
1 files changed, 268 insertions, 2 deletions
diff --git a/mattermost.go b/mattermost.go index fc9baa56d..423e00536 100644 --- a/mattermost.go +++ b/mattermost.go @@ -45,6 +45,10 @@ var flagCmdCreateTeam bool var flagCmdCreateUser bool var flagCmdInviteUser bool var flagCmdAssignRole bool +var flagCmdJoinChannel bool +var flagCmdLeaveChannel bool +var flagCmdListChannels bool +var flagCmdRestoreChannel bool var flagCmdJoinTeam bool var flagCmdVersion bool var flagCmdRunWebClientTests bool @@ -63,6 +67,7 @@ var flagLicenseFile string var flagEmail string var flagPassword string var flagTeamName string +var flagChannelName string var flagSiteURL string var flagConfirmBackup string var flagRole string @@ -198,6 +203,10 @@ func doSecurityAndDiagnostics() { v.Set(utils.PROP_DIAGNOSTIC_ACTIVE_USER_COUNT, strconv.FormatInt(ucr.Data.(int64), 10)) } + if tcr := <-api.Srv.Store.Team().AnalyticsTeamCount(); tcr.Err == nil { + v.Set(utils.PROP_DIAGNOSTIC_TEAM_COUNT, strconv.FormatInt(tcr.Data.(int64), 10)) + } + res, err := http.Get(utils.DIAGNOSTIC_URL + "/security?" + v.Encode()) if err != nil { l4g.Error(utils.T("mattermost.security_info.error")) @@ -262,6 +271,7 @@ func parseCmds() { flag.StringVar(&flagEmail, "email", "", "") flag.StringVar(&flagPassword, "password", "", "") flag.StringVar(&flagTeamName, "team_name", "", "") + flag.StringVar(&flagChannelName, "channel_name", "", "") flag.StringVar(&flagSiteURL, "site_url", "", "") flag.StringVar(&flagConfirmBackup, "confirm_backup", "", "") flag.StringVar(&flagRole, "role", "", "") @@ -271,6 +281,10 @@ func parseCmds() { flag.BoolVar(&flagCmdCreateUser, "create_user", false, "") flag.BoolVar(&flagCmdInviteUser, "invite_user", false, "") flag.BoolVar(&flagCmdAssignRole, "assign_role", false, "") + flag.BoolVar(&flagCmdJoinChannel, "join_channel", false, "") + flag.BoolVar(&flagCmdLeaveChannel, "leave_channel", false, "") + flag.BoolVar(&flagCmdListChannels, "list_channels", false, "") + flag.BoolVar(&flagCmdRestoreChannel, "restore_channel", false, "") flag.BoolVar(&flagCmdJoinTeam, "join_team", false, "") flag.BoolVar(&flagCmdVersion, "version", false, "") flag.BoolVar(&flagCmdRunWebClientTests, "run_web_client_tests", false, "") @@ -290,6 +304,10 @@ func parseCmds() { flagCmdCreateUser || flagCmdInviteUser || flagCmdAssignRole || + flagCmdJoinChannel || + flagCmdLeaveChannel || + flagCmdListChannels || + flagCmdRestoreChannel || flagCmdJoinTeam || flagCmdResetPassword || flagCmdResetMfa || @@ -311,6 +329,10 @@ func runCmds() { cmdCreateUser() cmdInviteUser() cmdAssignRole() + cmdJoinChannel() + cmdLeaveChannel() + cmdListChannels() + cmdRestoreChannel() cmdJoinTeam() cmdResetPassword() cmdResetMfa() @@ -905,10 +927,230 @@ func cmdAssignRole() { } } +func cmdJoinChannel() { + if flagCmdJoinChannel { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagEmail) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + flag.Usage() + os.Exit(1) + } + + if len(flagChannelName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -channel_name") + flag.Usage() + os.Exit(1) + } + + if !utils.IsLicensed { + fmt.Fprintln(os.Stderr, utils.T("cli.license.critical")) + flag.Usage() + os.Exit(1) + } + + var team *model.Team + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + } + + var user *model.User + if result := <-api.Srv.Store.User().GetByEmail(flagEmail); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + user = result.Data.(*model.User) + } + + var channel *model.Channel + if result := <-api.Srv.Store.Channel().GetByName(team.Id, flagChannelName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + channel = result.Data.(*model.Channel) + } + + _, err := api.AddUserToChannel(user, channel) + if err != nil { + l4g.Error("%v", err) + flushLogAndExit(1) + } + + os.Exit(0) + } +} + +func cmdLeaveChannel() { + if flagCmdLeaveChannel { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagEmail) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + flag.Usage() + os.Exit(1) + } + + if len(flagChannelName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -channel_name") + flag.Usage() + os.Exit(1) + } + + if flagChannelName == model.DEFAULT_CHANNEL { + fmt.Fprintln(os.Stderr, "flag has invalid argument: -channel_name (cannot leave town-square)") + flag.Usage() + os.Exit(1) + } + + if !utils.IsLicensed { + fmt.Fprintln(os.Stderr, utils.T("cli.license.critical")) + flag.Usage() + os.Exit(1) + } + + var team *model.Team + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + } + + var user *model.User + if result := <-api.Srv.Store.User().GetByEmail(flagEmail); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + user = result.Data.(*model.User) + } + + var channel *model.Channel + if result := <-api.Srv.Store.Channel().GetByName(team.Id, flagChannelName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + channel = result.Data.(*model.Channel) + } + + err := api.RemoveUserFromChannel(user.Id, user.Id, channel) + if err != nil { + l4g.Error("%v", err) + flushLogAndExit(1) + } + + os.Exit(0) + } +} + +func cmdListChannels() { + if flagCmdListChannels { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if !utils.IsLicensed { + fmt.Fprintln(os.Stderr, utils.T("cli.license.critical")) + flag.Usage() + os.Exit(1) + } + + var team *model.Team + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + } + + if result := <-api.Srv.Store.Channel().GetAll(team.Id); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + channels := result.Data.([]*model.Channel) + + for _, channel := range channels { + + if channel.DeleteAt > 0 { + fmt.Fprintln(os.Stdout, channel.Name+" (archived)") + } else { + fmt.Fprintln(os.Stdout, channel.Name) + } + } + } + + os.Exit(0) + } +} + +func cmdRestoreChannel() { + if flagCmdRestoreChannel { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagChannelName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -channel_name") + flag.Usage() + os.Exit(1) + } + + if !utils.IsLicensed { + fmt.Fprintln(os.Stderr, utils.T("cli.license.critical")) + flag.Usage() + os.Exit(1) + } + + var team *model.Team + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + } + + var channel *model.Channel + if result := <-api.Srv.Store.Channel().GetAll(team.Id); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + channels := result.Data.([]*model.Channel) + + for _, ctemp := range channels { + if ctemp.Name == flagChannelName { + channel = ctemp + break + } + } + } + + if result := <-api.Srv.Store.Channel().SetDeleteAt(channel.Id, 0, model.GetMillis()); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } + + os.Exit(0) + } +} + func cmdJoinTeam() { if flagCmdJoinTeam { if len(flagTeamName) == 0 { - fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") flag.Usage() os.Exit(1) } @@ -1275,7 +1517,7 @@ COMMANDS: Example: platform -invite_user -team_name="name" -email="user@example.com" -site_url="https://mattermost.example.com" - -join_team Joins a user to the team. It required the -email and + -join_team Joins a user to the team. It requires the -email and -team_name. You may need to logout of your current session for the new team to be applied. Example: @@ -1288,6 +1530,30 @@ COMMANDS: Example: platform -assign_role -email="user@example.com" -role="system_admin" + -join_channel Joins a user to the channel. It requires the -email, channel_name and + -team_name flags. You may need to logout of your current session + for the new channel to be applied. Requires an enterprise license. + Example: + platform -join_channel -email="user@example.com" -team_name="name" -channel_name="channel_name" + + -leave_channel Removes a user from the channel. It requires the -email, channel_name and + -team_name flags. You may need to logout of your current session + for the channel to be removed. Requires an enterprise license. + Example: + platform -leave_channel -email="user@example.com" -team_name="name" -channel_name="channel_name" + + -list_channels Lists all public channels and private groups for a given team. + It will append ' (archived)' to the channel name if archived. It requires the + -team_name flag. Requires an enterprise license. + Example: + platform -list_channels -team_name="name" + + -restore_channel Restores a previously deleted channel. + It requires the -channel_name and + -team_name flags. Requires an enterprise license. + Example: + platform -restore_channel -team_name="name" -channel_name="channel_name" + -reset_password Resets the password for a user. It requires the -email and -password flag. Example: |