|
@@ -1 +1,49 @@
|
|
|
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"`
|
|
|
+}
|