Philipp Hörist pushed to branch master at gajim / gajim
Commits: 4d43eacf by Daniel Brötzmann at 2019-04-05T15:19:35Z Rework Certificate dialog
- - - - -
2 changed files:
- + gajim/data/gui/certificate_dialog.ui - gajim/gtk/dialogs.py
Changes:
===================================== gajim/data/gui/certificate_dialog.ui ===================================== @@ -0,0 +1,446 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 --> +<interface> + <requires lib="gtk+" version="3.20"/> + <object class="GtkBox" id="certificate_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="border_width">18</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="spacing">12</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">application-certificate-symbolic</property> + <property name="icon_size">6</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_cert_for_account"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"><Certificate for account %s></property> + <property name="justify">center</property> + <style> + <class name="large-header"/> + </style> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_top">20</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Common Name (CN)</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_it_common_name"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Organization (O)</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_it_organization"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Organizational Unit (OU)</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_it_organizational_unit"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Serial Number</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_it_serial_number"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Common Name (CN)</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">6</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_ib_common_name"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">6</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Organization (O)</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_ib_organization"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">7</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Organizational Unit (OU)</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">8</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_ib_organizational_unit"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">8</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Issued on</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">10</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_issued_on"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">10</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Expires on</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">11</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_expires_on"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label"><></property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">11</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">baseline</property> + <property name="label" translatable="yes">SHA-1</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">13</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">baseline</property> + <property name="margin_top">6</property> + <property name="label" translatable="yes">SHA-256</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">15</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_sha1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="label"><></property> + <property name="wrap">True</property> + <property name="wrap_mode">char</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">14</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="data_sha256"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="label"><></property> + <property name="wrap">True</property> + <property name="wrap_mode">char</property> + <property name="selectable">True</property> + <property name="max_width_chars">42</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">16</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">baseline</property> + <property name="margin_top">6</property> + <property name="label" translatable="yes">Issued to</property> + <style> + <class name="bold"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">baseline</property> + <property name="margin_top">12</property> + <property name="label" translatable="yes">Issued by</property> + <style> + <class name="bold"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">5</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">baseline</property> + <property name="margin_top">12</property> + <property name="label" translatable="yes">Validity</property> + <style> + <class name="bold"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">9</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">baseline</property> + <property name="margin_top">12</property> + <property name="label" translatable="yes">Fingerprints</property> + <style> + <class name="bold"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">12</property> + <property name="width">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> +</interface>
===================================== gajim/gtk/dialogs.py ===================================== @@ -12,6 +12,8 @@ # You should have received a copy of the GNU General Public License # along with Gajim. If not, see http://www.gnu.org/licenses/.
+from datetime import datetime + from collections import namedtuple
from gi.repository import Gtk @@ -23,7 +25,6 @@ from gajim.common.i18n import _ from gajim.common.const import ButtonAction
from gajim.gtk.util import get_builder -from gajim.gtk.util import load_icon
class DialogButton(namedtuple('DialogButton', ('response text callback args ' @@ -880,47 +881,49 @@ class DoubleInputDialog: self.cancel_handler()
-class CertificatDialog(InformationDialog): +class CertificateDialog(Gtk.ApplicationWindow): def __init__(self, transient_for, account, cert): + Gtk.ApplicationWindow.__init__(self) + self.set_name('CertificateDialog') + self.set_application(app.app) + self.set_show_menubar(False) + self.set_resizable(False) + self.set_position(Gtk.WindowPosition.CENTER) + self.set_title(_('Certificate')) + + self._ui = get_builder('certificate_dialog.ui') + self.add(self._ui.certificate_box) + issuer = cert.get_issuer() subject = cert.get_subject() - InformationDialog.__init__(self, - _('Certificate for account %s') % account, _('''<b>Issued to:</b> -Common Name (CN): %(scn)s -Organization (O): %(sorg)s -Organizationl Unit (OU): %(sou)s -Serial Number: %(sn)s - -<b>Issued by:</b> -Common Name (CN): %(icn)s -Organization (O): %(iorg)s -Organizationl Unit (OU): %(iou)s - -<b>Validity:</b> -Issued on: %(io)s -Expires on: %(eo)s - -<b>Fingerprint</b> -SHA-1 Fingerprint: %(sha1)s - -SHA-256 Fingerprint: %(sha256)s -''') % { - 'scn': subject.commonName, 'sorg': subject.organizationName, - 'sou': subject.organizationalUnitName, - 'sn': cert.get_serial_number(), 'icn': issuer.commonName, - 'iorg': issuer.organizationName, - 'iou': issuer.organizationalUnitName, - 'io': cert.get_notBefore().decode('utf-8'), - 'eo': cert.get_notAfter().decode('utf-8'), - 'sha1': cert.digest('sha1').decode('utf-8'), - 'sha256': cert.digest('sha256').decode('utf-8')}) - surface = load_icon('application-certificate', self, size=32) - if surface is not None: - img = Gtk.Image.new_from_surface(surface) - img.show_all() - self.set_image(img) + + self._ui.label_cert_for_account.set_text( + _('Certificate for account\n%s') % account) + + self._ui.data_it_common_name.set_text(subject.commonName) + self._ui.data_it_organization.set_text(subject.organizationName) + self._ui.data_it_organizational_unit.set_text( + subject.organizationalUnitName) + self._ui.data_it_serial_number.set_text(str(cert.get_serial_number())) + + self._ui.data_ib_common_name.set_text(issuer.commonName) + self._ui.data_ib_organization.set_text(issuer.organizationName) + self._ui.data_ib_organizational_unit.set_text( + issuer.organizationalUnitName) + + issued = datetime.strptime(cert.get_notBefore().decode('ascii'), '%Y%m%d%H%M%SZ') + issued = issued.strftime('%B %d, %Y, %H:%M:%S %z') + self._ui.data_issued_on.set_text(issued) + expires = datetime.strptime(cert.get_notAfter().decode('ascii'), '%Y%m%d%H%M%SZ') + expires = expires.strftime('%B %d, %Y, %H:%M:%S %z') + self._ui.data_expires_on.set_text(expires) + + self._ui.data_sha1.set_text(cert.digest('sha1').decode('utf-8')) + self._ui.data_sha256.set_text(cert.digest('sha256').decode('utf-8')) + self.set_transient_for(transient_for) - self.set_title(_('Certificate for account %s') % account) + self._ui.connect_signals(self) + self.show_all()
class SSLErrorDialog(ConfirmationDialogDoubleCheck): @@ -939,7 +942,7 @@ class SSLErrorDialog(ConfirmationDialogDoubleCheck): area.pack_start(b, True, True, 0)
def on_cert_clicked(self, button): - CertificatDialog(self, self.account, self.cert) + CertificateDialog(self, self.account, self.cert)
class ChangePasswordDialog(Gtk.Dialog):
View it on GitLab: https://dev.gajim.org/gajim/gajim/commit/4d43eacfd07b7a4d75cdffbba3448e49244...