diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py index b81f1c5ed2ee3807e9b9b8090632e1dc63a7e3ec..c1e4e235553e71d3933bd5890318e52e2c68abfc 100644 --- a/src/cutecoin/core/account.py +++ b/src/cutecoin/core/account.py @@ -9,6 +9,7 @@ from ucoinpy.api import bma from ucoinpy.api.bma import ConnectionHandler from ucoinpy.documents.peer import Peer from ucoinpy.documents.certification import SelfCertification, Certification +from ucoinpy.documents.membership import Membership from ucoinpy.key import SigningKey from ..tools.exceptions import PersonNotFoundError @@ -177,11 +178,21 @@ class Account(object): 'self_': selfcert.signed_raw(), 'other': []}) - def send_membership_in(self, community): - return community.send_membership(self, "IN") + def send_membership(self, password, community, type): + self_ = Person.lookup(self.pubkey, community) + selfcert = self_.selfcert(community) - def send_membership_out(self, community): - return community.send_membership(self, "OUT") + block = community.get_block() + block_hash = hashlib.sha1(block.signed_raw().encode("ascii")).hexdigest().upper() + membership = Membership(PROTOCOL_VERSION, community.currency, + selfcert.pubkey, block.number, + block_hash, type, selfcert.uid, + selfcert.timestamp, None) + key = SigningKey(self.salt, password) + membership.sign(key) + logging.debug("Membership : {0}".format(membership.signed_raw())) + community.post(bma.blockchain.Membership, {}, + {'membership': membership.signed_raw()}) def jsonify_contacts(self): data = [] diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py index 2b6a43834ed840a3e6035fa3c32811077630750e..4af816ce9fd60ce877d136abd4b29b4780396bb0 100644 --- a/src/cutecoin/gui/community_tab.py +++ b/src/cutecoin/gui/community_tab.py @@ -5,8 +5,8 @@ Created on 2 févr. 2014 ''' import logging -from PyQt5.QtCore import Qt, QSignalMapper -from PyQt5.QtWidgets import QWidget, QErrorMessage, QAction, QMenu +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QMenu, QInputDialog, QLineEdit from ..models.members import MembersListModel from ..gen_resources.community_tab_uic import Ui_CommunityTabWidget from .add_contact import AddContactDialog @@ -89,11 +89,39 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): dialog.exec_() def send_membership_demand(self): - result = self.account.send_membership_in(self.community) - if (result): - QErrorMessage(self).showMessage(result) + password = "" + message = "Please enter your password" + + while not self.account.check_password(password): + password = QInputDialog.getText(self, "Account password", + message, + QLineEdit.Password) + message = "Error, wrong password. Please enter your password" + if password[1] is True: + password = password[0] + else: + return + try: + self.account.send_membership(password, self.community, 'IN') + except ValueError as e: + QMessageBox.critical(self, "Join demand error", + e.message) def send_membership_leaving(self): - result = self.account.send_membership_out(self.community) - if (result): - QErrorMessage(self).showMessage(result) + password = "" + message = "Please enter your password" + + while not self.account.check_password(password): + password = QInputDialog.getText(self, "Account password", + message, + QLineEdit.Password) + message = "Error, wrong password. Please enter your password" + if password[1] is True: + password = password[0] + else: + return + try: + self.account.send_membership(password, self.community, 'OUT') + except ValueError as e: + QMessageBox.critical(self, "Leaving demand error", + e.message) diff --git a/src/cutecoin/gui/process_cfg_community.py b/src/cutecoin/gui/process_cfg_community.py index e82ea849d9f9362ed15b6a87cb31178cb0bad3a8..d719cd881ed3edf4fb2316d3a7cd75dea3dcd013 100644 --- a/src/cutecoin/gui/process_cfg_community.py +++ b/src/cutecoin/gui/process_cfg_community.py @@ -167,11 +167,13 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog): Would you like to publish the key ?".format(self.account.pubkey)) if reply == QMessageBox.Yes: password = "" + message = "Please enter your password" while not self.account.check_password(password): password = QInputDialog.getText(self, "Account password", - "Wrong password.\nPlease enter your password", + message, QLineEdit.Password) + message = "Error, wrong password. Please enter your password" if password[1] is True: password = password[0] else: diff --git a/src/cutecoin/gui/transfer.py b/src/cutecoin/gui/transfer.py index bca2bd35453864e9a75cdd1091c9aa1a88c361ad..029771805e0aff22a60ded0441e8f9874c292937 100644 --- a/src/cutecoin/gui/transfer.py +++ b/src/cutecoin/gui/transfer.py @@ -39,8 +39,6 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): for contact in sender.contacts: self.combo_contact.addItem(contact.name) - self.edit_message.setEnabled(False) - def accept(self): message = self.edit_message.text()