topen.py - tomb - the crypto undertaker
HTML git clone git://parazyd.org/tomb.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
topen.py (3862B)
---
1 import sys
2
3 from PyQt4 import QtCore, QtGui
4
5 from ui_open_tombfile import Ui_tombfile
6 from ui_open_keymethod import Ui_keymethod
7 from ui_open_success import Ui_success
8
9 from tomblib.tomb import Tomb
10 from tomblib.undertaker import Undertaker
11
12 try:
13 _fromUtf8 = QtCore.QString.fromUtf8
14 except AttributeError:
15 _fromUtf8 = lambda s: s
16
17 class TombfilePage(QtGui.QWizardPage):
18 def __init__(self, *args, **kwargs):
19 QtGui.QWizardPage.__init__(self, *args)
20 self.ui = Ui_tombfile()
21 self.ui.setupUi(self)
22 if 'tombfile' in kwargs and kwargs['tombfile'] is not None:
23 self.ui.tomb_line.setText(kwargs['tombfile'])
24 self.ui.tomb_browse.clicked.connect(self.on_tomb_location_clicked)
25 def on_tomb_location_clicked(self, *args, **kwargs):
26 filename = QtGui.QFileDialog.getOpenFileName(self, 'Select Tomb',
27 filter="Tomb (*.tomb)")
28 self.ui.tomb_line.setText(filename)
29
30 class MethodPage(QtGui.QWizardPage):
31 def __init__(self, *args, **kwargs):
32 QtGui.QWizardPage.__init__(self, *args, **kwargs)
33 self.ui = Ui_keymethod()
34 self.ui.setupUi(self)
35 self.group = group = QtGui.QButtonGroup()
36 for radio in self.children():
37 if type(radio) == QtGui.QRadioButton:
38 group.addButton(radio)
39
40 def initializePage(self):
41 self.found = Undertaker.check( str('near://' + self.wizard().get_tombfile()) ) or []
42 box = self.ui.radio_layout
43
44 for key in self.found:
45 radio = QtGui.QRadioButton('Automatically found: ' + key, parent=self)
46 radio.setChecked(True)
47 radio.setProperty('path', key)
48 box.insertWidget(0, radio)
49 self.group.addButton(radio)
50
51
52 def nextId(self):
53 '''Virtual method reimplemented to decide next page'''
54 if self.ui.fs.isChecked():
55 keyfile = QtGui.QFileDialog.getOpenFileName(self.wizard(), 'Key file',
56 filter="Tomb keys (*.tomb.key);;Buried keys (*.jpeg)")
57 if keyfile:
58 #TODO: check if this really is a success :)
59 if Tomb.open(self.wizard().get_tombfile(), keyfile): #bugs when wrong password
60 return TombOpenWizard.SUCCESS_PAGE
61 #else: #TODO: should alert the user that we failed
62 return TombOpenWizard.METHOD_PAGE
63 if self.ui.usb.isChecked():
64 return TombOpenWizard.USB_PAGE
65 print self.group.checkedButton().property('path').toPyObject()
66 return TombOpenWizard.SUCCESS_PAGE
67
68 class SuccessPage(QtGui.QWizardPage):
69 def __init__(self, *args, **kwargs):
70 QtGui.QWizardPage.__init__(self, *args, **kwargs)
71 self.ui = Ui_success()
72 self.ui.setupUi(self)
73
74 class TombOpenWizard(QtGui.QWizard):
75 TOMBFILE_PAGE=1
76 METHOD_PAGE=2
77 SUCCESS_PAGE=99
78 USB_PAGE=20
79 def __init__(self, *args, **kwargs):
80 QtGui.QWizard.__init__(self, *args)
81 self.setPage(TombOpenWizard.TOMBFILE_PAGE,
82 TombfilePage(self, tombfile = kwargs['tombfile']
83 if 'tombfile' in kwargs else None))
84 self.setPage(TombOpenWizard.METHOD_PAGE, MethodPage(self))
85 self.setPage(TombOpenWizard.SUCCESS_PAGE, SuccessPage(self))
86 if 'tombfile' in kwargs and kwargs['tombfile'] is not None:
87 self.setStartId(TombOpenWizard.METHOD_PAGE)
88
89 def get_tombfile(self):
90 page = self.page(TombOpenWizard.TOMBFILE_PAGE)
91 return page.ui.tomb_line.text()
92
93
94
95 def run_open_wizard():
96 app = QtGui.QApplication(sys.argv)
97 window = TombOpenWizard(tombfile=sys.argv[1] if len(sys.argv) > 1 else None)
98 window.show()
99 sys.exit(app.exec_())
100
101 if __name__ == '__main__':
102 Undertaker.undertakerexec = '/home/davide/coding/projects/tomb/src/undertaker'
103 run_open_wizard()
104
105
106
107
108
109