def _build_usage_policy(self, layout): self._pin_policy = QtGui.QComboBox() self._pin_policy.addItem(m.pin_policy_default, None) self._pin_policy.addItem(m.pin_policy_never, "never") self._pin_policy.addItem(m.pin_policy_once, "once") self._pin_policy.addItem(m.pin_policy_always, "always") pin_policy = settings[SETTINGS.PIN_POLICY] for index in range(self._pin_policy.count()): if self._pin_policy.itemData(index) == pin_policy: pin_policy_text = self._pin_policy.itemText(index) self._pin_policy.setCurrentIndex(index) break else: pin_policy = None pin_policy_text = m.pin_policy_default self._touch_policy = QtGui.QCheckBox(m.touch_policy) self._touch_policy.setChecked(settings[SETTINGS.TOUCH_POLICY]) if self._controller.version_tuple < (4, 0, 0): return layout.addWidget(self.section(m.usage_policy)) if settings.is_locked(SETTINGS.PIN_POLICY): layout.addWidget(QtGui.QLabel(m.pin_policy_1 % pin_policy_text)) else: pin_policy_box = QtGui.QHBoxLayout() pin_policy_box.addWidget(QtGui.QLabel(m.pin_policy)) pin_policy_box.addWidget(self._pin_policy) layout.addLayout(pin_policy_box) self._touch_policy.setDisabled(settings.is_locked(SETTINGS.TOUCH_POLICY)) layout.addWidget(self._touch_policy)
def _build_algorithms(self, layout): self._alg_type = QtGui.QButtonGroup(self) self._alg_rsa_1024 = QtGui.QRadioButton(m.alg_rsa_1024) self._alg_rsa_1024.setProperty('value', 'RSA1024') self._alg_rsa_2048 = QtGui.QRadioButton(m.alg_rsa_2048) self._alg_rsa_2048.setProperty('value', 'RSA2048') self._alg_ecc_p256 = QtGui.QRadioButton(m.alg_ecc_p256) self._alg_ecc_p256.setProperty('value', 'ECCP256') self._alg_ecc_p384 = QtGui.QRadioButton(m.alg_ecc_p384) self._alg_ecc_p384.setProperty('value', 'ECCP384') self._alg_type.addButton(self._alg_rsa_1024) self._alg_type.addButton(self._alg_rsa_2048) self._alg_type.addButton(self._alg_ecc_p256) if self._controller.version_tuple >= (4, 0, 0): self._alg_type.addButton(self._alg_ecc_p384) algo = settings[SETTINGS.ALGORITHM] if settings.is_locked(SETTINGS.ALGORITHM): layout.addWidget(QtGui.QLabel(m.algorithm_1 % algo)) else: layout.addWidget(self.section(m.algorithm)) for button in self._alg_type.buttons(): layout.addWidget(button) if button.property('value') == algo: button.setChecked(True) button.setFocus() if not self._alg_type.checkedButton(): button = self._alg_type.buttons()[0] button.setChecked(True)
def _generate_callback2(self, result): self.accept() if isinstance(result, Exception): QtGui.QMessageBox.warning(self, m.error, str(result)) else: settings[SETTINGS.ALGORITHM] = self.algorithm if self._controller.version_tuple >= (4, 0, 0): settings[SETTINGS.TOUCH_POLICY] = self.touch_policy settings[SETTINGS.OUT_TYPE] = self.out_format if self.out_format != 'pk' and not \ settings.is_locked(SETTINGS.SUBJECT): subject = self._subject.text() # Only save if different: if subject != settings[SETTINGS.SUBJECT]: settings[SETTINGS.SUBJECT] = subject if self.out_format == 'ca': settings[SETTINGS.CERTREQ_TEMPLATE] = self._cert_tmpl.text() message = m.generated_key_desc_1 % self._slot if self.out_format == 'pk': message += '\n' + m.gen_out_pk_1 % result elif self.out_format == 'csr': message += '\n' + m.gen_out_csr_1 % result elif self.out_format == 'ssc': message += '\n' + m.gen_out_ssc elif self.out_format == 'ca': message += '\n' + m.gen_out_ca QtGui.QMessageBox.information(self, m.generated_key, message)
def _build_ui(self): layout = QtGui.QVBoxLayout(self) layout.setSizeConstraint(QtGui.QLayout.SetFixedSize) btns = QtGui.QHBoxLayout() self._pin_btn = QtGui.QPushButton(m.change_pin) self._pin_btn.clicked.connect(self._controller.wrap(self._change_pin, True)) btns.addWidget(self._pin_btn) self._puk_btn = QtGui.QPushButton(m.change_puk) self._puk_btn.clicked.connect(self._controller.wrap(self._change_puk, True)) self._key_btn = QtGui.QPushButton(m.change_key) self._key_btn.clicked.connect(self._controller.wrap(self._change_key, True)) if not settings.is_locked(SETTINGS.PIN_AS_KEY) or \ not settings[SETTINGS.PIN_AS_KEY]: btns.addWidget(self._puk_btn) btns.addWidget(self._key_btn) layout.addLayout(btns) self._messages = QtGui.QTextEdit() self._messages.setFixedSize(480, 100) self._messages.setReadOnly(True) layout.addWidget(self._messages)
def _build_ui(self): layout = QtGui.QVBoxLayout(self) layout.setSizeConstraint(QtGui.QLayout.SetFixedSize) btns = QtGui.QHBoxLayout() self._pin_btn = QtGui.QPushButton(m.change_pin) self._pin_btn.clicked.connect( self._controller.wrap(self._change_pin, True)) btns.addWidget(self._pin_btn) self._puk_btn = QtGui.QPushButton(m.change_puk) self._puk_btn.clicked.connect( self._controller.wrap(self._change_puk, True)) self._key_btn = QtGui.QPushButton(m.change_key) self._key_btn.clicked.connect( self._controller.wrap(self._change_key, True)) if not settings.is_locked(SETTINGS.PIN_AS_KEY) or \ not settings[SETTINGS.PIN_AS_KEY]: btns.addWidget(self._puk_btn) btns.addWidget(self._key_btn) layout.addLayout(btns) self._messages = QtGui.QTextEdit() self._messages.setFixedSize(480, 100) self._messages.setReadOnly(True) layout.addWidget(self._messages)
def _init_callback(self, result): if isinstance(result, DeviceGoneError): QtGui.QMessageBox.warning(self, m.error, m.device_unplugged) self.accept() elif isinstance(result, Exception): QtGui.QMessageBox.warning(self, m.error, str(result)) else: if not settings.is_locked(SETTINGS.PIN_AS_KEY): settings[SETTINGS.PIN_AS_KEY] = self._key_panel.use_pin self.accept()
def _build_usage_policy(self, layout): self._pin_policy = QtGui.QComboBox() self._pin_policy.addItem(m.pin_policy_default, None) self._pin_policy.addItem(m.pin_policy_never, 'never') self._pin_policy.addItem(m.pin_policy_once, 'once') self._pin_policy.addItem(m.pin_policy_always, 'always') self._touch_policy = QtGui.QCheckBox(m.touch_policy) if self._controller.version_tuple < (4, 0, 0): return use_pin_policy = self._slot in settings[SETTINGS.PIN_POLICY_SLOTS] use_touch_policy = self._slot in settings[SETTINGS.TOUCH_POLICY_SLOTS] if use_pin_policy or use_touch_policy: self.has_content = True layout.addWidget(self.section(m.usage_policy)) if use_pin_policy: pin_policy = settings[SETTINGS.PIN_POLICY] for index in range(self._pin_policy.count()): if self._pin_policy.itemData(index) == pin_policy: pin_policy_text = self._pin_policy.itemText(index) self._pin_policy.setCurrentIndex(index) break else: pin_policy = None pin_policy_text = m.pin_policy_default if settings.is_locked(SETTINGS.PIN_POLICY): layout.addWidget(QtGui.QLabel(m.pin_policy_1 % pin_policy_text)) else: pin_policy_box = QtGui.QHBoxLayout() pin_policy_box.addWidget(QtGui.QLabel(m.pin_policy)) pin_policy_box.addWidget(self._pin_policy) layout.addLayout(pin_policy_box) if use_touch_policy: self._touch_policy.setChecked(settings[SETTINGS.TOUCH_POLICY]) self._touch_policy.setDisabled( settings.is_locked(SETTINGS.TOUCH_POLICY)) layout.addWidget(self._touch_policy)
def _build_ui(self): layout = QtGui.QFormLayout(self) layout.addRow(self.section(m.pin)) self._complex_pins = QtGui.QCheckBox(m.use_complex_pins) self._complex_pins.setChecked(settings[SETTINGS.COMPLEX_PINS]) self._complex_pins.setDisabled( settings.is_locked(SETTINGS.COMPLEX_PINS)) layout.addRow(self._complex_pins) self._pin_expires = QtGui.QCheckBox(m.pin_expires) self._pin_expires_days = QtGui.QSpinBox() self._pin_expires_days.setMinimum(30) pin_expires = settings[SETTINGS.PIN_EXPIRATION] pin_expiry_locked = settings.is_locked(SETTINGS.PIN_EXPIRATION) self._pin_expires.setChecked(bool(pin_expires)) self._pin_expires_days.setValue(pin_expires) self._pin_expires.setDisabled(pin_expiry_locked) self._pin_expires_days.setDisabled( pin_expiry_locked or not pin_expires) self._pin_expires.stateChanged.connect( self._pin_expires_days.setEnabled) layout.addRow(self._pin_expires) layout.addRow(m.pin_expires_days, self._pin_expires_days) layout.addRow(self.section(m.misc)) reader_pattern = settings[SETTINGS.CARD_READER] self._reader_pattern = QtGui.QLineEdit(reader_pattern) layout.addRow(m.reader_name, self._reader_pattern) buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) buttons.accepted.connect(self._save) buttons.rejected.connect(self.reject) layout.addWidget(buttons)
def _build_ui(self): layout = QtGui.QFormLayout(self) layout.addRow(self.section(m.pin)) self._complex_pins = QtGui.QCheckBox(m.use_complex_pins) self._complex_pins.setChecked(settings[SETTINGS.COMPLEX_PINS]) self._complex_pins.setDisabled( settings.is_locked(SETTINGS.COMPLEX_PINS)) layout.addRow(self._complex_pins) self._pin_expires = QtGui.QCheckBox(m.pin_expires) self._pin_expires_days = QtGui.QSpinBox() self._pin_expires_days.setMinimum(30) pin_expires = settings[SETTINGS.PIN_EXPIRATION] pin_expiry_locked = settings.is_locked(SETTINGS.PIN_EXPIRATION) self._pin_expires.setChecked(bool(pin_expires)) self._pin_expires_days.setValue(pin_expires) self._pin_expires.setDisabled(pin_expiry_locked) self._pin_expires_days.setDisabled(pin_expiry_locked or not pin_expires) self._pin_expires.stateChanged.connect( self._pin_expires_days.setEnabled) layout.addRow(self._pin_expires) layout.addRow(m.pin_expires_days, self._pin_expires_days) layout.addRow(self.section(m.misc)) reader_pattern = settings[SETTINGS.CARD_READER] self._reader_pattern = QtGui.QLineEdit(reader_pattern) layout.addRow(m.reader_name, self._reader_pattern) buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) buttons.accepted.connect(self._save) buttons.rejected.connect(self.reject) layout.addWidget(buttons)
def _build_ui(self): layout = QtGui.QVBoxLayout(self) self._pin_panel = PinPanel(self.headers) layout.addWidget(self._pin_panel) self._key_panel = KeyPanel(self.headers) if not settings.is_locked(SETTINGS.PIN_AS_KEY) or \ not settings[SETTINGS.PIN_AS_KEY]: layout.addWidget(self._key_panel) layout.addStretch() buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok) self._ok_btn = buttons.button(QtGui.QDialogButtonBox.Ok) buttons.accepted.connect(self._initialize) layout.addWidget(buttons)
def _build_ui(self): layout = QtGui.QVBoxLayout(self) # This unfortunately causes the window to resize when switching tabs. # layout.setSizeConstraint(QtGui.QLayout.SetFixedSize) self._cert_tabs = QtGui.QTabWidget() self._cert_tabs.setMinimumSize(540, 160) shown_slots = settings[SETTINGS.SHOWN_SLOTS] selected = False for (slot, label) in sorted(SLOTS.items()): if slot in shown_slots: index = self._cert_tabs.addTab( CertWidget(self._controller, slot), label) if not selected: self._cert_tabs.setCurrentIndex(index) selected = True elif not settings.is_locked(SETTINGS.SHOWN_SLOTS): index = self._cert_tabs.addTab(QtGui.QLabel(), label) self._cert_tabs.setTabEnabled(index, False) layout.addWidget(self._cert_tabs)
def touch_policy(self): if self._controller.version_tuple < (4, 0, 0): return False if settings.is_locked(SETTINGS.TOUCH_POLICY): return settings[SETTINGS.TOUCH_POLICY] return self._touch_policy.isChecked()
def algorithm(self): if settings.is_locked(SETTINGS.ALGORITHM): return settings[SETTINGS.ALGORITHM] return self._alg_type.checkedButton().property('value')
def pin_policy(self): if settings.is_locked(SETTINGS.PIN_POLICY): return settings[SETTINGS.PIN_POLICY] return self._pin_policy.itemData(self._pin_policy.currentIndex())
def _build_output(self, layout): layout.addWidget(self.section(m.output)) self._out_type = QtGui.QButtonGroup(self) self._out_pk = QtGui.QRadioButton(m.out_pk) self._out_pk.setProperty('value', 'pk') self._out_ssc = QtGui.QRadioButton(m.out_ssc) self._out_ssc.setProperty('value', 'ssc') self._out_csr = QtGui.QRadioButton(m.out_csr) self._out_csr.setProperty('value', 'csr') self._out_ca = QtGui.QRadioButton(m.out_ca) self._out_ca.setProperty('value', 'ca') self._out_type.addButton(self._out_pk) self._out_type.addButton(self._out_ssc) self._out_type.addButton(self._out_csr) out_btns = [] for button in self._out_type.buttons(): value = button.property('value') if value in settings[SETTINGS.SHOWN_OUT_FORMS]: layout.addWidget(button) out_btns.append(button) if value == settings[SETTINGS.OUT_TYPE]: button.setChecked(True) self._cert_tmpl = QtGui.QLineEdit(settings[SETTINGS.CERTREQ_TEMPLATE]) if 'ca' in settings[SETTINGS.SHOWN_OUT_FORMS]: if has_ca(): out_btns.append(self._out_ca) self._out_type.addButton(self._out_ca) self._out_ca.setChecked(True) layout.addWidget(self._out_ca) if not settings.is_locked(SETTINGS.CERTREQ_TEMPLATE): cert_box = QtGui.QHBoxLayout() cert_box.addWidget(QtGui.QLabel(m.cert_tmpl)) cert_box.addWidget(self._cert_tmpl) layout.addLayout(cert_box) else: layout.addWidget(QtGui.QLabel(m.ca_not_connected)) self._out_type.buttonClicked.connect(self._output_changed) buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) self._subject = QtGui.QLineEdit(settings[SETTINGS.SUBJECT]) self._subject.setValidator(SUBJECT_VALIDATOR) today = QtCore.QDate.currentDate() self._expire_date = QtGui.QDateTimeEdit(today.addYears(1)) self._expire_date.setDisplayFormat("yyyy-MM-dd") self._expire_date.setMinimumDate(today.addDays(1)) if not out_btns: layout.addWidget(QtGui.QLabel(m.no_output)) buttons.button(QtGui.QDialogButtonBox.Ok).setDisabled(True) else: if not settings.is_locked(SETTINGS.SUBJECT) and \ needs_subject([b.property('value') for b in out_btns]): subject_box = QtGui.QHBoxLayout() subject_box.addWidget(QtGui.QLabel(m.subject)) subject_box.addWidget(self._subject) layout.addLayout(subject_box) expire_date = QtGui.QHBoxLayout() expire_date.addWidget(QtGui.QLabel(m.expiration_date)) expire_date.addWidget(self._expire_date) layout.addLayout(expire_date) out_btn = self._out_type.checkedButton() if out_btn is None: out_btn = out_btns[0] out_btn.setChecked(True) self._output_changed(out_btn) buttons.accepted.connect(self._generate) buttons.rejected.connect(self.reject) layout.addWidget(buttons)
def _build_output(self, layout): layout.addWidget(self.section(m.output)) self._out_type = QtGui.QButtonGroup(self) self._out_pk = QtGui.QRadioButton(m.out_pk) self._out_pk.setProperty('value', 'pk') self._out_ssc = QtGui.QRadioButton(m.out_ssc) self._out_ssc.setProperty('value', 'ssc') self._out_csr = QtGui.QRadioButton(m.out_csr) self._out_csr.setProperty('value', 'csr') self._out_ca = QtGui.QRadioButton(m.out_ca) self._out_ca.setProperty('value', 'ca') self._out_type.addButton(self._out_pk) self._out_type.addButton(self._out_ssc) self._out_type.addButton(self._out_csr) out_btns = [] for button in self._out_type.buttons(): value = button.property('value') if value in settings[SETTINGS.SHOWN_OUT_FORMS]: layout.addWidget(button) out_btns.append(button) if value == settings[SETTINGS.OUT_TYPE]: button.setChecked(True) self._cert_tmpl = QtGui.QLineEdit(settings[SETTINGS.CERTREQ_TEMPLATE]) if 'ca' in settings[SETTINGS.SHOWN_OUT_FORMS]: if has_ca(): out_btns.append(self._out_ca) self._out_type.addButton(self._out_ca) self._out_ca.setChecked(True) layout.addWidget(self._out_ca) if not settings.is_locked(SETTINGS.CERTREQ_TEMPLATE): cert_box = QtGui.QHBoxLayout() cert_box.addWidget(QtGui.QLabel(m.cert_tmpl)) cert_box.addWidget(self._cert_tmpl) layout.addLayout(cert_box) else: layout.addWidget(QtGui.QLabel(m.ca_not_connected)) self._out_type.buttonClicked.connect(self._output_changed) buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) self._subject = QtGui.QLineEdit(settings[SETTINGS.SUBJECT]) self._subject.setValidator(SUBJECT_VALIDATOR) if not out_btns: layout.addWidget(QtGui.QLabel(m.no_output)) buttons.button(QtGui.QDialogButtonBox.Ok).setDisabled(True) else: if not settings.is_locked(SETTINGS.SUBJECT) and \ needs_subject([b.property('value') for b in out_btns]): subject_box = QtGui.QHBoxLayout() subject_box.addWidget(QtGui.QLabel(m.subject)) subject_box.addWidget(self._subject) layout.addLayout(subject_box) out_btn = self._out_type.checkedButton() if out_btn is None: out_btn = out_btns[0] out_btn.setChecked(True) self._output_changed(out_btn) buttons.accepted.connect(self._generate) buttons.rejected.connect(self.reject) layout.addWidget(buttons)