From c71e9208d7f5fde00390475bc414243a3c868889 Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Sun, 25 May 2014 21:27:51 +0200 Subject: [PATCH] Send pubkey + send membership demand --- res/ui/communityTabWidget.ui | 61 ++++++++++++++++++- src/cutecoin/gui/communityTabWidget.py | 18 +++++- src/cutecoin/gui/processConfigureCommunity.py | 10 ++- src/cutecoin/models/account/__init__.py | 12 ++++ src/cutecoin/models/community/__init__.py | 37 +++++++++++ 5 files changed, 135 insertions(+), 3 deletions(-) diff --git a/res/ui/communityTabWidget.ui b/res/ui/communityTabWidget.ui index 73c01709..8a16e912 100644 --- a/res/ui/communityTabWidget.ui +++ b/res/ui/communityTabWidget.ui @@ -26,6 +26,30 @@ <item> <widget class="QListView" name="list_community_members"/> </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <item> + <widget class="QLabel" name="label_quality"> + <property name="text"> + <string>Quality : </string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="button_membership"> + <property name="text"> + <string>Send membership demand</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </item> <item> @@ -34,8 +58,43 @@ </layout> </widget> <resources/> - <connections/> + <connections> + <connection> + <sender>button_membership</sender> + <signal>clicked()</signal> + <receiver>CommunityTabWidget</receiver> + <slot>send_membership_demand()</slot> + <hints> + <hint type="sourcelabel"> + <x>289</x> + <y>277</y> + </hint> + <hint type="destinationlabel"> + <x>199</x> + <y>149</y> + </hint> + </hints> + </connection> + <connection> + <sender>button_membership</sender> + <signal>clicked()</signal> + <receiver>CommunityTabWidget</receiver> + <slot>send_membership_leaving()</slot> + <hints> + <hint type="sourcelabel"> + <x>289</x> + <y>277</y> + </hint> + <hint type="destinationlabel"> + <x>199</x> + <y>149</y> + </hint> + </hints> + </connection> + </connections> <slots> <slot>open_issuance_dialog()</slot> + <slot>send_membership_demand()</slot> + <slot>send_membership_leaving()</slot> </slots> </ui> diff --git a/src/cutecoin/gui/communityTabWidget.py b/src/cutecoin/gui/communityTabWidget.py index 35e81dcf..ba5fe7b6 100644 --- a/src/cutecoin/gui/communityTabWidget.py +++ b/src/cutecoin/gui/communityTabWidget.py @@ -5,7 +5,7 @@ Created on 2 févr. 2014 ''' import logging -from PyQt5.QtWidgets import QWidget +from PyQt5.QtWidgets import QWidget, QErrorMessage from cutecoin.models.community.membersListModel import MembersListModel from cutecoin.gen_resources.communityTabWidget_uic import Ui_CommunityTabWidget @@ -26,3 +26,19 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): self.account = account wallets = account.wallets.community_wallets(community.currency) self.list_community_members.setModel(MembersListModel(community, wallets)) + if self.account.quality(self.community) == "member": + self.button_membership.setText("Send leaving demand") + self.button_membership.clicked.connect(self.send_membership_leaving) + else: + self.button_membership.setText("Send membership demand") + self.button_membership.clicked.connect(self.send_membership_demand) + + def send_membership_demand(self): + result = self.account.send_membership_in(self.community) + if (result): + QErrorMessage(self).showMessage(result) + + def send_membership_leaving(self): + result = self.account.send_membership_out(self.community) + if (result): + QErrorMessage(self).showMessage(result) diff --git a/src/cutecoin/gui/processConfigureCommunity.py b/src/cutecoin/gui/processConfigureCommunity.py index 4b1c970e..8b5e4cf5 100644 --- a/src/cutecoin/gui/processConfigureCommunity.py +++ b/src/cutecoin/gui/processConfigureCommunity.py @@ -185,9 +185,17 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog): menu.exec_(self.mapToGlobal(point)) def accept(self): + result = self.account.send_pubkey(self.community) + if result: + QMessageBox.critical(self, "Pubkey publishing error", + result) + #TODO: Push wht only if changed for wallet in self.account.wallets: - wallet.push_wht(self.account.gpg) + result = wallet.push_wht(self.account.gpg) + if result: + QMessageBox.critical(self, "Wallet publishing error", + result) self.accepted.emit() self.close() diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py index b9dd695c..833b5005 100644 --- a/src/cutecoin/models/account/__init__.py +++ b/src/cutecoin/models/account/__init__.py @@ -113,6 +113,18 @@ class Account(object): sent.append(t) return sent + def send_pubkey(self, community): + wallets = self.wallets.community_wallets(community.currency) + return community.send_pubkey(self, wallets) + + def send_membership_in(self, community): + wallets = self.wallets.community_wallets(community.currency) + return community.send_membership(self, wallets, "IN") + + def send_membership_out(self, community): + wallets = self.wallets.community_wallets(community.currency) + return community.send_membership(self, wallets, "OUT") + def quality(self, community): wallets = self.wallets.community_wallets(community.currency) return community.person_quality(wallets, self.fingerprint()) diff --git a/src/cutecoin/models/community/__init__.py b/src/cutecoin/models/community/__init__.py index cb714118..8da67b58 100644 --- a/src/cutecoin/models/community/__init__.py +++ b/src/cutecoin/models/community/__init__.py @@ -8,6 +8,7 @@ import ucoin import hashlib import json import logging +import time from cutecoin.models.node import Node from cutecoin.models.account.wallets import Wallets @@ -72,6 +73,42 @@ class Community(object): current_amendment = wallets.request(ucoin.hdc.amendments.Promoted()) return int(current_amendment['number']) + def send_pubkey(self, account, wallets): + ascii_key = account.gpg.export_keys(account.keyid) + ascii_key = ascii_key.replace("\n", "\r\n") + signature = account.gpg.sign(ascii_key, keyid=account.keyid, detach=True) + print(ascii_key) + print(signature) + try: + wallets.post(ucoin.pks.Add(), + {'keytext': ascii_key, + 'keysign': signature}) + except ValueError as e: + return str(e) + + def send_membership(self, account, wallets, membership): + context_data = {'version': 1, + 'currency': self.currency, + 'fingerprint': account.fingerprint(), + 'date': int(time.time()), + 'membership': membership + } + message = """Version: %(version)d +Currency: %(currency)s +Registry: MEMBERSHIP +Issuer: %(fingerprint)s +Date: %(date)s +Membership: %(membership)s +""" % context_data + + message = message.replace("\n", "\r\n") + signature = account.gpg.sign(message, keyid=account.keyid, detach=True) + try: + wallets.post(ucoin.registry.community.Members(), + {'membership': message, 'signature': signature}) + except ValueError as e: + return str(e) + def person_quality(self, wallets, fingerprint): quality = 'nothing' voter_req = ucoin.registry.community.voters.Current(fingerprint) -- GitLab