Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions internal/onepassword/model/item.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ const (
CharacterSetDigits CharacterSet = "DIGITS"
CharacterSetSymbols CharacterSet = "SYMBOLS"

Login ItemCategory = "LOGIN"
Password ItemCategory = "PASSWORD"
SecureNote ItemCategory = "SECURE_NOTE"
Document ItemCategory = "DOCUMENT"
SSHKey ItemCategory = "SSH_KEY"
Database ItemCategory = "DATABASE"
Login ItemCategory = "LOGIN"
Password ItemCategory = "PASSWORD"
SecureNote ItemCategory = "SECURE_NOTE"
Document ItemCategory = "DOCUMENT"
SSHKey ItemCategory = "SSH_KEY"
Database ItemCategory = "DATABASE"
APICredential ItemCategory = "API_CREDENTIAL"

FieldPurposeUsername ItemFieldPurpose = "USERNAME"
FieldPurposePassword ItemFieldPurpose = "PASSWORD"
Expand Down Expand Up @@ -427,7 +428,7 @@ func fromConnectFields(fields []*connect.ItemField, sectionMap map[string]ItemSe
// Provider handles dates in `YYYY-MM-DD` format.
// Connect returns dates as timestamp
// Converting timestamp to `YYYY-MM-DD` string.
if f.Type == connect.FieldTypeDate {
if f.Type == connect.FieldTypeDate && field.Value != "" {
dateStr, err := util.SecondsToYYYYMMDD(field.Value)
if err != nil {
return modelFields, fmt.Errorf("fromConnectFields: failed to parse timestamp %s to 'YYYY-MM-DD' string format: %w", field.Value, err)
Expand Down Expand Up @@ -510,7 +511,7 @@ func toConnectFields(fields []ItemField) ([]*connect.ItemField, error) {
Purpose: connect.ItemFieldPurpose(f.Purpose),
}

if field.Type == connect.FieldTypeDate {
if field.Type == connect.FieldTypeDate && field.Value != "" {
// Convert date string to timestamp to bypass Connect's timezone-dependent parsing
// and ensure consistent storage regardless of where Connect is deployed.
timestamp, err := util.YYYYMMDDToSeconds(field.Value)
Expand Down Expand Up @@ -617,12 +618,13 @@ func fromModelCategoryToSDK(itemCategory ItemCategory) sdk.ItemCategory {
}

var sdkToModelCategoryMap = map[sdk.ItemCategory]ItemCategory{
sdk.ItemCategoryLogin: Login,
sdk.ItemCategoryPassword: Password,
sdk.ItemCategorySecureNote: SecureNote,
sdk.ItemCategoryDocument: Document,
sdk.ItemCategorySSHKey: SSHKey,
sdk.ItemCategoryDatabase: Database,
sdk.ItemCategoryLogin: Login,
sdk.ItemCategoryPassword: Password,
sdk.ItemCategorySecureNote: SecureNote,
sdk.ItemCategoryDocument: Document,
sdk.ItemCategorySSHKey: SSHKey,
sdk.ItemCategoryDatabase: Database,
sdk.ItemCategoryAPICredentials: APICredential,
}

func fromSDKCategoryToModel(itemCategory sdk.ItemCategory) ItemCategory {
Expand Down
6 changes: 2 additions & 4 deletions internal/provider/onepassword_item_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -387,12 +387,10 @@ func (d *OnePasswordItemDataSource) Read(ctx context.Context, req datasource.Rea
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to convert private key to OpenSSH format, got error: %s", err))
}
data.PrivateKeyOpenSSH = types.StringValue(openSSHPrivateKey)
case "credential":
data.Credential = types.StringValue(f.Value)
}
}

if f.ID == "credential" && item.Category == "API_CREDENTIAL" {
data.Credential = types.StringValue(f.Value)
}
}
}

Expand Down
12 changes: 12 additions & 0 deletions test/e2e/item_data_source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,17 @@ var testItems = map[model.ItemCategory]testItem{
"category": "ssh_key",
},
},
model.APICredential: {
Title: "Test API Credential",
UUID: "pkqk4ehxuqp4fy3wpjep5qozru",
Attrs: map[string]string{
"category": "api_credential",
"credential": "testCredential",
"username": "testAPICredential",
"hostname": "testHostname",
"type": "bearer",
},
},
}

func TestAccItemDataSource(t *testing.T) {
Expand All @@ -117,6 +128,7 @@ func TestAccItemDataSource(t *testing.T) {
{model.SecureNote, "SecureNote"},
{model.Document, "Document"},
{model.SSHKey, "SSHKey"},
{model.APICredential, "APICredential"},
}

var testCases []itemDataSourceTestCase
Expand Down