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:
@@ -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) \
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user