65 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package paginator
 | |
| 
 | |
| import (
 | |
| 	log "github.com/sirupsen/logrus"
 | |
| 	"goauthentik.io/api/v3"
 | |
| )
 | |
| 
 | |
| const PageSize = 100
 | |
| 
 | |
| func FetchUsers(req api.ApiCoreUsersListRequest) []api.User {
 | |
| 	fetchUsersOffset := func(page int) (*api.PaginatedUserList, error) {
 | |
| 		users, _, err := req.Page(int32(page)).PageSize(PageSize).Execute()
 | |
| 		if err != nil {
 | |
| 			log.WithError(err).Warning("failed to update users")
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		log.WithField("page", page).WithField("count", len(users.Results)).Debug("fetched users")
 | |
| 		return users, nil
 | |
| 	}
 | |
| 	page := 1
 | |
| 	users := make([]api.User, 0)
 | |
| 	for {
 | |
| 		apiUsers, err := fetchUsersOffset(page)
 | |
| 		if err != nil {
 | |
| 			log.WithError(err).WithField("page", page).Warn("Failed to fetch user page")
 | |
| 			continue
 | |
| 		}
 | |
| 		users = append(users, apiUsers.Results...)
 | |
| 		if apiUsers.Pagination.Next > 0 {
 | |
| 			page += 1
 | |
| 		} else {
 | |
| 			break
 | |
| 		}
 | |
| 	}
 | |
| 	return users
 | |
| }
 | |
| 
 | |
| func FetchGroups(req api.ApiCoreGroupsListRequest) []api.Group {
 | |
| 	fetchGroupsOffset := func(page int) (*api.PaginatedGroupList, error) {
 | |
| 		groups, _, err := req.Page(int32(page)).PageSize(PageSize).Execute()
 | |
| 		if err != nil {
 | |
| 			log.WithError(err).Warning("failed to update groups")
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		log.WithField("page", page).WithField("count", len(groups.Results)).Debug("fetched groups")
 | |
| 		return groups, nil
 | |
| 	}
 | |
| 	page := 1
 | |
| 	groups := make([]api.Group, 0)
 | |
| 	for {
 | |
| 		apiGroups, err := fetchGroupsOffset(page)
 | |
| 		if err != nil {
 | |
| 			log.WithError(err).WithField("page", page).Warn("Failed to fetch group page")
 | |
| 			continue
 | |
| 		}
 | |
| 		groups = append(groups, apiGroups.Results...)
 | |
| 		if apiGroups.Pagination.Next > 0 {
 | |
| 			page += 1
 | |
| 		} else {
 | |
| 			break
 | |
| 		}
 | |
| 	}
 | |
| 	return groups
 | |
| }
 | 
