Added the neccessary calls to pace-tool for changing the PIN

git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@245 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
oepen
2010-08-05 20:20:18 +00:00
parent 0cf65896a5
commit 0bb8a0f393
3 changed files with 118 additions and 12 deletions

View File

@@ -8,7 +8,8 @@ uidir = $(datadir)/eid_gui
ui_DATA = pinpad.glade ui_DATA = pinpad.glade
appdir = $(datadir)/applications/ appdir = $(datadir)/applications/
app_DATA = pace-gui.desktop app_DATA = pace-gui.desktop \
change-pin.desktop
EXTRA_DIST = \ EXTRA_DIST = \
$(bin_SCRIPTS) \ $(bin_SCRIPTS) \

View File

@@ -1,7 +1,7 @@
[Desktop Entry] [Desktop Entry]
Version=@VERSION@ Version=@VERSION@
Encoding=UTF-8 Encoding=UTF-8
Name=eID Name=PIN ändern
Comment=GUI zum Ändern der eID-PIN Comment=GUI zum Ändern der eID-PIN
Exec=eid_gui.py Exec=eid_gui.py
Icon=@prefix@/share/eid_gui/images/OpenPACElogo.png Icon=@prefix@/share/eid_gui/images/OpenPACElogo.png

View File

@@ -485,8 +485,8 @@ class PinpadGTK(object):
raise ValueError("Unknown secret type: %s" % self.secret) raise ValueError("Unknown secret type: %s" % self.secret)
#If we have a CHAT, we pass it to pace-tool #If we have a CHAT, we pass it to pace-tool
if (self.chat): #if (self.chat):
cmd.append("--chat=" + self.chat) # cmd.append("--chat=" + self.chat)
cmd.append("-v") cmd.append("-v")
@@ -572,16 +572,17 @@ class PINChanger(PinpadGTK):
if self.states[self.state] == "old_pin": if self.states[self.state] == "old_pin":
#Try to perform PACE with the card to see if the PIN is correct #Try to perform PACE with the card to see if the PIN is correct
#TODO: Run pace-tool if self.__check_old_pin():
self.__old_pin = "" self.__old_pin = pin
return True return True
else:
return False
elif self.states[self.state] == "first_new_pin": elif self.states[self.state] == "first_new_pin":
self.__new_pin1 = pin self.__new_pin1 = pin
return True return True
elif self.states[self.state] == "second_new_pin": elif self.states[self.state] == "second_new_pin":
if pin == self.__new_pin1: if pin == self.__new_pin1:
self.__change_pin() return self.__change_pin()
return True
else: else:
self.__new_pin1 = "" self.__new_pin1 = ""
return False return False
@@ -627,12 +628,116 @@ class PINChanger(PinpadGTK):
btn_ok.set_sensitive(False) btn_ok.set_sensitive(False)
def __check_old_pin(self):
"""Run PACE with the old pin to see if it is correct"""
#cmd contains the command and all the parameters for our subproccess
cmd = ["pace-tool", "--pin=" + self.pin]
print cmd
#Try to call pace-tool. This is a blocking call. An animation is being
#shown while the subprocess is running
try:
#Stop polling the card while PACE is running
self.cardChecker.pause()
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
except OSError:
popup = MsgBox(self.window, "pace-tool wurde nicht gefunden",
"error")
popup.run()
popup.destroy()
self.cardChecker.resume() #Restart cardChecker
return False
#Show the animation to indicate that the program is not dead
waiting = gtk.Window(gtk.WINDOW_POPUP)
animation = gtk.gdk.PixbufAnimation(IMAGES["wait"])
img = gtk.Image()
img.set_from_animation(animation)
waiting.add(img)
waiting.set_position(gtk.WIN_POS_CENTER_ALWAYS)
waiting.set_modal(True)
waiting.set_transient_for(self.window)
waiting.set_decorated(False)
waiting.show_all()
#Try to keep the GUI responsive by taking care of the event queue
line = proc.stdout.readline()
while line:
while gtk.events_pending():
gtk.main_iteration()
line = proc.stdout.readline()
#Get the return value of the pace-tool process
ret = proc.poll()
waiting.destroy()
self.cardChecker.resume()
if (ret == 0):
return True
else:
popup = MsgBox(self.window, "PIN wurde falsch eingegeben", "error")
popup.run()
popup.destroy()
return False
def __change_pin(self): def __change_pin(self):
#TODO: Run pace-tool """Change the pin using pace-tool"""
pass
#cmd contains the command and all the parameters for our subproccess
cmd = ["pace-tool", "--pin=" + self.__old_pin,
"--new-pin=" + self.__new_pin1]
print cmd
#Try to call pace-tool. This is a blocking call. An animation is being
#shown while the subprocess is running
try:
#Stop polling the card while PACE is running
self.cardChecker.pause()
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
except OSError:
popup = MsgBox(self.window, "pace-tool wurde nicht gefunden",
"error")
popup.run()
popup.destroy()
self.cardChecker.resume() #Restart cardChecker
return
#Show the animation to indicate that the program is not dead
waiting = gtk.Window(gtk.WINDOW_POPUP)
animation = gtk.gdk.PixbufAnimation(IMAGES["wait"])
img = gtk.Image()
img.set_from_animation(animation)
waiting.add(img)
waiting.set_position(gtk.WIN_POS_CENTER_ALWAYS)
waiting.set_modal(True)
waiting.set_transient_for(self.window)
waiting.set_decorated(False)
waiting.show_all()
#Try to keep the GUI responsive by taking care of the event queue
line = proc.stdout.readline()
while line:
while gtk.events_pending():
gtk.main_iteration()
line = proc.stdout.readline()
#Get the return value of the pace-tool process
ret = proc.poll()
waiting.destroy()
self.cardChecker.resume()
if (ret == 0):
return True
else:
popup = MsgBox(self.window, "Ein Fehler ist aufgetreten", "error")
popup.run()
popup.destroy()
return False
def __success(self): def __success(self):
suc = MsgBox(self.window, u"PIN wurde erfolgreich geändert", "info") suc = MsgBox(self.window, u"PIN wurde erfolgreich geändert", "apply")
suc.run() suc.run()
suc.destroy() suc.destroy()
self.cardChecker.stop()
gtk.main_quit() #Actually we should return to the caller of the window gtk.main_quit() #Actually we should return to the caller of the window