bsod.cpp,CrashlogAutoSubmit: add active skin name to xml crashlogs. fixes #597
[enigma2.git] / lib / python / Plugins / SystemPlugins / CrashlogAutoSubmit / plugin.py
index 1e096e24bb8434c3fa4690faff496c033a825217..92c16289ca900efd52b27de09772f8978c4ca816 100755 (executable)
@@ -2,17 +2,19 @@ from Plugins.Plugin import PluginDescriptor
 from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigSelection, ConfigYesNo,ConfigText
 from Components.ConfigList import ConfigListScreen
 from Components.ActionMap import ActionMap
-from Components.Label import Label
+from Components.Sources.StaticText import StaticText
 from Components.Pixmap import Pixmap
 from Screens.Screen import Screen
 from Screens.VirtualKeyBoard import VirtualKeyBoard
 from Screens.ChoiceBox import ChoiceBox
 from Screens.MessageBox import MessageBox
-from enigma import ePoint
+from enigma import ePoint, eTPM
+from Tools import Notifications
 
 import os
 from twisted.mail import smtp, relaymanager
 import MimeWriter, mimetools, StringIO
+from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block, validate_cert, read_random
 
 config.plugins.crashlogautosubmit = ConfigSubsection()
 config.plugins.crashlogautosubmit.sendmail = ConfigSelection(default = "send", choices = [
@@ -22,7 +24,7 @@ config.plugins.crashlogautosubmit.sendlog = ConfigSelection(default = "rename",
 config.plugins.crashlogautosubmit.attachemail = ConfigYesNo(default = False)
 config.plugins.crashlogautosubmit.email = ConfigText(default = "myemail@home.com", fixed_size = False)
 config.plugins.crashlogautosubmit.name = ConfigText(default = "Dreambox User", fixed_size = False)
-config.plugins.crashlogautosubmit.sendAnonCrashlog = ConfigYesNo(default = False)
+config.plugins.crashlogautosubmit.sendAnonCrashlog = ConfigYesNo(default = True)
 config.plugins.crashlogautosubmit.addNetwork = ConfigYesNo(default = False)
 config.plugins.crashlogautosubmit.addWlan = ConfigYesNo(default = False)
 
@@ -31,17 +33,16 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen):
        oldMailEntryValue = config.plugins.crashlogautosubmit.sendmail.value
 
        skin = """
-               <screen name="CrashlogAutoSubmitConfiguration" position="80,80" size="560,400" title="CrashlogAutoSubmit settings..." >
-                       <widget name="config" zPosition="2" position="5,5" size="550,360" scrollbarMode="showOnDemand" transparent="1" />
-                       <ePixmap pixmap="skin_default/div-h.png" position="0,300" zPosition="10" size="560,2" transparent="1" alphatest="on" />
-                       <widget name="status" position="10,300" zPosition="10" size="540,50" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,360" zPosition="2" size="140,40" transparent="1" alphatest="on" />
-                       <widget name="closetext" position="0,360" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,360" zPosition="2" size="140,40" transparent="1" alphatest="on" />
-                       <widget name="installtext" position="140,360" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <widget name="VKeyButton" pixmap="skin_default/buttons/button_yellow.png" position="285,370" zPosition="2" size="15,16" transparent="1" alphatest="on" />
-                       <widget name="VKeyIcon" pixmap="skin_default/vkey_icon.png" position="300,355" zPosition="10" size="60,48" transparent="1" alphatest="on" />
-                       <widget name="HelpWindow" position="175,250" zPosition="1" size="1,1" transparent="1" />
+               <screen name="CrashlogAutoSubmitConfiguration" position="center,center" size="560,440" title="CrashlogAutoSubmit settings" >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget name="config" zPosition="2" position="5,50" size="550,300" scrollbarMode="showOnDemand" transparent="1" />
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,390" zPosition="10" size="560,2" transparent="1" alphatest="on" />
+                       <widget source="status" render="Label" position="10,400" size="540,40" zPosition="10" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
+                       <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="10,420" zPosition="10" size="35,25" transparent="1" alphatest="on" />
+                       <widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="160,325" zPosition="1" size="1,1" transparent="1" alphatest="on" />
                </screen>"""
 
        def __init__(self, session):
@@ -65,23 +66,21 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen):
                        "green": self.keySave,
                }, -2)
 
-               self["VirtualKB"] = ActionMap(["ColorActions" ],
+               self["VirtualKB"] = ActionMap(["VirtualKeyboardActions" ],
                {
-                       "yellow": self.KeyYellow,
+                       "showVirtualKeyboard": self.KeyText,
                }, -1)
 
                self.list = []
                ConfigListScreen.__init__(self, self.list,session = self.session)
                self.createSetup()
 
-               self["VKeyButton"] = Pixmap()
+               self["key_red"] = StaticText(_("Close"))
+               self["key_green"] = StaticText(_("Save"))
+               self["status"] = StaticText()
                self["VKeyIcon"] = Pixmap()
-               self["closetext"] = Label(_("Close"))
-               self["installtext"] = Label(_("Save"))
-               self["HelpWindow"] = Label()
-               self["status"] = Label()
+               self["HelpWindow"] = Pixmap()
 
-               self["VKeyButton"].hide()
                self["VKeyIcon"].hide()
                self["VirtualKB"].setEnabled(False)
                self.onShown.append(self.setWindowTitle)
@@ -99,7 +98,7 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen):
                ConfigListScreen.keyRight(self)
                self.newConfig()
 
-       def KeyYellow(self):
+       def KeyText(self):
                        if self["config"].getCurrent() == self.EmailEntry:
                                self.session.openWithCallback(self.EmailCallback, VirtualKeyBoard, title = (_("Please enter your email address here:")), text = config.plugins.crashlogautosubmit.email.value)
                        if self["config"].getCurrent() == self.NameEntry:
@@ -187,7 +186,6 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen):
                        self.disableVKeyIcon()
 
        def enableVKeyIcon(self):
-               self["VKeyButton"].show()
                self["VKeyIcon"].show()
                self["VirtualKB"].setEnabled(True)
 
@@ -200,7 +198,6 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen):
                                current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
 
        def disableVKeyIcon(self):
-               self["VKeyButton"].hide()
                self["VKeyIcon"].hide()
                self["VirtualKB"].setEnabled(False)
 
@@ -339,7 +336,7 @@ def mxServerFound(mxServer,session):
 
        if len(crashLogFilelist):
                if config.plugins.crashlogautosubmit.sendmail.value == "send":
-                       session.openWithCallback(handleAnswer, ChoiceBox, title=_("Crashlogs found!\nSend them to Dream Multimedia ?"), list = list)
+                       Notifications.AddNotificationWithCallback(handleAnswer, ChoiceBox, title=_("Crashlogs found!\nSend them to Dream Multimedia?"), list = list)
                elif config.plugins.crashlogautosubmit.sendmail.value == "send_always":
                        send_mail()
        else:
@@ -380,11 +377,36 @@ def callCrashMailer(result,session):
 
 def autostart(reason, **kwargs):
        print "[CrashlogAutoSubmit] - autostart"
-       if "session" in kwargs:
-               try:
-                       startMailer(kwargs["session"])
-               except ImportError, e:
-                       print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e
+       try:
+               device = open("/proc/stb/info/model", "r").readline().strip()
+       except:
+               device = ""     
+       if device != "dm7025":
+               rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
+               etpm = eTPM()
+               l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
+               if l2cert is None:
+                       return
+               l2key = validate_cert(l2cert, rootkey)
+               if l2key is None:
+                       return
+               l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
+               if l3cert is None:
+                       return
+               l3key = validate_cert(l3cert, l2key)
+               if l3key is None:
+                       return
+               rnd = read_random()
+               if rnd is None:
+                       return
+               val = etpm.challenge(rnd)
+               result = decrypt_block(val, l3key)
+       if device == "dm7025" or result[80:88] == rnd:
+               if "session" in kwargs:
+                       try:
+                               startMailer(kwargs["session"])
+                       except ImportError, e:
+                               print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e
 
 
 def openconfig(session, **kwargs):
@@ -395,7 +417,7 @@ def selSetup(menuid, **kwargs):
        if menuid != "system":
                return [ ]
 
-       return [(_("Crashlog settings") + "...", openconfig, "crashlog_config", 70)]
+       return [(_("Crashlog settings"), openconfig, "crashlog_config", 70)]
 
 
 def Plugins(**kwargs):