35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
from gi.repository import GLib
|
|
from collections import namedtuple
|
|
|
|
AuthorizationResult = namedtuple("AuthorizationResult", "is_authorized is_challenge details")
|
|
|
|
class MethodCallContext(object):
|
|
def __init__(self, gdbus_method_invocation):
|
|
self._mi = gdbus_method_invocation
|
|
|
|
@property
|
|
def bus(self):
|
|
return self._mi.get_connection().pydbus
|
|
|
|
@property
|
|
def sender(self):
|
|
return self._mi.get_sender()
|
|
|
|
@property
|
|
def object_path(self):
|
|
return self._mi.get_object_path()
|
|
|
|
@property
|
|
def interface_name(self):
|
|
return self._mi.get_interface_name()
|
|
|
|
@property
|
|
def method_name(self):
|
|
return self._mi.get_method_name()
|
|
|
|
def check_authorization(self, action_id, details, interactive=False):
|
|
return AuthorizationResult(*self.bus.polkit_authority.CheckAuthorization(('system-bus-name', {'name': GLib.Variant("s", self.sender)}), action_id, details, 1 if interactive else 0, ''))
|
|
|
|
def is_authorized(self, action_id, details, interactive=False):
|
|
return self.check_authorization(action_id, details, interactive).is_authorized
|