- commit
- eceb30725063041e36dc5f5c4a549ad953f5db8f
- parent
- 13aa5c9c87164c56108ac9d6056b0c6a1df5ddba
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2024-05-30 19:43
dbus: close sessions on disconnect
Diffstat
| M | xikeyring/dbus.py | 33 | +++++++++++++++++++++++++++------ |
1 files changed, 27 insertions, 6 deletions
diff --git a/xikeyring/dbus.py b/xikeyring/dbus.py
@@ -199,9 +199,30 @@ class DBusService(BaseDBusService): 199 199 self.session_counter += 1 200 200 session_path = f'{OFSP}/sessions/{self.session_counter}' 201 201 sid = self.register_object(conn, session_path, f'{OFSI}.Session')202 -1 self.sessions[session_path] = (sid, session)-1 202 self.sessions[session_path] = (sid, sender, session) -1 203 -1 204 conn.signal_subscribe( -1 205 None, -1 206 'org.freedesktop.DBus', -1 207 'NameOwnerChanged', -1 208 '/org/freedesktop/DBus', -1 209 None, -1 210 Gio.DBusSignalFlags.NONE, -1 211 self.on_name_owner_changed, -1 212 None -1 213 ) 203 214 return GLib.Variant('(vo)', (GLib.Variant('ay', output), session_path)) 204 215 -1 216 def on_name_owner_changed( -1 217 self, conn, sender, path, iface, signal, params, user_data=None -1 218 ): -1 219 _name, old, new = params.unpack() -1 220 if not new: -1 221 for path in [ -1 222 path for path, value in self.sessions.items() if value[1] == old -1 223 ]: -1 224 self.session_close(conn, sender, path) -1 225 205 226 def service_search_items(self, conn, sender, path, query): 206 227 exe = self.get_exe(conn, sender) 207 228 items = self.search_items(exe, conn, query) @@ -215,7 +236,7 @@ class DBusService(BaseDBusService): 215 236 return GLib.Variant('(aoo)', ([], '/')) 216 237 217 238 def service_get_secrets(self, conn, sender, path, items, session_path):218 -1 _sid, session = self.sessions[session_path]-1 239 session = self.sessions[session_path][2] 219 240 exe = self.get_exe(conn, sender) 220 241 result = [] 221 242 for path in items: @@ -242,7 +263,7 @@ class DBusService(BaseDBusService): 242 263 def collection_create_item( 243 264 self, conn, sender, path, properties, secret_tuple, replace 244 265 ):245 -1 _sid, session = self.sessions[secret_tuple[0]]-1 266 session = self.sessions[secret_tuple[0]][2] 246 267 secret = session.decode(secret_tuple) 247 268 attributes = properties.get(f'{OFSI}.Item.Attributes', {}) 248 269 exe = self.get_exe(conn, sender) @@ -285,13 +306,13 @@ class DBusService(BaseDBusService): 285 306 id = int(path.rsplit('/', 1)[1], 10) 286 307 exe = self.get_exe(conn, sender) 287 308 secret = self.keyring.get_secret(exe, id)288 -1 _sid, session = self.sessions[session_path]-1 309 session = self.sessions[session_path][2] 289 310 secret_tuple = session.encode(session_path, secret) 290 311 return GLib.Variant('((oayays))', [secret_tuple]) 291 312 292 313 def item_set_secret(self, conn, sender, path, secret_tuple): 293 314 id = int(path.rsplit('/', 1)[1], 10)294 -1 _sid, session = self.sessions[secret_tuple[0]]-1 315 session = self.sessions[secret_tuple[0]][2] 295 316 secret = session.decode(secret_tuple) 296 317 exe = self.get_exe(conn, sender) 297 318 self.keyring.update_secret(exe, id, secret) @@ -341,5 +362,5 @@ class DBusService(BaseDBusService): 341 362 ) 342 363 343 364 def session_close(self, conn, sender, path):344 -1 sid, _session = self.sessions.pop(path)-1 365 sid, _owner, _session = self.sessions.pop(path) 345 366 conn.unregister_object(sid)