gokwallet/types.go

142 lines
4.0 KiB
Go

package gokwallet
import (
"github.com/godbus/dbus/v5"
"r00t2.io/goutils/types"
)
/*
MultiError is a type of error.Error that can contain multiple error.Errors. Confused? Don't worry about it.
*/
type MultiError struct {
// Errors is a slice of errors to combine/concatenate when .Error() is called.
Errors []error `json:"errors"`
// ErrorSep is a string to use to separate errors for .Error(). The default is "\n".
ErrorSep string `json:"separator"`
}
// ConnPathCheckResult contains the result of validConnPath.
type ConnPathCheckResult struct {
// ConnOK is true if the dbus.Conn is valid.
ConnOK bool `json:"conn"`
// PathOK is true if the Dbus path given is a valid type and value.
PathOK bool `json:"path"`
}
// DbusObject is a base struct type to be anonymized by other types.
type DbusObject struct {
// Conn is an active connection to the Dbus.
Conn *dbus.Conn `json:"-"`
// Dbus is the Dbus bus object.
Dbus dbus.BusObject `json:"-"`
}
/*
WalletManager is a general KWallet interface, sort of a handler for Dbus.
It's used for fetching Wallet objects.
*/
type WalletManager struct {
*DbusObject
/*
AppID is the application ID.
The default is DefaultAppID.
*/
AppID string `json:"app_id"`
/*
Wallets is the collection of Wallets accessible in/to this WalletManager.
Wallet.Name is the map key.
*/
Wallets map[string]*Wallet `json:"wallets"`
}
// Wallet contains one or more (or none) Folder objects.
type Wallet struct {
*DbusObject
// Name is the name of this Wallet.
Name string `json:"name"`
/*
Folders contains all Folder objects in this Wallet.
Folder.Name is the map key.
*/
Folders map[string]*Folder `json:"folders"`
}
// Folder contains secret object collections of Password, Map, Blob, and UnknownItem objects.
type Folder struct {
*DbusObject
// Name is the name of this Folder.
Name string `json:"name"`
/*
Passwords contains a map of all Password objects in this Folder.
Password.Name is the map key.
*/
Passwords map[string]*Password `json:"passwords"`
/*
Maps contains a map of all Map objects in this Folder.
Map.Name is the map key.
*/
Maps map[string]*Map `json:"maps"`
/*
BinaryData contains a map if all Blob objects in this Folder.
Blob.Name is the map key.
*/
BinaryData map[string]*Blob `json:"binary_data"`
/*
Unknown contains a map of all UnknownItem objects in this Folder.
Unknown.Name is the map key.
*/
Unknown map[string]*UnknownItem `json:"unknown"`
}
// Password is a straightforward single-value secret of text.
type Password struct {
*DbusObject
// Name is the name of this Password.
Name string `json:"name"`
// Value is this Password's value.
Value string `json:"value"`
}
// Map is a dictionary or key/value secret.
type Map struct {
*DbusObject
// Name is the name of this Map.
Name string `json:"name"`
// Value is this Map's value.
Value map[string]string `json:"value"`
}
// Blob (binary large object, typographically BLOB) is secret binary data.
type Blob struct {
*DbusObject
// Name is the name of this Blob.
Name string `json:"name"`
// Value is this Blob's value.
Value []byte `json:"value"`
}
/*
UnknownItem is a secret item of unknown classification, so there isn't exactly a good way of determining a type for UnknownItem.Value.
As such, its dbus.ObjectPath is used.
TODO: There may be a method to fetch the raw bytes of the object (such as one would use with Blob) in the future.
*/
type UnknownItem struct {
*DbusObject
// Name is the name of this UnknownItem.
Name string `json:"name"`
// Value is the Dbus path of this UnknownItem.
Value dbus.ObjectPath `json:"value"`
}
// WalletItem is an interface to manage wallet objects: Password, Map, Blob, or UnknownItem.
type WalletItem interface {
isWalletItem() (isWalletItem bool)
}
/*
RecurseOptsFlag is used to determine whether or not to recurse into items and fully populate them.
One would use a types.BitMask as a parameter type and do <BitMask>.HasFlag(<RecurseOptsFlag>).
See consts.go for the actual flags.
*/
type RecurseOptsFlag types.MaskBit