Codebase list golang-github-nlopes-slack / 5f046818-5e83-4f73-a88b-e31de9bbd4e3/main usergroups.go
5f046818-5e83-4f73-a88b-e31de9bbd4e3/main

Tree @5f046818-5e83-4f73-a88b-e31de9bbd4e3/main (Download .tar.gz)

usergroups.go @5f046818-5e83-4f73-a88b-e31de9bbd4e3/main

a99cd7c
 
 
 
 
b5173bb
a99cd7c
 
b5173bb
a99cd7c
a0b3c4e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
939eb8b
a0b3c4e
 
 
 
 
 
a99cd7c
 
 
7fad0ab
 
0a4c49c
a99cd7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5173bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a99cd7c
7fad0ab
 
a99cd7c
 
b5173bb
a99cd7c
 
 
 
 
 
 
b5173bb
7fad0ab
 
 
 
a99cd7c
 
7fad0ab
 
 
a99cd7c
7fad0ab
 
 
a99cd7c
7fad0ab
 
 
a99cd7c
 
 
 
 
 
 
6821c3a
b5173bb
0a4c49c
 
 
 
 
b5173bb
0a4c49c
 
 
 
 
 
 
b5173bb
7fad0ab
 
 
683219c
7fad0ab
6821c3a
 
 
 
 
 
 
 
package slack

import (
	"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(path string, values url.Values, debug bool) (*userGroupResponseFull, error) {
	response := &userGroupResponseFull{}
	err := post(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) {
	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("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) {
	values := url.Values{
		"token":     {api.config.token},
		"usergroup": {userGroup},
	}

	response, err := userGroupRequest("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) {
	values := url.Values{
		"token":     {api.config.token},
		"usergroup": {userGroup},
	}

	response, err := userGroupRequest("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) {
	values := url.Values{
		"token": {api.config.token},
	}

	response, err := userGroupRequest("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) {
	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("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) {
	values := url.Values{
		"token":     {api.config.token},
		"usergroup": {userGroup},
	}

	response, err := userGroupRequest("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) {
	values := url.Values{
		"token":     {api.config.token},
		"usergroup": {userGroup},
		"users":     {members},
	}

	response, err := userGroupRequest("usergroups.users.update", values, api.debug)
	if err != nil {
		return UserGroup{}, err
	}
	return response.UserGroup, nil
}