78 lines
1.4 KiB
Go
78 lines
1.4 KiB
Go
|
package libsecret
|
||
|
|
||
|
import "github.com/godbus/dbus"
|
||
|
|
||
|
|
||
|
type Item struct {
|
||
|
conn *dbus.Conn
|
||
|
dbus dbus.BusObject
|
||
|
}
|
||
|
|
||
|
|
||
|
func NewItem(conn *dbus.Conn, path dbus.ObjectPath) *Item {
|
||
|
return &Item{
|
||
|
conn: conn,
|
||
|
dbus: conn.Object(DBUS_SERVICE_NAME, path),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
func (item Item) Path() dbus.ObjectPath {
|
||
|
return item.dbus.Path()
|
||
|
}
|
||
|
|
||
|
|
||
|
// READWRITE String Label;
|
||
|
func (item *Item) Label() (string, error) {
|
||
|
val, err := item.dbus.GetProperty("org.freedesktop.Secret.Item.Label")
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
return val.Value().(string), nil
|
||
|
}
|
||
|
|
||
|
|
||
|
// READ Boolean Locked;
|
||
|
func (item *Item) Locked() (bool, error) {
|
||
|
val, err := item.dbus.GetProperty("org.freedesktop.Secret.Item.Locked")
|
||
|
if err != nil {
|
||
|
return true, err
|
||
|
}
|
||
|
|
||
|
return val.Value().(bool), nil
|
||
|
}
|
||
|
|
||
|
|
||
|
// GetSecret (IN ObjectPath session, OUT Secret secret);
|
||
|
func (item *Item) GetSecret(session *Session) (*Secret, error) {
|
||
|
secret := Secret{}
|
||
|
|
||
|
err := item.dbus.Call("org.freedesktop.Secret.Item.GetSecret", 0, session.Path()).Store(&secret)
|
||
|
if err != nil {
|
||
|
return &Secret{}, err
|
||
|
}
|
||
|
|
||
|
return &secret, nil
|
||
|
}
|
||
|
|
||
|
|
||
|
// Delete (OUT ObjectPath Prompt);
|
||
|
func (item *Item) Delete() error {
|
||
|
var prompt dbus.ObjectPath
|
||
|
|
||
|
err := item.dbus.Call("org.freedesktop.Secret.Item.Delete", 0).Store(&prompt)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if isPrompt(prompt) {
|
||
|
prompt := NewPrompt(item.conn, prompt)
|
||
|
if _, err := prompt.Prompt(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|