diff options
author | Wim <wim@42.be> | 2017-11-02 17:09:34 +0100 |
---|---|---|
committer | Wim <wim@42.be> | 2017-11-02 17:09:34 +0100 |
commit | b2a6777995c55233a47212743c781a27dde8dce6 (patch) | |
tree | be4a9ef00448f82c71ae47d42835347160b70900 /vendor/github.com/matterbridge/slack/usergroups.go | |
parent | b461fc5e404c6e0df7289477171cad629cddb3e6 (diff) | |
download | matterbridge-msglm-b2a6777995c55233a47212743c781a27dde8dce6.tar.gz matterbridge-msglm-b2a6777995c55233a47212743c781a27dde8dce6.tar.bz2 matterbridge-msglm-b2a6777995c55233a47212743c781a27dde8dce6.zip |
Use matterbridge vendored slack
Diffstat (limited to 'vendor/github.com/matterbridge/slack/usergroups.go')
-rw-r--r-- | vendor/github.com/matterbridge/slack/usergroups.go | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/vendor/github.com/matterbridge/slack/usergroups.go b/vendor/github.com/matterbridge/slack/usergroups.go new file mode 100644 index 00000000..de9f9864 --- /dev/null +++ b/vendor/github.com/matterbridge/slack/usergroups.go @@ -0,0 +1,210 @@ +package slack + +import ( + "context" + "errors" + "net/url" + "strings" +) + +// UserGroup contains all the information of a user group +type UserGroup struct { + ID string `json:"id"` + TeamID string `json:"team_id"` + IsUserGroup bool `json:"is_usergroup"` + Name string `json:"name"` + Description string `json:"description"` + Handle string `json:"handle"` + IsExternal bool `json:"is_external"` + DateCreate JSONTime `json:"date_create"` + DateUpdate JSONTime `json:"date_update"` + DateDelete JSONTime `json:"date_delete"` + AutoType string `json:"auto_type"` + CreatedBy string `json:"created_by"` + UpdatedBy string `json:"updated_by"` + DeletedBy string `json:"deleted_by"` + Prefs UserGroupPrefs `json:"prefs"` + UserCount int `json:"user_count"` +} + +// UserGroupPrefs contains default channels and groups (private channels) +type UserGroupPrefs struct { + Channels []string `json:"channels"` + Groups []string `json:"groups"` +} + +type userGroupResponseFull struct { + UserGroups []UserGroup `json:"usergroups"` + UserGroup UserGroup `json:"usergroup"` + Users []string `json:"users"` + SlackResponse +} + +func userGroupRequest(ctx context.Context, path string, values url.Values, debug bool) (*userGroupResponseFull, error) { + response := &userGroupResponseFull{} + err := post(ctx, path, values, response, debug) + if err != nil { + return nil, err + } + if !response.Ok { + return nil, errors.New(response.Error) + } + return response, nil +} + +// CreateUserGroup creates a new user group +func (api *Client) CreateUserGroup(userGroup UserGroup) (UserGroup, error) { + return api.CreateUserGroupContext(context.Background(), userGroup) +} + +// CreateUserGroupContext creates a new user group with a custom context +func (api *Client) CreateUserGroupContext(ctx context.Context, userGroup UserGroup) (UserGroup, error) { + values := url.Values{ + "token": {api.config.token}, + "name": {userGroup.Name}, + } + + if userGroup.Handle != "" { + values["handle"] = []string{userGroup.Handle} + } + + if userGroup.Description != "" { + values["description"] = []string{userGroup.Description} + } + + if len(userGroup.Prefs.Channels) > 0 { + values["channels"] = []string{strings.Join(userGroup.Prefs.Channels, ",")} + } + + response, err := userGroupRequest(ctx, "usergroups.create", values, api.debug) + if err != nil { + return UserGroup{}, err + } + return response.UserGroup, nil +} + +// DisableUserGroup disables an existing user group +func (api *Client) DisableUserGroup(userGroup string) (UserGroup, error) { + return api.DisableUserGroupContext(context.Background(), userGroup) +} + +// DisableUserGroupContext disables an existing user group with a custom context +func (api *Client) DisableUserGroupContext(ctx context.Context, userGroup string) (UserGroup, error) { + values := url.Values{ + "token": {api.config.token}, + "usergroup": {userGroup}, + } + + response, err := userGroupRequest(ctx, "usergroups.disable", values, api.debug) + if err != nil { + return UserGroup{}, err + } + return response.UserGroup, nil +} + +// EnableUserGroup enables an existing user group +func (api *Client) EnableUserGroup(userGroup string) (UserGroup, error) { + return api.EnableUserGroupContext(context.Background(), userGroup) +} + +// EnableUserGroupContext enables an existing user group with a custom context +func (api *Client) EnableUserGroupContext(ctx context.Context, userGroup string) (UserGroup, error) { + values := url.Values{ + "token": {api.config.token}, + "usergroup": {userGroup}, + } + + response, err := userGroupRequest(ctx, "usergroups.enable", values, api.debug) + if err != nil { + return UserGroup{}, err + } + return response.UserGroup, nil +} + +// GetUserGroups returns a list of user groups for the team +func (api *Client) GetUserGroups() ([]UserGroup, error) { + return api.GetUserGroupsContext(context.Background()) +} + +// GetUserGroupsContext returns a list of user groups for the team with a custom context +func (api *Client) GetUserGroupsContext(ctx context.Context) ([]UserGroup, error) { + values := url.Values{ + "token": {api.config.token}, + } + + response, err := userGroupRequest(ctx, "usergroups.list", values, api.debug) + if err != nil { + return nil, err + } + return response.UserGroups, nil +} + +// UpdateUserGroup will update an existing user group +func (api *Client) UpdateUserGroup(userGroup UserGroup) (UserGroup, error) { + return api.UpdateUserGroupContext(context.Background(), userGroup) +} + +// UpdateUserGroupContext will update an existing user group with a custom context +func (api *Client) UpdateUserGroupContext(ctx context.Context, userGroup UserGroup) (UserGroup, error) { + values := url.Values{ + "token": {api.config.token}, + "usergroup": {userGroup.ID}, + } + + if userGroup.Name != "" { + values["name"] = []string{userGroup.Name} + } + + if userGroup.Handle != "" { + values["handle"] = []string{userGroup.Handle} + } + + if userGroup.Description != "" { + values["description"] = []string{userGroup.Description} + } + + response, err := userGroupRequest(ctx, "usergroups.update", values, api.debug) + if err != nil { + return UserGroup{}, err + } + return response.UserGroup, nil +} + +// GetUserGroupMembers will retrieve the current list of users in a group +func (api *Client) GetUserGroupMembers(userGroup string) ([]string, error) { + return api.GetUserGroupMembersContext(context.Background(), userGroup) +} + +// GetUserGroupMembersContext will retrieve the current list of users in a group with a custom context +func (api *Client) GetUserGroupMembersContext(ctx context.Context, userGroup string) ([]string, error) { + values := url.Values{ + "token": {api.config.token}, + "usergroup": {userGroup}, + } + + response, err := userGroupRequest(ctx, "usergroups.users.list", values, api.debug) + if err != nil { + return []string{}, err + } + return response.Users, nil +} + +// UpdateUserGroupMembers will update the members of an existing user group +func (api *Client) UpdateUserGroupMembers(userGroup string, members string) (UserGroup, error) { + return api.UpdateUserGroupMembersContext(context.Background(), userGroup, members) +} + +// UpdateUserGroupMembersContext will update the members of an existing user group with a custom context +func (api *Client) UpdateUserGroupMembersContext(ctx context.Context, userGroup string, members string) (UserGroup, error) { + values := url.Values{ + "token": {api.config.token}, + "usergroup": {userGroup}, + "users": {members}, + } + + response, err := userGroupRequest(ctx, "usergroups.users.update", values, api.debug) + if err != nil { + return UserGroup{}, err + } + return response.UserGroup, nil +} |