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