Helpers for parsing, marshalling and converting types to domain types.
90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package handlers
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hashicorp/boundary/internal/errors"
|
|
pbs "github.com/hashicorp/boundary/internal/gen/controller/api/services"
|
|
"github.com/hashicorp/boundary/internal/types/resource"
|
|
"github.com/mr-tron/base58"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
// ParseRefreshToken parses a refresh token from the input, returning
|
|
// an error if the parsing fails.
|
|
func ParseRefreshToken(ctx context.Context, token string) (*pbs.ListRefreshToken, error) {
|
|
const op = "handlers.ParseRefreshToken"
|
|
marshaled, err := base58.Decode(token)
|
|
if err != nil {
|
|
return nil, errors.Wrap(ctx, err, op)
|
|
}
|
|
var tok pbs.ListRefreshToken
|
|
if err := proto.Unmarshal(marshaled, &tok); err != nil {
|
|
return nil, errors.Wrap(ctx, err, op)
|
|
}
|
|
return &tok, nil
|
|
}
|
|
|
|
// MarshalRefreshToken marshals a refresh token to its string representation.
|
|
func MarshalRefreshToken(ctx context.Context, token *pbs.ListRefreshToken) (string, error) {
|
|
const op = "handlers.MarshalRefreshToken"
|
|
if token == nil {
|
|
return "", errors.New(ctx, errors.InvalidParameter, op, "token is required")
|
|
}
|
|
marshaled, err := proto.Marshal(token)
|
|
if err != nil {
|
|
return "", errors.Wrap(ctx, err, op)
|
|
}
|
|
return base58.Encode(marshaled), nil
|
|
}
|
|
|
|
// RefreshTokenResourceToResource translates a protobuf refresh token resource type
|
|
// into a useable domain layer boundary resource type.
|
|
func RefreshTokenResourceToResource(rt pbs.ResourceType) resource.Type {
|
|
switch rt {
|
|
case pbs.ResourceType_RESOURCE_TYPE_ACCOUNT:
|
|
return resource.Account
|
|
case pbs.ResourceType_RESOURCE_TYPE_AUTH_METHOD:
|
|
return resource.AuthMethod
|
|
case pbs.ResourceType_RESOURCE_TYPE_AUTH_TOKEN:
|
|
return resource.AuthToken
|
|
case pbs.ResourceType_RESOURCE_TYPE_CREDENTIAL_LIBRARY:
|
|
return resource.CredentialLibrary
|
|
case pbs.ResourceType_RESOURCE_TYPE_CREDENTIAL_STORE:
|
|
return resource.CredentialStore
|
|
case pbs.ResourceType_RESOURCE_TYPE_CREDENTIAL:
|
|
return resource.Credential
|
|
case pbs.ResourceType_RESOURCE_TYPE_GROUP:
|
|
return resource.Group
|
|
case pbs.ResourceType_RESOURCE_TYPE_HOST_CATALOG:
|
|
return resource.HostCatalog
|
|
case pbs.ResourceType_RESOURCE_TYPE_HOST_SET:
|
|
return resource.HostSet
|
|
case pbs.ResourceType_RESOURCE_TYPE_HOST:
|
|
return resource.Host
|
|
case pbs.ResourceType_RESOURCE_TYPE_MANAGED_GROUP:
|
|
return resource.ManagedGroup
|
|
case pbs.ResourceType_RESOURCE_TYPE_ROLE:
|
|
return resource.Role
|
|
case pbs.ResourceType_RESOURCE_TYPE_SCOPE:
|
|
return resource.Scope
|
|
case pbs.ResourceType_RESOURCE_TYPE_SESSION_RECORDING:
|
|
return resource.SessionRecording
|
|
case pbs.ResourceType_RESOURCE_TYPE_SESSION:
|
|
return resource.Session
|
|
case pbs.ResourceType_RESOURCE_TYPE_STORAGE_BUCKET:
|
|
return resource.StorageBucket
|
|
case pbs.ResourceType_RESOURCE_TYPE_TARGET:
|
|
return resource.Target
|
|
case pbs.ResourceType_RESOURCE_TYPE_USER:
|
|
return resource.User
|
|
case pbs.ResourceType_RESOURCE_TYPE_WORKER:
|
|
return resource.Worker
|
|
default:
|
|
return resource.Unknown
|
|
}
|
|
}
|