pkg/connector/helpers.go
62 linesgo
package connector

import (
	"fmt"

	v2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
	"github.com/conductorone/baton-sdk/pkg/pagination"
	"google.golang.org/grpc/codes"
	grpcstatus "google.golang.org/grpc/status"
)

func parsePageToken(token string, resourceID *v2.ResourceId) (*pagination.Bag, string, error) {
	bag := &pagination.Bag{}
	if err := bag.Unmarshal(token); err != nil {
		return nil, "", fmt.Errorf("baton-junction: failed to parse page token: %w", err)
	}

	if bag.Current() == nil {
		bag.Push(pagination.PageState{
			ResourceTypeID: resourceID.ResourceType,
			ResourceID:     resourceID.Resource,
		})
	}

	return bag, bag.PageToken(), nil
}

func mapUserStatus(status string) v2.UserTrait_Status_Status {
	switch status {
	case "active":
		return v2.UserTrait_Status_STATUS_ENABLED
	case "disabled", "inactive", "suspended":
		return v2.UserTrait_Status_STATUS_DISABLED
	case "deleted":
		return v2.UserTrait_Status_STATUS_DELETED
	default:
		return v2.UserTrait_Status_STATUS_UNSPECIFIED
	}
}

func displayName(firstName, lastName, email, id string) string {
	if firstName != "" && lastName != "" {
		return fmt.Sprintf("%s %s", firstName, lastName)
	}
	if firstName != "" {
		return firstName
	}
	if email != "" {
		return email
	}
	return id
}

// isNotFound checks whether an error returned by the SDK's uhttp.Do()
// is a gRPC NotFound status, which corresponds to an HTTP 404.
func isNotFound(err error) bool {
	if st, ok := grpcstatus.FromError(err); ok {
		return st.Code() == codes.NotFound
	}
	return false
}