12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package discourse
- import (
- "encoding/json"
- "fmt"
- "strings"
- )
- func GetGroupMembers(config APIConfig, groupName string, limit int) ([]string, error) {
- offset := 0
- members := []string{}
- for {
- url := fmt.Sprintf("%s/groups/%s/members.json?limit=%d&offset=%d", config.Endpoint, groupName, limit, offset)
- req, _ := newGetRequest(config, url)
- client := getClient(rl)
- response, _ := client.Do(req)
- var result *GroupResponse
- json.NewDecoder(response.Body).Decode(&result)
- if result.ErrorType != "" {
- return nil, fmt.Errorf("failed to get discourse group memers. Error: %s", strings.Join(result.Errors, "; "))
- }
- for _, member := range result.Members {
- members = append(members, member.Username)
- }
- if len(result.Members) < limit {
- break
- }
- offset += limit
- }
- return members, nil
- }
- type GroupResponse struct {
- Errors []string `json:"errors"`
- ErrorType string `json:"error_type"`
- Members []GroupMember `json:members"`
- }
- type GroupMember struct {
- Username string `json:"username"`
- }
|