Пример #1
0
 def initUi(self):
     """
         Initialize UI components.
     """
     SaveDialog.initUi(self)
     
     logging.info("initializing UI components.")
     
     # create lables
     name_label = QtGui.QLabel("<b>" + tr("Name:") + "</b>")
     description_label = QtGui.QLabel("<b>" + tr("Description:") + "</b>")
     icon_label = QtGui.QLabel("<b>" + tr("Icon:") + "</b>")
     
     self._layout_gl.addWidget(name_label, 0, 0)
     self._layout_gl.addWidget(description_label, 1, 0)
     self._layout_gl.addWidget(icon_label, 2, 0)
     
     # create inputs
     self._name = QtGui.QLineEdit()
     self._desc = QtGui.QLineEdit()
     self._icons = QtGui.QComboBox()
     
     self._layout_gl.addWidget(self._name, 0, 1)
     self._layout_gl.addWidget(self._desc, 1, 1)
     self._layout_gl.addWidget(self._icons, 2, 1)
Пример #2
0
 def saveFile(self):
     dialog = SaveDialog()
     dialog.exec_()
     head, tail = os.path.split(self.input_name)
     file_prefix = tail.split('.')[0]
     worker = VideoWriterThread(self.cap, self.frame_objects, self.log,
                                file_prefix, dialog.getSaveDirectory(),
                                dialog.isSaveImage, dialog.isSaveVideo)
     worker.start()
Пример #3
0
 def initConnections(self):
     """
         Inialize event handlers.
     """
     SaveDialog.initConections(self)
     
     # when something changed, enable save button
     self._name.textChanged.connect(self.enableSaveButton)
     self._desc.textChanged.connect(self.enableSaveButton)
     self._icons.currentIndexChanged.connect(self.enableSaveButton)
Пример #4
0
    def __init__(self, parent=None, key=None):
        super(PwWindow, self).__init__(parent)
        self.key = key
        self.save_dialog = SaveDialog(parent=self)

        # load and show the user interface created with the designer.
        uic.loadUi('../pw_window.ui', self)

        self.add_button.clicked.connect(self.add_row)
        self.remove_button.clicked.connect(self.remove_row)
        self.toggle_button.clicked.connect(self.toggle_password)
        
        self.load_data(FILE_NAME, key)
        
        self.show()
Пример #5
0
    def initConections(self):
        """
            Initialize all connections, handling events.
            
            @requires: initUI(), setPassword() first
        """
        SaveDialog.initConections(self)
        
        # when something changed, enable save button
        self._title.textChanged.connect(self.enableSaveButton)
        self._username.textChanged.connect(self.enableSaveButton)
        self._passwd.textChanged.connect(self.enableSaveButton)
        self._url.textChanged.connect(self.enableSaveButton)
        self._comment.textChanged.connect(self.enableSaveButton)
        self._att_name.textChanged.connect(self.enableSaveButton)
        self._e_date_edit.dateChanged.connect(self.enableSaveButton)
        self._group.currentIndexChanged.connect(self.enableSaveButton)
        
        # never checked
        self._e_date_never.stateChanged.connect(self.enDisExpDate)
        self._e_date_never.stateChanged.connect(self.enableSaveButton)

        # show QR
        self._qr_button.clicked.connect(self.showQrCode)

        # open attachment
        self._att_button.clicked.connect(self.loadAttachment)
        
        # delete attachment
        self._att_del_button.clicked.connect(self.delAttachment)
        
        # save attachment to disk
        self._att_save_button.clicked.connect(self.saveAttachment)
        
        # open attachment file
        self._att_open_button.clicked.connect(self.openAttachment)
        
        # attachment input label
        self._att_name.textChanged.connect(self.enableAttEditAndButton)
        
        # show/hide password
        self._show_passwd_check.stateChanged.connect(self.setVisibilityPass)
Пример #6
0
    def save_triggered(self):
        """creates the dialog that manages the whole saving process"""

        selected_nodes = []
        if len(self.nodes_at_last_export) == 0:
            selected_nodes = self.nodes
        elif self.nodes_at_last_export == self.nodes:
            # no nodes added or removed
            selected_nodes = self.last_exported_nodes
        else:
            selected_nodes = self.nodes

        nodes_dict = {}  # {node: selected}
        for n in self.nodes:  # add all nodes, unselected
            nodes_dict[n] = False
        for n in selected_nodes:  # select
            nodes_dict[n] = True

        save_dialog = SaveDialog(self,
                                 nodes_dict=nodes_dict,
                                 last_export_dir=self.last_export_path)
        save_dialog.exec_()

        self.nodes_at_last_export = self.nodes.copy()
Пример #7
0
 def save_triggered(self):
     # the dialog does the whole saving process
     save_dialog = SaveDialog(self, self.nodes)
     save_dialog.exec_()
Пример #8
0
class PwWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None, key=None):
        super(PwWindow, self).__init__(parent)
        self.key = key
        self.save_dialog = SaveDialog(parent=self)

        # load and show the user interface created with the designer.
        uic.loadUi('../pw_window.ui', self)

        self.add_button.clicked.connect(self.add_row)
        self.remove_button.clicked.connect(self.remove_row)
        self.toggle_button.clicked.connect(self.toggle_password)
        
        self.load_data(FILE_NAME, key)
        
        self.show()

    def add_row(self):
        self.tableWidget.insertRow(self.tableWidget.rowCount())

    def remove_row(self):
        self.tableWidget.removeRow(self.tableWidget.currentRow())
    
    def toggle_password(self):
        item = self.tableWidget.currentItem()
        if item == None or item.column() != 1:
            return
        print(item.text())
        print(item.text() == '****')
        if item.text() == '****':
            print(str(item.data(1)))
            item.setText(str(item.data(1)))
        else:
            item.setData(1, item.text())
            item.setText('****')
        
    def closeEvent(self, event):
        if self.save_dialog.exec_():
            self.save_data(FILE_NAME, self.key)
        
        event.accept()

    def get_data(self):
        data = []
        
        for row in range(self.tableWidget.rowCount()):
            if self.tableWidget.item(row, 0) == None or\
               self.tableWidget.item(row, 1) == None:
                continue
            
            data_pw = self.tableWidget.item(row, 1).data(1)
            text_pw = self.tableWidget.item(row, 1).text()
            print(data_pw)
            data.append({
                    
                "accountid": self.tableWidget.item(row, 0).text(),
                "password": text_pw if text_pw != '****' else data_pw
            })

        return data

    def load_data(self, filename, key):
        try:
            with open(filename, 'rb') as file_in:
                nonce, tag, ciphertext = [ file_in.read(x) for x in (16, 16, -1) ]
                
                # let's assume that the key is somehow available again
                cipher = AES.new(key, AES.MODE_EAX, nonce)
                jsontext = cipher.decrypt_and_verify(ciphertext, tag)
                data = json.loads(jsontext)
                print(data)
                self.refresh_table(data)
        except Exception as e:
            print("Your file contains errors")
            print(e)
            
    def save_data(self, filename, key):
        data = self.get_data()
        print(data)
        cipher = AES.new(key, AES.MODE_EAX)
        ciphertext, tag = cipher.encrypt_and_digest(json.dumps(data).encode(KEY_ENCODING))
            
        try:
            with open(FILE_NAME, "wb") as file_out:
                [ file_out.write(x) for x in (cipher.nonce, tag, ciphertext) ]
        except Exception as e:
            print("Your file contains errors")
            print(e)

    def refresh_table(self, data):
        def load_value(row, column, value):
            self.tableWidget.setItem(row, column, QTableWidgetItem(str(value), 0))

        [self.tableWidget.removeRow(0) for x in range(self.tableWidget.rowCount())]
        for index, entry in enumerate(data):
            self.tableWidget.insertRow(index)
            self.tableWidget.setItem(index, 0, QTableWidgetItem(str(entry['accountid']), 0))
            pw_item = QTableWidgetItem()
            pw_item.setText('****')
            
            pw_item.setData(1, str(entry['password']))
            self.tableWidget.setItem(index, 1, pw_item)

    @staticmethod
    def persist(data, filename):
        try:
            print(data)
            with open(filename, 'w') as outFile:
                json.dump(data, outFile)
        except Exception as e:
            print("Failed to save!")
            print(e)

    def return_data(self):
        self.data = self.get_data()
        self.accept()
Пример #9
0
    def initUi(self):
        """
            Initilize UI components.
        """
        SaveDialog.initUi(self)

        title_label = QtGui.QLabel("<b>" + tr("Title:") + "</b>")
        username_label = QtGui.QLabel("<b>" + tr("Username:"******"</b>")
        passwd_label = QtGui.QLabel("<b>" + tr("Password:"******"</b>")
        url_label = QtGui.QLabel("<b>" + tr("URL:")  + "</b>")
        
        if (self.__edit):
            # if it is edit dialog display
            layout_offset = 0
            
            c_date_label = QtGui.QLabel("<b>" + tr("Creation date:") + "</b>")
            m_date_label = QtGui.QLabel("<b>" + tr("Modification date:") + "</b>")
            
            self._layout_gl.addWidget(c_date_label, 4, 0)
            self._layout_gl.addWidget(m_date_label, 5, 0)
            
            self._c_date = QtGui.QLabel()
            self._m_date = QtGui.QLabel()
            
            self._layout_gl.addWidget(self._c_date, 4, 1)
            self._layout_gl.addWidget(self._m_date, 5, 1)
        else:
            layout_offset = -2
            
        e_date_label = QtGui.QLabel("<b>" + tr("Expiration date:") + "</b>")
        comment_label = QtGui.QLabel("<b>" + tr("Comment:") + "</b>")
        attachment_label = QtGui.QLabel("<b>" + tr("Attachment:") + "</b>")
        group_label = QtGui.QLabel("<b>" + tr("Groups:") + "</b>")
        
        self._layout_gl.addWidget(title_label, 0, 0)
        self._layout_gl.addWidget(username_label, 1, 0)
        self._layout_gl.addWidget(passwd_label, 2, 0)
        self._layout_gl.addWidget(url_label, 3, 0)
        self._layout_gl.addWidget(e_date_label, 6 + layout_offset, 0)
        self._layout_gl.addWidget(attachment_label, 7 + layout_offset, 0)
        self._layout_gl.addWidget(comment_label, 9 + layout_offset, 0)
        self._layout_gl.addWidget(group_label, 10 + layout_offset, 0)
        
        self._title = QtGui.QLineEdit()
        self._username = QtGui.QLineEdit()
        self._passwd = QtGui.QLineEdit()
        
        if (not self.__show_pass):
            self._passwd.setEchoMode(QtGui.QLineEdit.Password)
        
        # password layout
        passwd_hl = QtGui.QHBoxLayout()
        passwd_hl.addWidget(self._passwd)
        
        # password visibility check box
        self._show_passwd_check = QtGui.QCheckBox(tr("Show"))
        self._show_passwd_check.setChecked(self.__show_pass)

        # password QR code
        self._qr_button = QtGui.QPushButton(tr("QR"))

        passwd_hl.addWidget(self._show_passwd_check)
        passwd_hl.addWidget(self._qr_button)
              
        self._url = QtGui.QLineEdit()
        self._e_date = QtGui.QLineEdit()
        self._comment = QtGui.QTextEdit()
        self._comment.setLineWrapMode(QtGui.QTextEdit.NoWrap)
        self._comment.setMaximumHeight(200)
        self._group = QtGui.QComboBox()
        self._att_name = QtGui.QLineEdit()
        self._att_name.setEnabled(False)
        
        self._layout_gl.addWidget(self._title, 0, 1)
        self._layout_gl.addWidget(self._username, 1, 1)
        self._layout_gl.addLayout(passwd_hl, 2, 1)
        self._layout_gl.addWidget(self._url, 3, 1)
        
        # attachment vertical layout
        att_vl = QtGui.QVBoxLayout()
        
        # attachment layout
        att_hl_1 = QtGui.QHBoxLayout()
        att_hl_2 = QtGui.QHBoxLayout()
        
        att_vl.addLayout(att_hl_1)
        att_vl.addLayout(att_hl_2)
        
        # open file button
        self._att_button = QtGui.QPushButton(tr("Load"))
        self._att_del_button = QtGui.QPushButton(tr("Delete"))
        self._att_save_button = QtGui.QPushButton(tr("Download"))
        self._att_open_button = QtGui.QPushButton(tr("Open"))
        
        self._att_del_button.setEnabled(False)
        self._att_save_button.setEnabled(False)
        self._att_open_button.setEnabled(False)
        
        att_hl_1.addWidget(self._att_button)
        att_hl_1.addWidget(self._att_del_button)
        att_hl_2.addWidget(self._att_save_button)
        att_hl_2.addWidget(self._att_open_button)
        
        self._layout_gl.addWidget(self._att_name, 7 + layout_offset, 1)
        self._layout_gl.addLayout(att_vl, 8 + layout_offset, 1)
        self._layout_gl.addWidget(self._comment, 9 + layout_offset, 1)
        self._layout_gl.addWidget(self._group, 10 + layout_offset, 1)
        
        # date time edit
        self._e_date_edit = QtGui.QDateTimeEdit()
        self._e_date_edit.setCalendarPopup(True)
        
        # expiration date can't be lower than current date
        self._e_date_edit.setMinimumDateTime(QtCore.QDateTime.currentDateTime())
        
        # create never check box
        self._e_date_never = QtGui.QCheckBox(tr("Never"))
        
        # create horizontal layout for date selector and never check box
        e_date_hl = QtGui.QHBoxLayout()
        e_date_hl.addWidget(self._e_date_edit)
        e_date_hl.addWidget(self._e_date_never)
        
        # add to main layout
        self._layout_gl.addLayout(e_date_hl, 6 + layout_offset, 1)
Пример #10
0
 def save_button_clicked(self):
     # the dialog does the whole saving process
     save_dialog = SaveDialog(self, self.nodes)
     save_dialog.exec_()