"""
Provider Info Page, used in First run Wizard
"""
import logging
from PyQt4 import QtCore
from PyQt4 import QtGui
import requests
from leap.base import exceptions as baseexceptions
#from leap.crypto import certs
from leap.eip import exceptions as eipexceptions
from leap.gui.progress import ValidationPage
from leap.util.web import get_https_domain_and_port
from leap.gui.constants import APP_LOGO, pause_for_user
logger = logging.getLogger(__name__)
class ProviderInfoPage(ValidationPage):
def __init__(self, parent=None):
super(ProviderInfoPage, self).__init__(parent)
self.setTitle("Provider Info")
#self.setSubTitle("Available information about chosen provider.")
self.setPixmap(
QtGui.QWizard.LogoPixmap,
QtGui.QPixmap(APP_LOGO))
self.prev_page = "providerselection"
self.infoWidget = None
#self.current_page = "providerinfo"
def create_info_panel(self):
# Use stacked widget instead
# of reparenting the layout.
self.infoWidget = QtGui.QStackedWidget()
info = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
displayName = QtGui.QLabel("")
description = QtGui.QLabel("")
enrollment_policy = QtGui.QLabel("")
# XXX set stylesheet...
# prettify a little bit.
# bigger fonts and so on...
layout.addWidget(displayName)
layout.addWidget(description)
layout.addWidget(enrollment_policy)
layout.addStretch(1)
info.setLayout(layout)
self.infoWidget.addWidget(info)
self.layout.addWidget(self.infoWidget)
# add refs to self to allow for
# updates.
# Watch out! Have to get rid of these references!
# this should be better handled with signals !!
self.displayName = displayName
self.description = description
self.enrollment_policy = enrollment_policy
def show_provider_info(self):
# XXX get multilingual objects
# directly from the config object
lang = "en"
pconfig = self.wizard().providerconfig
dn = pconfig.get('display_name')
display_name = dn[lang] if dn else ''
domain_name = self.field('provider_domain')
self.displayName.setText(
"%s https://%s" % (display_name, domain_name))
desc = pconfig.get('description')
description_text = desc[lang] if desc else ''
self.description.setText(
"%s" % description_text)
enroll = pconfig.get('enrollment_policy')
if enroll:
self.enrollment_policy.setText(
'enrollment policy: %s' % enroll)
def _do_checks(self, update_signal=None):
"""
executes actual checks in a separate thread
"""
# We're done!
self.set_done()
def _do_validation(self):
"""
called after _do_checks has finished
(connected to checker thread finished signal)
"""
print 'validation...'
prevpage = "providerselection"
errors = self.wizard().get_validation_error(prevpage)
if not errors:
self.hide_progress()
self.create_info_panel()
self.show_provider_info()
else:
logger.debug('going back with errors')
logger.debug('ERRORS: %s' % errors)
self.go_back()
def nextId(self):
wizard = self.wizard()
next_ = "providersetupvalidation"
return wizard.get_page_index(next_)
#def isComplete(self):
#return self.is_done()
def initializePage(self):
super(ProviderInfoPage, self).initializePage()
self.show_progress()
self.set_undone()
self.completeChanged.emit()
def cleanupPage(self):
wizard = self.wizard()
# XXX makes sense now?
# this was created on previous...
if hasattr(wizard, 'providerconfig'):
del self.wizard().providerconfig
if self.infoWidget:
QtCore.QObjectCleanupHandler().add(
self.infoWidget)
# refactor this into some kind of destructor
del self.displayName
del self.description
del self.enrollment_policy