mirror of
https://github.com/1Password/onepassword-operator.git
synced 2025-10-22 07:28:06 +00:00
98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
package sdk
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/1Password/onepassword-operator/pkg/onepassword/model"
|
|
sdk "github.com/1password/onepassword-sdk-go"
|
|
)
|
|
|
|
// Config holds the configuration for the 1Password SDK client.
|
|
type Config struct {
|
|
ServiceAccountToken string
|
|
IntegrationName string
|
|
IntegrationVersion string
|
|
}
|
|
|
|
// SDK is a client for interacting with 1Password using the SDK.
|
|
type SDK struct {
|
|
client *sdk.Client
|
|
}
|
|
|
|
func NewClient(ctx context.Context, config Config) (*SDK, error) {
|
|
client, err := sdk.NewClient(ctx,
|
|
sdk.WithServiceAccountToken(config.ServiceAccountToken),
|
|
sdk.WithIntegrationInfo(config.IntegrationName, config.IntegrationVersion),
|
|
)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("1Password sdk error: %w", err)
|
|
}
|
|
|
|
return &SDK{
|
|
client: client,
|
|
}, nil
|
|
}
|
|
|
|
func (s *SDK) GetItemByID(ctx context.Context, vaultID, itemID string) (*model.Item, error) {
|
|
sdkItem, err := s.client.Items().Get(ctx, vaultID, itemID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to GetItemsByTitle using 1Password SDK: %w", err)
|
|
}
|
|
|
|
var item model.Item
|
|
item.FromSDKItem(&sdkItem)
|
|
return &item, nil
|
|
}
|
|
|
|
func (s *SDK) GetItemsByTitle(ctx context.Context, vaultID, itemTitle string) ([]model.Item, error) {
|
|
// Get all items in the vault
|
|
sdkItems, err := s.client.Items().List(ctx, vaultID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to GetItemsByTitle using 1Password SDK: %w", err)
|
|
}
|
|
|
|
// Filter items by title
|
|
var items []model.Item
|
|
for _, sdkItem := range sdkItems {
|
|
if sdkItem.Title == itemTitle {
|
|
var item model.Item
|
|
item.FromSDKItemOverview(&sdkItem)
|
|
items = append(items, item)
|
|
}
|
|
}
|
|
|
|
return items, nil
|
|
}
|
|
|
|
func (s *SDK) GetFileContent(ctx context.Context, vaultID, itemID, fileID string) ([]byte, error) {
|
|
bytes, err := s.client.Items().Files().Read(ctx, vaultID, itemID, sdk.FileAttributes{
|
|
ID: fileID,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to GetFileContent using 1Password SDK: %w", err)
|
|
}
|
|
|
|
return bytes, nil
|
|
}
|
|
|
|
func (s *SDK) GetVaultsByTitle(ctx context.Context, title string) ([]model.Vault, error) {
|
|
// List all vaults
|
|
sdkVaults, err := s.client.Vaults().List(ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to GetVaultsByTitle using 1Password SDK: %w", err)
|
|
}
|
|
|
|
// Filter vaults by title
|
|
var vaults []model.Vault
|
|
for _, sdkVault := range sdkVaults {
|
|
if sdkVault.Title == title {
|
|
var vault model.Vault
|
|
vault.FromSDKVault(&sdkVault)
|
|
vaults = append(vaults, vault)
|
|
}
|
|
}
|
|
|
|
return vaults, nil
|
|
}
|