func()

in auth/import_users.go [53:112]


func (c *baseClient) ImportUsers(
	ctx context.Context, users []*UserToImport, opts ...UserImportOption) (*UserImportResult, error) {

	if len(users) == 0 {
		return nil, errors.New("users list must not be empty")
	}
	if len(users) > maxImportUsers {
		return nil, fmt.Errorf("users list must not contain more than %d elements", maxImportUsers)
	}

	var validatedUsers []map[string]interface{}
	hashRequired := false
	for _, u := range users {
		vu, err := u.validatedUserInfo()
		if err != nil {
			return nil, err
		}
		if pw, ok := vu["passwordHash"]; ok && pw != "" {
			hashRequired = true
		}
		validatedUsers = append(validatedUsers, vu)
	}

	req := map[string]interface{}{
		"users": validatedUsers,
	}
	for _, opt := range opts {
		if err := opt.applyTo(req); err != nil {
			return nil, err
		}
	}
	if hashRequired {
		if algo, ok := req["hashAlgorithm"]; !ok || algo == "" {
			return nil, errors.New("hash algorithm option is required to import users with passwords")
		}
	}

	var parsed struct {
		Error []struct {
			Index   int    `json:"index"`
			Message string `json:"message"`
		} `json:"error,omitempty"`
	}
	_, err := c.post(ctx, "/accounts:batchCreate", req, &parsed)
	if err != nil {
		return nil, err
	}

	result := &UserImportResult{
		SuccessCount: len(users) - len(parsed.Error),
		FailureCount: len(parsed.Error),
	}
	for _, e := range parsed.Error {
		result.Errors = append(result.Errors, &ErrorInfo{
			Index:  int(e.Index),
			Reason: e.Message,
		})
	}
	return result, nil
}