Skip to content

Commit 7363f4b

Browse files
committed
store/keychain: refactor linux keychain
Signed-off-by: Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
1 parent 38441fa commit 7363f4b

1 file changed

Lines changed: 19 additions & 15 deletions

File tree

store/keychain/keychain_linux.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ const (
1919
loginKeychainObjectPath = dbus.ObjectPath("/org/freedesktop/secrets/collection/login")
2020
)
2121

22-
func (k *keychainStore[T]) itemAttributes(id store.ID) map[string]string {
22+
// newItemAttributes configures the default attributes for each item in the keychain
23+
//
24+
// It sets the `service:group` and `service:name` attributes as well as the
25+
// secret id.
26+
func newItemAttributes[T store.Secret](id store.ID, k *keychainStore[T]) map[string]string {
2327
attributes := map[string]string{
2428
"service:group": k.serviceGroup,
2529
"service:name": k.serviceName,
@@ -38,7 +42,7 @@ func (k *keychainStore[T]) itemAttributes(id store.ID) map[string]string {
3842
// As a fallback it queries the secret service for the default collection.
3943
// It is possible that the host does not have a collection set up, in that case
4044
// the only option is to error.
41-
func (k *keychainStore[T]) getDefaultCollection(service *kc.SecretService) (dbus.ObjectPath, error) {
45+
func getDefaultCollection(service *kc.SecretService) (dbus.ObjectPath, error) {
4246
variant, err := service.ServiceObj().GetProperty("org.freedesktop.Secret.Service.Collections")
4347
if err != nil {
4448
return "", err
@@ -73,7 +77,7 @@ var errCollectionLocked = errors.New("collection is locked")
7377
//
7478
// It returns the errCollectionLocked error by default if the collection is locked.
7579
// On any other error, it returns the underlying error instead.
76-
func (k *keychainStore[T]) isCollectionLocked(service *kc.SecretService) error {
80+
func isCollectionLocked(service *kc.SecretService) error {
7781
variant, err := service.ServiceObj().GetProperty("org.freedesktop.Secret.Collection.Locked")
7882
if err != nil {
7983
return err
@@ -96,12 +100,12 @@ func (k *keychainStore[T]) Delete(ctx context.Context, id store.ID) error {
96100
}
97101
defer service.CloseSession(session)
98102

99-
objectPath, err := k.getDefaultCollection(service)
103+
objectPath, err := getDefaultCollection(service)
100104
if err != nil {
101105
return err
102106
}
103107

104-
err = k.isCollectionLocked(service)
108+
err = isCollectionLocked(service)
105109
if err != nil && !errors.Is(err, errCollectionLocked) {
106110
return err
107111
}
@@ -111,7 +115,7 @@ func (k *keychainStore[T]) Delete(ctx context.Context, id store.ID) error {
111115
}
112116
}
113117

114-
attributes := k.itemAttributes(id)
118+
attributes := newItemAttributes(id, k)
115119
items, err := service.SearchCollection(objectPath, attributes)
116120
if err != nil {
117121
return err
@@ -136,12 +140,12 @@ func (k *keychainStore[T]) Get(ctx context.Context, id store.ID) (store.Secret,
136140
}
137141
defer service.CloseSession(session)
138142

139-
objectPath, err := k.getDefaultCollection(service)
143+
objectPath, err := getDefaultCollection(service)
140144
if err != nil {
141145
return nil, err
142146
}
143147

144-
err = k.isCollectionLocked(service)
148+
err = isCollectionLocked(service)
145149
if err != nil && !errors.Is(err, errCollectionLocked) {
146150
return nil, err
147151
}
@@ -151,7 +155,7 @@ func (k *keychainStore[T]) Get(ctx context.Context, id store.ID) (store.Secret,
151155
}
152156
}
153157

154-
attributes := k.itemAttributes(id)
158+
attributes := newItemAttributes(id, k)
155159
items, err := service.SearchCollection(objectPath, attributes)
156160
if err != nil {
157161
return nil, fmt.Errorf("failed to search collection: %w", err)
@@ -186,12 +190,12 @@ func (k *keychainStore[T]) GetAll(ctx context.Context) (map[store.ID]store.Secre
186190
}
187191
defer service.CloseSession(session)
188192

189-
objectPath, err := k.getDefaultCollection(service)
193+
objectPath, err := getDefaultCollection(service)
190194
if err != nil {
191195
return nil, err
192196
}
193197

194-
err = k.isCollectionLocked(service)
198+
err = isCollectionLocked(service)
195199
if err != nil && !errors.Is(err, errCollectionLocked) {
196200
return nil, err
197201
}
@@ -201,7 +205,7 @@ func (k *keychainStore[T]) GetAll(ctx context.Context) (map[store.ID]store.Secre
201205
}
202206
}
203207

204-
attributes := k.itemAttributes(store.ID(""))
208+
attributes := newItemAttributes("", k)
205209
itemPaths, err := service.SearchCollection(objectPath, attributes)
206210
if err != nil {
207211
return nil, fmt.Errorf("failed to search collection: %w", err)
@@ -254,12 +258,12 @@ func (k *keychainStore[T]) Save(ctx context.Context, id store.ID, secret store.S
254258
}
255259
defer service.CloseSession(session)
256260

257-
objectPath, err := k.getDefaultCollection(service)
261+
objectPath, err := getDefaultCollection(service)
258262
if err != nil {
259263
return err
260264
}
261265

262-
err = k.isCollectionLocked(service)
266+
err = isCollectionLocked(service)
263267
if err != nil && !errors.Is(err, errCollectionLocked) {
264268
return err
265269
}
@@ -279,7 +283,7 @@ func (k *keychainStore[T]) Save(ctx context.Context, id store.ID, secret store.S
279283
return err
280284
}
281285

282-
attributes := k.itemAttributes(id)
286+
attributes := newItemAttributes(id, k)
283287
label := k.itemLabel(id)
284288
properties := kc.NewSecretProperties(label, attributes)
285289

0 commit comments

Comments
 (0)