Code cleanup: Pursuing a better coding style using pylint
git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@219 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
@@ -18,47 +18,6 @@ except:
|
|||||||
|
|
||||||
from pace_gui_globals import *
|
from pace_gui_globals import *
|
||||||
|
|
||||||
at_chat_strings = [
|
|
||||||
"Altersverifikation", #"Age Verification",
|
|
||||||
"Gemeindeschlüssel Verifikation", #Community ID Verification
|
|
||||||
"Pseudonymfunktion", #"Restrictied Identification",
|
|
||||||
"Priviligiertes Terminal", #"Privileged Terminal",
|
|
||||||
"Verwendung der CAN", #"CAN allowed",
|
|
||||||
"PIN Managment",
|
|
||||||
"Zertifikat einspielen", #"Install Certificate",
|
|
||||||
"Qualifiziertes Zertifikat einspielen", #"Install Qualified Certificate",
|
|
||||||
"Dokumenttyp lesen", #"Read DG 1",
|
|
||||||
"Staat lesen", #"Read DG 2",
|
|
||||||
"Ablaufdatum lesen", #"Read DG 3",
|
|
||||||
"Vorname lesen", #"Read DG 4",
|
|
||||||
"Nachname lesen", #"Read DG 5",
|
|
||||||
u"Künstlername lesen", #"Read DG 6",
|
|
||||||
"Doktorgrad lesen", #"Read DG 7",
|
|
||||||
"Geburtsdatum lesen", #"Read DG 8",
|
|
||||||
"Geburtsort lesen", #"Read DG 9",
|
|
||||||
u"Ungültig", #"Read DG 10",
|
|
||||||
u"Ungültig", #"Read DG 11",
|
|
||||||
u"Ungültig", #"Read DG 12",
|
|
||||||
u"Ungültig", #"Read DG 13",
|
|
||||||
u"Ungültig", #"Read DG 14",
|
|
||||||
u"Ungültig", #"Read DG 15",
|
|
||||||
u"Ungültig", #"Read DG 16",
|
|
||||||
"Adresse lesen", #"Read DG 17",
|
|
||||||
u"Gemeindeschlüssel lesen", #"Read DG 18",
|
|
||||||
u"Ungültig", #"Read DG 19",
|
|
||||||
u"Ungültig", #"Read DG 20",
|
|
||||||
u"Ungültig", #"Read DG 21",
|
|
||||||
u"Ungültig", #"RFU",
|
|
||||||
u"Ungültig", #"RFU",
|
|
||||||
u"Ungültig", #"RFU",
|
|
||||||
u"Ungültig", #"RFU",
|
|
||||||
u"Ungültig", #"Write DG 21",
|
|
||||||
u"Ungültig", #"Write DG 20",
|
|
||||||
u"Ungültig", #"Write DG 19",
|
|
||||||
u"Gemeindeschlüssel schreiben", #"Write DG 18",
|
|
||||||
u"Adresse schreiben", #"Write DG 17"
|
|
||||||
]
|
|
||||||
|
|
||||||
class MokoWindow(gtk.Window):
|
class MokoWindow(gtk.Window):
|
||||||
"""
|
"""
|
||||||
Base class for all our dialogues. It's a simple gtk.Window, with a title at
|
Base class for all our dialogues. It's a simple gtk.Window, with a title at
|
||||||
@@ -81,7 +40,6 @@ class MokoWindow(gtk.Window):
|
|||||||
#self.set_resizable(False)
|
#self.set_resizable(False)
|
||||||
|
|
||||||
#Main VBox, which consists of the title, the body, and the buttons
|
#Main VBox, which consists of the title, the body, and the buttons
|
||||||
#The size of the elements is inhomogenous and the spacing between elements is 5 pixel
|
|
||||||
self.__vb = gtk.VBox(False, 5)
|
self.__vb = gtk.VBox(False, 5)
|
||||||
self.add(self.__vb)
|
self.add(self.__vb)
|
||||||
|
|
||||||
@@ -125,14 +83,17 @@ class MokoWindow(gtk.Window):
|
|||||||
self.__vb.pack_start(hbox, False, False)
|
self.__vb.pack_start(hbox, False, False)
|
||||||
|
|
||||||
def btnBack_clicked(self, widget, data=None):
|
def btnBack_clicked(self, widget, data=None):
|
||||||
if self.predecessor == None:
|
"""Go back to the previous window. If there is no previous window,
|
||||||
|
do nothing"""
|
||||||
|
if self.predecessor is None:
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
else:
|
else:
|
||||||
self.predecessor.show_all()
|
self.predecessor.show_all()
|
||||||
self.hide()
|
self.hide()
|
||||||
|
|
||||||
def btnForward_clicked(self, widget, data=None):
|
def btnForward_clicked(self, widget, data=None):
|
||||||
if self.successor == None:
|
"""Go to the next window. If there is no next window, do nothing"""
|
||||||
|
if self.successor is None:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.successor.show_all()
|
self.successor.show_all()
|
||||||
@@ -149,7 +110,7 @@ class CertificateDescriptionWindow(MokoWindow):
|
|||||||
self.successor = CVCWindow(binCert, self)
|
self.successor = CVCWindow(binCert, self)
|
||||||
|
|
||||||
#Display the validity period:
|
#Display the validity period:
|
||||||
cvc = pace.d2i_CV_CERT(binCert) #FIXME
|
cvc = pace.d2i_CV_CERT(binCert)
|
||||||
effective_date = self.formatDate(pace.get_effective_date(cvc))
|
effective_date = self.formatDate(pace.get_effective_date(cvc))
|
||||||
expiration_date = self.formatDate(pace.get_expiration_date(cvc))
|
expiration_date = self.formatDate(pace.get_expiration_date(cvc))
|
||||||
validity_period = effective_date + " - " + expiration_date
|
validity_period = effective_date + " - " + expiration_date
|
||||||
@@ -161,12 +122,12 @@ class CertificateDescriptionWindow(MokoWindow):
|
|||||||
issuerName = pace.get_issuer_name(desc)
|
issuerName = pace.get_issuer_name(desc)
|
||||||
issuerURL = pace.get_issuer_url(desc)
|
issuerURL = pace.get_issuer_url(desc)
|
||||||
self.addRow("Zertifikatsaussteller:", issuerName)
|
self.addRow("Zertifikatsaussteller:", issuerName)
|
||||||
if issuerURL != None:
|
if issuerURL is not None:
|
||||||
self.addRow("", issuerURL, True)
|
self.addRow("", issuerURL, True)
|
||||||
subjectName = pace.get_subject_name(desc)
|
subjectName = pace.get_subject_name(desc)
|
||||||
subjectURL = pace.get_subject_url(desc)
|
subjectURL = pace.get_subject_url(desc)
|
||||||
self.addRow("Zertifikatsinhaber:", subjectName)
|
self.addRow("Zertifikatsinhaber:", subjectName)
|
||||||
if subjectURL != None:
|
if subjectURL is not None:
|
||||||
self.addRow("", subjectURL, True)
|
self.addRow("", subjectURL, True)
|
||||||
self.set_focus(None)
|
self.set_focus(None)
|
||||||
|
|
||||||
@@ -184,12 +145,12 @@ class CertificateDescriptionWindow(MokoWindow):
|
|||||||
assert(isinstance(date, basestring))
|
assert(isinstance(date, basestring))
|
||||||
assert(len(date) == 6)
|
assert(len(date) == 6)
|
||||||
|
|
||||||
yy = date[:2]
|
year = date[:2]
|
||||||
mm = date[2:4]
|
month = date[2:4]
|
||||||
dd = date[4:6] #Cut off trailing \0
|
day = date[4:6] #Cut off trailing \0
|
||||||
|
|
||||||
#Implicit assumption: 2000 <= year < 3000
|
#Implicit assumption: 2000 <= year < 3000
|
||||||
return dd + "." + mm + "." + "20" + yy
|
return day + "." + month + "." + "20" + year
|
||||||
|
|
||||||
def formatTOU(self, terms):
|
def formatTOU(self, terms):
|
||||||
|
|
||||||
@@ -198,7 +159,7 @@ class CertificateDescriptionWindow(MokoWindow):
|
|||||||
# lbl = gtk.Label(s)
|
# lbl = gtk.Label(s)
|
||||||
# lbl.set_alignment(0.0, 0.0)
|
# lbl.set_alignment(0.0, 0.0)
|
||||||
# lbl.set_width_chars(60)
|
# lbl.set_width_chars(60)
|
||||||
# lbl.set_line_wrap(True) #FIXME: Doesn't work on the Moko
|
# lbl.set_line_wrap(True) #XXX: Doesn't work on the Moko
|
||||||
# lbl.modify_font(pango.FontDescription("bold"))
|
# lbl.modify_font(pango.FontDescription("bold"))
|
||||||
# self.body.pack_start(gtk.HSeparator())
|
# self.body.pack_start(gtk.HSeparator())
|
||||||
# self.body.pack_start(lbl, False, False, 2)
|
# self.body.pack_start(lbl, False, False, 2)
|
||||||
@@ -257,8 +218,8 @@ class CVCWindow(MokoWindow):
|
|||||||
if (i % 8 == 0):
|
if (i % 8 == 0):
|
||||||
j += 1
|
j += 1
|
||||||
if self.rel_auth[self.rel_auth_len - j] & (1 << (i % 8)):
|
if self.rel_auth[self.rel_auth_len - j] & (1 << (i % 8)):
|
||||||
chk = customCheckButton(at_chat_strings[i], i, self.body)
|
chk = customCheckButton(AT_CHAT_STRINGS[i], i, self.body)
|
||||||
self.access_rights.append(chk)
|
self.access_rights.append(chk)
|
||||||
|
|
||||||
# self.show_all()
|
# self.show_all()
|
||||||
|
|
||||||
@@ -314,7 +275,7 @@ class customCheckButton(object):
|
|||||||
return self.chk.get_active()
|
return self.chk.get_active()
|
||||||
|
|
||||||
class PinpadGTK:
|
class PinpadGTK:
|
||||||
"""This a simple GTK based GUI to enter a PIN"""
|
"""This a simple GTK based GUI to enter a PIN/PUK/CAN"""
|
||||||
|
|
||||||
def __init__(self, secret="pin", chat=None, cert=None):
|
def __init__(self, secret="pin", chat=None, cert=None):
|
||||||
btn_names = ["btnOne", "btnTwo", "btnThree", "btnFour", "btnFive",
|
btn_names = ["btnOne", "btnTwo", "btnThree", "btnFour", "btnFive",
|
||||||
@@ -386,8 +347,8 @@ class PinpadGTK:
|
|||||||
#Change the font for the buttons
|
#Change the font for the buttons
|
||||||
#For this you have to retrieve the label of each button and change
|
#For this you have to retrieve the label of each button and change
|
||||||
#its font
|
#its font
|
||||||
for name in btn_names:
|
for btn_name in btn_names:
|
||||||
btn = self.builder.get_object(name)
|
btn = self.builder.get_object(btn_name)
|
||||||
if btn.get_use_stock():
|
if btn.get_use_stock():
|
||||||
lbl = btn.child.get_children()[1]
|
lbl = btn.child.get_children()[1]
|
||||||
elif isinstance(btn.child, gtk.Label):
|
elif isinstance(btn.child, gtk.Label):
|
||||||
@@ -395,7 +356,7 @@ class PinpadGTK:
|
|||||||
else:
|
else:
|
||||||
raise ValueError("Button does not have a label")
|
raise ValueError("Button does not have a label")
|
||||||
|
|
||||||
if (name == "btnOk" or name == "btnDel"):
|
if (btn_name == "btnOk" or btn_name == "btnDel"):
|
||||||
lbl.modify_font(pango.FontDescription("sans 14"))
|
lbl.modify_font(pango.FontDescription("sans 14"))
|
||||||
else:
|
else:
|
||||||
lbl.modify_font(pango.FontDescription("sans 18"))
|
lbl.modify_font(pango.FontDescription("sans 18"))
|
||||||
@@ -408,6 +369,7 @@ class PinpadGTK:
|
|||||||
self.window.connect("destroy", self.shutdown)
|
self.window.connect("destroy", self.shutdown)
|
||||||
|
|
||||||
def shutdown(self, widget):
|
def shutdown(self, widget):
|
||||||
|
"""Stop the cardChecker thread before exiting the application"""
|
||||||
self.cardChecker.stop()
|
self.cardChecker.stop()
|
||||||
self.cardChecker.join()
|
self.cardChecker.join()
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
@@ -437,12 +399,16 @@ class PinpadGTK:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def btnOk_clicked(self, widget):
|
def btnOk_clicked(self, widget):
|
||||||
|
"""Pass the entered secret to pace-tool. If pace-tool is run
|
||||||
|
sucessfully exit, otherwise restart the PIN entry"""
|
||||||
|
|
||||||
env_args = os.environ
|
env_args = os.environ
|
||||||
cmd = ["pace-tool"] #Contains the command and all the parameters for our subproccess
|
|
||||||
|
|
||||||
#We have to select the type of secret to use via a command line parameter
|
#cmd contains the command and all the parameters for our subproccess
|
||||||
#and provide the actual secret via an environment variable
|
cmd = ["pace-tool"]
|
||||||
|
|
||||||
|
#We have to select the type of secret to use via a command line
|
||||||
|
#parameter and provide the actual secret via an environment variable
|
||||||
if self.secret == "pin" or self.secret == "transport":
|
if self.secret == "pin" or self.secret == "transport":
|
||||||
cmd.append("--pin")
|
cmd.append("--pin")
|
||||||
env_args["PIN"] = self.pin
|
env_args["PIN"] = self.pin
|
||||||
@@ -465,8 +431,10 @@ class PinpadGTK:
|
|||||||
#Try to call pace-tool. This is a blocking call. An animation is being
|
#Try to call pace-tool. This is a blocking call. An animation is being
|
||||||
#shown while the subprocess is running
|
#shown while the subprocess is running
|
||||||
try:
|
try:
|
||||||
self.cardChecker.pause() #Stop polling the card while PACE is running
|
#Stop polling the card while PACE is running
|
||||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=env_args, close_fds=True)
|
self.cardChecker.pause()
|
||||||
|
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=env_args,
|
||||||
|
close_fds=True)
|
||||||
except OSError, e:
|
except OSError, e:
|
||||||
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
|
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
|
||||||
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,
|
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,
|
||||||
@@ -492,7 +460,7 @@ class PinpadGTK:
|
|||||||
line = p.stdout.readline()
|
line = p.stdout.readline()
|
||||||
while line:
|
while line:
|
||||||
while gtk.events_pending():
|
while gtk.events_pending():
|
||||||
gtk.main_iteration()
|
gtk.main_iteration()
|
||||||
line = p.stdout.readline()
|
line = p.stdout.readline()
|
||||||
|
|
||||||
#Get the return value of the pace-tool process
|
#Get the return value of the pace-tool process
|
||||||
@@ -504,15 +472,17 @@ class PinpadGTK:
|
|||||||
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
|
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
|
||||||
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO,
|
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO,
|
||||||
gtk.BUTTONS_OK, "PIN wurde korrekt eingegeben")
|
gtk.BUTTONS_OK, "PIN wurde korrekt eingegeben")
|
||||||
res = popup.run()
|
popup.run()
|
||||||
popup.destroy()
|
popup.destroy()
|
||||||
self.shutdown(None) #FIXME
|
#XXX: Actually we should return to the application that started
|
||||||
|
#the PIN entry
|
||||||
|
self.shutdown(None)
|
||||||
else:
|
else:
|
||||||
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
|
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
|
||||||
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING,
|
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING,
|
||||||
gtk.BUTTONS_OK,
|
gtk.BUTTONS_OK,
|
||||||
"PIN wurde falsch eingegeben. Bitte erneut versuchen")
|
"PIN wurde falsch eingegeben. Bitte erneut versuchen")
|
||||||
res = popup.run()
|
popup.run()
|
||||||
popup.destroy()
|
popup.destroy()
|
||||||
self.output.set_text(self.secret_len * "_")
|
self.output.set_text(self.secret_len * "_")
|
||||||
self.pin = ""
|
self.pin = ""
|
||||||
@@ -527,7 +497,7 @@ class PinpadGTK:
|
|||||||
|
|
||||||
class cardChecker(Thread):
|
class cardChecker(Thread):
|
||||||
""" This class searches for a card with a given ATR and displays
|
""" This class searches for a card with a given ATR and displays
|
||||||
wether or not it was found on the label of a widget """
|
wether or not using a label and an image """
|
||||||
|
|
||||||
def __init__(self, lbl, img, atr, intervall=1):
|
def __init__(self, lbl, img, atr, intervall=1):
|
||||||
Thread.__init__(self)
|
Thread.__init__(self)
|
||||||
@@ -544,25 +514,24 @@ class cardChecker(Thread):
|
|||||||
it run on the OpenMoko yet. Therefor we call opensc-tool instead, which
|
it run on the OpenMoko yet. Therefor we call opensc-tool instead, which
|
||||||
leads to higher delays """
|
leads to higher delays """
|
||||||
|
|
||||||
try:
|
proc = subprocess.Popen(["opensc-tool", "--atr"],
|
||||||
p = subprocess.Popen(["opensc-tool", "--atr"], stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
|
||||||
stderr=subprocess.PIPE, close_fds=True)
|
|
||||||
|
|
||||||
line = p.stdout.readline().rstrip()
|
line = proc.stdout.readline().rstrip()
|
||||||
if line == self.targetATR:
|
if line == self.targetATR:
|
||||||
gobject.idle_add(self.lbl.set_label, STR_CARD_FOUND)
|
gobject.idle_add(self.lbl.set_label, STR_CARD_FOUND)
|
||||||
gobject.idle_add(self.img.set_from_file, FILE_CARD_FOUND)
|
gobject.idle_add(self.img.set_from_file, FILE_CARD_FOUND)
|
||||||
else:
|
else:
|
||||||
gobject.idle_add(self.lbl.set_label, STR_NO_CARD)
|
gobject.idle_add(self.lbl.set_label, STR_NO_CARD)
|
||||||
gobject.idle_add(self.img.set_from_file, FILE_NO_CARD)
|
gobject.idle_add(self.img.set_from_file, FILE_NO_CARD)
|
||||||
|
|
||||||
except OSError, e:
|
|
||||||
pass #FIXME
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
"""Main loop: Poll the card if the thread is not paused or finished"""
|
||||||
while (True):
|
while (True):
|
||||||
if self._finished.isSet(): return
|
if self._finished.isSet():
|
||||||
if self._paused.isSet(): continue
|
return
|
||||||
|
if self._paused.isSet():
|
||||||
|
continue
|
||||||
self.__cardCheck()
|
self.__cardCheck()
|
||||||
self._finished.wait(self.intervall)
|
self._finished.wait(self.intervall)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user