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
}