From 2ac71badfd671cd397ac23c92be58ff2090bac21 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sun, 11 Mar 2018 13:54:12 +0100 Subject: Add backend providing DBus service --- backend/magiback | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100755 backend/magiback (limited to 'backend/magiback') diff --git a/backend/magiback b/backend/magiback new file mode 100755 index 0000000..796ba78 --- /dev/null +++ b/backend/magiback @@ -0,0 +1,174 @@ +#!/usr/bin/python3 + +from gi.repository import GLib +from pydbus import SystemBus +import raw_write +import logging +import threading + +DEAMON_ORG = 'org.mageia.Magiback' +DEAMON_INTERFACE = DEAMON_ORG +ISODUMPER_INTERFACE = DEAMON_ORG + ".Isodumper" +logger = logging.getLogger('magiback.system') + + +class Isodumper(raw_write.Dumper): + """ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + """ + def __init__(self): + super().__init__() + self.finished = threading.Event() + self._progress = 0 + self.loop = GLib.MainLoop() + self.return_state = False + self.return_message = "" + self.authorized_sender_read = set() + self.authorized_sender_write = set() + + def do_write(self,source, target): + print("Writing") + self.finished.clear() + self.thread = threading.Thread(target=self._do_write, args=(source, target, )) + self.thread.start() + + @property + def done(self): + return self.finished.wait(1) + + @property + def message(self): + return self.return_message + + @property + def state(self): + return self.return_state + + def end(self): + self.thread.join() + self._progress = 0 + self.finished.clear() + return self.return_state, self.return_message + + @property + def progress(self): + return self._progress + + def do_unmount(self, device): + print("Unmounting") + return self._do_unmount([device]) + + def check_write(self,target, source): + self.thread = threading.Thread(target=self._check_write, args=(target, source,)) + self.thread.start() + + def run(self): + self.loop.run() + + def check_permission_write(self, sender): + """ Check for senders permission to update system packages""" + if sender in self.authorized_sender_write: + return + else: + if self._check_permission(sender, 'org.baseurl.DnfSystem.write'): + self.authorized_sender_write.add(sender) + + def _check_permission(self, sender, action): + """ Check senders permissions using PolicyKit1 + """ + if not sender: + raise ValueError('sender == None') + + obj = SystemBus().get( + 'org.freedesktop.PolicyKit1', + '/org/freedesktop/PolicyKit1/Authority') + iface = obj['org.freedesktop.PolicyKit1.Authority'] + (granted, _, details) = iface.CheckAuthorization( + ('system-bus-name', {'name': sender}), action, {}, + 1, '', timeout=600) + if not granted: + return False + else: + return True + + +class ConfFile(object): + """ + + + + + + + + + + + + + + """ + def __init__(self): + super().__init__() + + def setName(self,file_name): + self.file_name = file_name + + def getFile(self): + with open(self.file_name,'r') as tcf : + # read the file + content="" + while 1: + line = tcf.readline() + if not line: + break + content += line + return content + + def saveFile(self, tc): + try: + with open(self.file_name,'w') as tcf : + tcf.write(tc) + except: + return False + return True + +if __name__ == '__main__': + print("Running Magiback service.") + + bus = SystemBus() + conf_file = ConfFile() + bus.publish(DEAMON_ORG, conf_file, + ("Isodumper", Isodumper())) + loop = GLib.MainLoop() + loop.run() -- cgit v1.2.1