123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package keychainlinker
- import (
- "fmt"
- "path"
- "github.com/godbus/dbus/v5"
- )
- type Service struct {
- /*
- Working on implementing the org.freedesktop.Secret.Service interface, from their v0.2 spec:
- https://specifications.freedesktop.org/secret-service-spec/latest-single/#org.freedesktop.Secret.Service
- */
- Collections []dbus.ObjectPath
- SessionBase string // e.g. "/org/freedesktop/secrets/session/"
- CollectionBase string // e.g. "/org/freedesktop/secrets/collection/"
- }
- /*
- Opens a session for the Secret Service Interface
- :param algorithm: the encryption algorithm to use with the client
- :param input: the data used when implementing more advanced encryption algos
- */
- func (s *Service) OpenSession(algorithm string, input dbus.Variant) (dbus.Variant, dbus.ObjectPath, *dbus.Error) {
- if algorithm != "PLAIN" {
- return dbus.Variant{}, "/", dbus.MakeFailedError(fmt.Errorf("only PLAIN is supported"))
- }
- sessionPath := dbus.ObjectPath(path.Join(s.SessionBase, "1"))
- return input, sessionPath, nil
- }
- /*
- Creates a collection with the Service object
- :param properties: a set of properties that are used by client apps
- :param alias: the shortname of the collection
- */
- func (s *Service) CreateCollection(properties map[string]dbus.Variant, alias string) (dbus.ObjectPath, dbus.ObjectPath, *dbus.Error) {
- collPath := dbus.ObjectPath(path.Join(s.CollectionBase, "login"))
- s.Collections = append(s.Collections, collPath)
- return collPath, "/", nil
- }
- /*
- search for items in the keychain that satisfy 'attrs'
- :param attrs: a map of search criteria
- */
- func (s *Service) SearchItems(attrs map[string]string) ([]dbus.ObjectPath, []dbus.ObjectPath, *dbus.Error) {
- // Just return empty results for now
- return []dbus.ObjectPath{}, []dbus.ObjectPath{}, nil
- }
- /*
- attempts to return secrets that were either already unlocked, or unlocked without a prompt, in addition to
- a prompt path that can be used to unlock all remaining locked objects
- :param objects: a slice of dbus.Objects to unlock
- */
- func (s *Service) Unlock(objects []dbus.ObjectPath) ([]dbus.ObjectPath, dbus.ObjectPath, *dbus.Error) {
- return []dbus.ObjectPath{}, dbus.ObjectPath("/"), nil // No prompt
- }
- /*
- Sets all dbus.Objects in 'objects' to the 'locked' position
- :param objects: a slice of dbus.Objects to unlock
- */
- func (s *Service) Lock(objects []dbus.ObjectPath) ([]dbus.ObjectPath, dbus.ObjectPath, *dbus.Error) {
- return []dbus.ObjectPath{}, dbus.ObjectPath("/"), nil // No prompt
- }
- /*
- retrives secrets from an array of items/collections
- :param items: a slice of dbus.ObjectPath that will have their secrets returned
- */
- func (s *Service) GetSecrets(items []dbus.ObjectPath, session dbus.ObjectPath) (map[dbus.ObjectPath]SecretStruct, *dbus.Error) {
- return map[dbus.ObjectPath]SecretStruct{}, nil
- }
- /*
- Return a collection based on the alias name
- :param name: the alias to search for
- */
- func (s *Service) ReadAlias(name string) (dbus.ObjectPath, *dbus.Error) {
- return dbus.ObjectPath(""), nil
- }
- /*
- set the alias of the passed in collection
- :param name: the alias to set the collection to
- :param collection: the collection to modify
- */
- func (s *Service) SetAlias(name string, collection dbus.ObjectPath) *dbus.Error {
- return nil
- }
|