xi-keyring

simple and extensible alternative for gnome-keyring
git clone https://git.ce9e.org/xi-keyring.git

commit
579ccb67a83905ef6b4f24f1ed567623ad259dbd
parent
d4e9faf2216bd5dd8130a7a4ef7d889d106f449d
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-04-05 07:20
refactor: use constants for repetetive prefixes

Diffstat

M xikeyring/dbus.py 46 +++++++++++++++++-----------------------------

1 files changed, 17 insertions, 29 deletions


diff --git a/xikeyring/dbus.py b/xikeyring/dbus.py

@@ -11,6 +11,9 @@ from .dbus_sessions import create_session
   11    11 from .keyring import AccessDeniedError
   12    12 from .keyring import NotFoundError
   13    13 
   -1    14 OFSP = '/org/freedesktop/secrets'
   -1    15 OFSI = 'org.freedesktop.Secret'
   -1    16 
   14    17 gi.require_version('Gtk', '3.0')
   15    18 
   16    19 logger = logging.getLogger(__name__)
@@ -111,7 +114,7 @@ class DBusService(BaseDBusService):
  111   114         self.session_counter = 0
  112   115 
  113   116     def ids_to_paths(self, items):
  114    -1         return [f'/org/freedesktop/secrets/collection/it/{id}' for id in items]
   -1   117         return [f'{OFSP}/collection/it/{id}' for id in items]
  115   118 
  116   119     def update_items(self, conn, *, keep=None, add=[], rm=[]):
  117   120         for id, reg_id in list(self.registered_items.items()):
@@ -123,25 +126,15 @@ class DBusService(BaseDBusService):
  123   126             if id not in self.registered_items:
  124   127                 self.registered_items[id] = self.register_object(
  125   128                     conn,
  126    -1                     f'/org/freedesktop/secrets/collection/it/{id}',
  127    -1                     'org.freedesktop.Secret.Item',
   -1   129                     f'{OFSP}/collection/it/{id}',
   -1   130                     f'{OFSI}.Item',
  128   131                 )
  129   132 
  130   133     def on_bus_acquired(self, conn, bus):
  131   134         super().on_bus_acquired(conn, bus)
  132    -1         self.register_object(
  133    -1             conn, '/org/freedesktop/secrets', 'org.freedesktop.Secret.Service'
  134    -1         )
  135    -1         self.register_object(
  136    -1             conn,
  137    -1             '/org/freedesktop/secrets/aliases/default',
  138    -1             'org.freedesktop.Secret.Collection',
  139    -1         )
  140    -1         self.register_object(
  141    -1             conn,
  142    -1             '/org/freedesktop/secrets/collection/it',
  143    -1             'org.freedesktop.Secret.Collection',
  144    -1         )
   -1   135         self.register_object(conn, OFSP, f'{OFSI}.Service')
   -1   136         self.register_object(conn, f'{OFSP}/aliases/default', f'{OFSI}.Collection')
   -1   137         self.register_object(conn, f'{OFSP}/collection/it', f'{OFSI}.Collection')
  145   138 
  146   139         items = self.keyring.list_items()
  147   140         self.update_items(conn, keep=items, add=items)
@@ -149,9 +142,9 @@ class DBusService(BaseDBusService):
  149   142     def service_open_session(self, conn, sender, path, algorithm, input):
  150   143         output, session = create_session(algorithm, input)
  151   144         self.session_counter += 1
  152    -1         session_path = f'/org/freedesktop/secrets/sessions/{self.session_counter}'
   -1   145         session_path = f'{OFSP}/sessions/{self.session_counter}'
  153   146         self.sessions[session_path] = session
  154    -1         self.register_object(conn, session_path, 'org.freedesktop.Secret.Session')
   -1   147         self.register_object(conn, session_path, f'{OFSI}.Session')
  155   148         return GLib.Variant('(vo)', (GLib.Variant('ay', output), session_path))
  156   149 
  157   150     def service_search_items(self, conn, sender, path, query):
@@ -178,12 +171,12 @@ class DBusService(BaseDBusService):
  178   171 
  179   172     def service_read_alias(self, conn, sender, path, name):
  180   173         if name == 'default':
  181    -1             return GLib.Variant('(o)', ['/org/freedesktop/secrets/collection/it'])
   -1   174             return GLib.Variant('(o)', [f'{OFSP}/collection/it'])
  182   175         else:
  183   176             return GLib.Variant('(o)', ['/'])
  184   177 
  185   178     def service_get_collections(self, conn, sender, path):
  186    -1         return GLib.Variant('ao', ['/org/freedesktop/secrets/collection/it'])
   -1   179         return GLib.Variant('ao', [f'{OFSP}/collection/it'])
  187   180 
  188   181     def collection_search_items(self, conn, sender, path, query):
  189   182         items = self.keyring.search_items(query)
@@ -194,7 +187,7 @@ class DBusService(BaseDBusService):
  194   187     ):
  195   188         session = self.sessions[secret_tuple[0]]
  196   189         secret = session.decode(secret_tuple)
  197    -1         attributes = properties.get('org.freedesktop.Secret.Item.Attributes', {})
   -1   190         attributes = properties.get(f'{OFSI}.Item.Attributes', {})
  198   191         id = None
  199   192         if replace:
  200   193             matches = self.keyring.search_items(attributes)
@@ -205,17 +198,12 @@ class DBusService(BaseDBusService):
  205   198             id = self.keyring.create_item(attributes, secret)
  206   199             self.update_items(conn, add=[id])
  207   200         # TODO: trigger signal
  208    -1         return GLib.Variant(
  209    -1             '(oo)', (f'/org/freedesktop/secrets/collection/it/{id}', '/')
  210    -1         )
   -1   201         return GLib.Variant('(oo)', (f'{OFSP}/collection/it/{id}', '/'))
  211   202 
  212   203     def collection_get_items(self, conn, sender, path):
  213   204         items = self.keyring.list_items()
  214   205         self.update_items(conn, keep=items, add=items)
  215    -1         return GLib.Variant(
  216    -1             'ao',
  217    -1             [f'/org/freedesktop/secrets/collection/it/{id}' for id in items],
  218    -1         )
   -1   206         return GLib.Variant('ao', self.ids_to_paths(items))
  219   207 
  220   208     def collection_get_label(self, conn, sender, path):
  221   209         return GLib.Variant('s', 'it')
@@ -254,7 +242,7 @@ class DBusService(BaseDBusService):
  254   242         return GLib.Variant('s', path.rsplit('/', 1)[1])
  255   243 
  256   244     def item_get_type(self, conn, sender, path):
  257    -1         return GLib.Variant('s', 'org.freedesktop.Secret.Generic')
   -1   245         return GLib.Variant('s', f'{OFSI}.Generic')
  258   246 
  259   247     def item_get_created(self, conn, sender, path):
  260   248         return GLib.Variant('t', 0)