Files
threshold/internal/daemon/controller/handlers/refresh_token.go
T
Johan Brandhorst-Satzkorn a5b24e79b9 handlers: add refresh token helpers
Helpers for parsing, marshalling and converting types
to domain types.
2024-01-05 07:43:19 -08:00

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
}
}