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 = [
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 = True)
+config.plugins.crashlogautosubmit.addNetwork = ConfigYesNo(default = False)
+config.plugins.crashlogautosubmit.addWlan = ConfigYesNo(default = False)
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):
self.addEmailEntry = None
self.EmailEntry = None
self.NameEntry = None
+ self.AnonCrashlogEntry = None
+ self.NetworkEntry = None
+ self.WlanEntry = None
self.msgCrashlogMailer = False
self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
"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)
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:
self.addEmailEntry = getConfigListEntry(_("Include your email and name (optional) in the mail?"), config.plugins.crashlogautosubmit.attachemail)
self.EmailEntry = getConfigListEntry(_("Your email address:"), config.plugins.crashlogautosubmit.email)
self.NameEntry = getConfigListEntry(_("Your name (optional):"), config.plugins.crashlogautosubmit.name)
+ self.AnonCrashlogEntry = getConfigListEntry(_("Anonymize crashlog?"), config.plugins.crashlogautosubmit.sendAnonCrashlog)
+ self.NetworkEntry = getConfigListEntry(_("Add network configuration?"), config.plugins.crashlogautosubmit.addNetwork)
+ self.WlanEntry = getConfigListEntry(_("Add WLAN configuration?"), config.plugins.crashlogautosubmit.addWlan)
+
self.list.append( self.MailEntry )
if config.plugins.crashlogautosubmit.sendmail.value is not "send_never":
self.list.append( self.LogEntry )
if config.plugins.crashlogautosubmit.attachemail.value is True:
self.list.append( self.EmailEntry )
self.list.append( self.NameEntry )
+ self.list.append( self.AnonCrashlogEntry )
+ self.list.append( self.NetworkEntry )
+ self.list.append( self.WlanEntry )
self["config"].list = self.list
self["config"].l.setList(self.list)
self["status"].setText(_("Optionally enter your name if you want to."))
self.enableVKeyIcon()
self.showKeypad()
+ elif current == self.AnonCrashlogEntry:
+ self["status"].setText(_("Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."))
+ self.disableVKeyIcon()
+ elif current == self.NetworkEntry:
+ self["status"].setText(_("Adds network configuration if enabled."))
+ self.disableVKeyIcon()
+ elif current == self.WlanEntry:
+ self["status"].setText(_("Adds wlan configuration if enabled."))
+ self.disableVKeyIcon()
def enableVKeyIcon(self):
- self["VKeyButton"].show()
self["VKeyIcon"].show()
self["VirtualKB"].setEnabled(True)
current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
def disableVKeyIcon(self):
- self["VKeyButton"].hide()
self["VKeyIcon"].hide()
self["VirtualKB"].setEnabled(False)
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:
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):
if menuid != "system":
return [ ]
- return [(_("Crashlog settings") + "...", openconfig, "crashlog_config", 70)]
+ return [(_("Crashlog settings"), openconfig, "crashlog_config", 70)]
def Plugins(**kwargs):
- return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart),
- PluginDescriptor(name=_("CrashlogAutoSubmit"), description=_("CrashlogAutoSubmit settings"),where=PluginDescriptor.WHERE_MENU, fnc=selSetup)]
+ return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], needsRestart = False, fnc = autostart),
+ PluginDescriptor(name=_("CrashlogAutoSubmit"), description=_("CrashlogAutoSubmit settings"),where=PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=selSetup)]