How to use the secretstorage.defines.SS_PREFIX function in SecretStorage

To help you get started, we’ve selected a few SecretStorage examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github n1nj4sec / pupy / pupy / packages / linux / all / secretstorage / collection.py View on Github external
def create_item(self, label, attributes, secret, replace=False,
    content_type='text/plain'):
        """Creates a new :class:`~secretstorage.item.Item` with given
        `label` (unicode string), `attributes` (dictionary) and `secret`
        (bytestring). If `replace` is :const:`True`, replaces the existing
        item with the same attributes. If `content_type` is given, also
        sets the content type of the secret (``text/plain`` by default).
        Returns the created item."""
        self.ensure_not_locked()
        if not self.session:
            self.session = open_session(self.bus)
        secret = format_secret(self.session, secret, content_type)
        attributes = dbus.Dictionary(attributes, signature='ss')
        properties = {
            SS_PREFIX+'Item.Label': label,
            SS_PREFIX+'Item.Attributes': attributes
        }
        new_item, prompt = self.collection_iface.CreateItem(properties,
            secret, replace, signature='a{sv}(oayays)b')
        return Item(self.bus, new_item, self.session)
github mitya57 / secretstorage / secretstorage / item.py View on Github external
*label* visible to user. Editing all these properties and reading the
secret is possible only when the :doc:`collection ` storing
the item is unlocked. The collection can be unlocked using collection's
:meth:`~secretstorage.collection.Collection.unlock` method."""

from typing import Dict, Optional
from jeepney.integrate.blocking import DBusConnection
from secretstorage.defines import SS_PREFIX
from secretstorage.dhcrypto import Session
from secretstorage.exceptions import LockedException, PromptDismissedException
from secretstorage.util import DBusAddressWrapper, \
 exec_prompt, open_session, format_secret, unlock_objects
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

ITEM_IFACE = SS_PREFIX + 'Item'

class Item(object):
	"""Represents a secret item."""

	def __init__(self, connection: DBusConnection,
	             item_path: str, session: Optional[Session] = None) -> None:
		self.item_path = item_path
		self._item = DBusAddressWrapper(item_path, ITEM_IFACE, connection)
		self._item.get_property('Label')
		self.session = session
		self.connection = connection

	def __eq__(self, other: "DBusConnection") -> bool:
		assert isinstance(other.item_path, str)
		return self.item_path == other.item_path
github n1nj4sec / pupy / pupy / packages / linux / all / secretstorage / util.py View on Github external
else:
        n = length * 2
    return binascii.unhexlify(hex_string.zfill(n + (n & 1)))

import dbus
import os
from secretstorage.defines import DBUS_UNKNOWN_METHOD, DBUS_NO_SUCH_OBJECT, \
 DBUS_SERVICE_UNKNOWN, DBUS_NO_REPLY, DBUS_NOT_SUPPORTED, DBUS_EXEC_FAILED, \
 SS_PATH, SS_PREFIX, ALGORITHM_DH, ALGORITHM_PLAIN
from secretstorage.dhcrypto import Session
from secretstorage.exceptions import ItemNotFoundException, \
 SecretServiceNotAvailableException
from Crypto import Cipher

BUS_NAME = 'org.freedesktop.secrets'
SERVICE_IFACE = SS_PREFIX + 'Service'

class InterfaceWrapper(dbus.Interface):
    """Wraps :cls:`dbus.Interface` class and replaces some D-Bus exceptions
    with :doc:`SecretStorage exceptions `."""

    def catch_errors(self, function_in):
        def function_out(*args, **kwargs):
            try:
                return function_in(*args, **kwargs)
            except dbus.exceptions.DBusException as e:
                if e.get_dbus_name() == DBUS_UNKNOWN_METHOD:
                    raise ItemNotFoundException('Item does not exist!')
                if e.get_dbus_name() == DBUS_NO_SUCH_OBJECT:
                    raise ItemNotFoundException(e.get_dbus_message())
                if e.get_dbus_name() in (DBUS_NO_REPLY, DBUS_NOT_SUPPORTED):
                    raise SecretServiceNotAvailableException(
github mitya57 / secretstorage / secretstorage / collection.py View on Github external
def create_item(self, label: str, attributes: Dict[str, str],
	                secret: bytes, replace: bool = False,
	                content_type: str = 'text/plain') -> Item:
		"""Creates a new :class:`~secretstorage.item.Item` with given
		`label` (unicode string), `attributes` (dictionary) and `secret`
		(bytestring). If `replace` is :const:`True`, replaces the existing
		item with the same attributes. If `content_type` is given, also
		sets the content type of the secret (``text/plain`` by default).
		Returns the created item."""
		self.ensure_not_locked()
		if not self.session:
			self.session = open_session(self.connection)
		_secret = format_secret(self.session, secret, content_type)
		properties = {
			SS_PREFIX + 'Item.Label': ('s', label),
			SS_PREFIX + 'Item.Attributes': ('a{ss}', attributes),
		}
		new_item, prompt = self._collection.call('CreateItem', 'a{sv}(oayays)b',
		                                         properties, _secret, replace)
		return Item(self.connection, new_item, self.session)
github mitya57 / secretstorage / secretstorage / util.py View on Github external
from jeepney.integrate.blocking import DBusConnection
from jeepney.low_level import Message
from jeepney.wrappers import new_method_call, Properties, DBusErrorResponse
from secretstorage.defines import DBUS_UNKNOWN_METHOD, DBUS_NO_SUCH_OBJECT, \
 DBUS_SERVICE_UNKNOWN, DBUS_NO_REPLY, DBUS_NOT_SUPPORTED, DBUS_EXEC_FAILED, \
 SS_PATH, SS_PREFIX, ALGORITHM_DH, ALGORITHM_PLAIN
from secretstorage.dhcrypto import Session, int_to_bytes
from secretstorage.exceptions import ItemNotFoundException, \
 SecretServiceNotAvailableException
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.utils import int_from_bytes

BUS_NAME = 'org.freedesktop.secrets'
SERVICE_IFACE = SS_PREFIX + 'Service'
PROMPT_IFACE = SS_PREFIX + 'Prompt'


class DBusAddressWrapper(DBusAddress):  # type: ignore
	"""A wrapper class around :class:`jeepney.wrappers.DBusAddress`
	that adds some additional methods for calling and working with
	properties, and converts error responses to SecretStorage
	exceptions.

	.. versionadded:: 3.0
	"""
	def __init__(self, path: str, interface: str,
	             connection: DBusConnection) -> None:
		DBusAddress.__init__(self, path, BUS_NAME, interface)
		self._connection = connection

	def send_and_get_reply(self, msg: Message) -> Any:
github n1nj4sec / pupy / pupy / packages / linux / all / secretstorage / item.py View on Github external
# License: BSD

"""SecretStorage item contains a *secret*, some *attributes* and a
*label* visible to user. Editing all these properties and reading the
secret is possible only when the :doc:`collection ` storing
the item is unlocked. The collection can be unlocked using collection's
:meth:`~secretstorage.collection.Collection.unlock` method."""

import dbus
from secretstorage.defines import SS_PREFIX
from secretstorage.exceptions import LockedException
from secretstorage.util import InterfaceWrapper, bus_get_object, \
 open_session, format_secret, to_unicode, unlock_objects
from Crypto import Cipher

ITEM_IFACE = SS_PREFIX + 'Item'

class Item(object):
    """Represents a secret item."""

    def __init__(self, bus, item_path, session=None):
        self.item_path = item_path
        item_obj = bus_get_object(bus, item_path)
        self.session = session
        self.bus = bus
        self.item_iface = InterfaceWrapper(item_obj, ITEM_IFACE)
        self.item_props_iface = InterfaceWrapper(item_obj,
            dbus.PROPERTIES_IFACE)
        self.item_props_iface.Get(ITEM_IFACE, 'Label', signature='ss')

    def __eq__(self, other):
        return self.item_path == other.item_path