Skip to content
Snippets Groups Projects
Commit 01965574 authored by inso's avatar inso
Browse files

Managing multiple wallets

Pushing only changed WHT
parent c71e9208
No related branches found
No related tags found
No related merge requests found
Showing with 695 additions and 38 deletions
......@@ -104,7 +104,11 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLineEdit" name="edit_secretkey_path"/>
<widget class="QLineEdit" name="edit_secretkey_path">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="button_import">
......@@ -346,7 +350,7 @@
<sender>button_generate</sender>
<signal>clicked()</signal>
<receiver>AccountConfigurationDialog</receiver>
<slot>open_generate_key()</slot>
<slot>open_generate_account_key()</slot>
<hints>
<hint type="sourcelabel">
<x>224</x>
......@@ -367,6 +371,6 @@
<slot>next()</slot>
<slot>previous()</slot>
<slot>open_import_key()</slot>
<slot>open_generate_key()</slot>
<slot>open_generate_account_key()</slot>
</slots>
</ui>
......@@ -23,7 +23,7 @@
<item>
<widget class="QStackedWidget" name="stacked_pages">
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="page_init">
<layout class="QVBoxLayout" name="verticalLayout_4">
......@@ -271,5 +271,6 @@
<slot>check()</slot>
<slot>next()</slot>
<slot>previous()</slot>
<slot>current_wallet_changed(int)</slot>
</slots>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CreateWalletDialog</class>
<widget class="QDialog" name="CreateWalletDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>234</height>
</rect>
</property>
<property name="windowTitle">
<string>Create a new wallet</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QStackedWidget" name="stacked_pages">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_wallet">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Wallet name :</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="edit_name"/>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_key">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Private key</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLineEdit" name="edit_secretkey_path"/>
</item>
<item>
<widget class="QPushButton" name="button_import">
<property name="text">
<string>Import a secret key</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>OR</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_fingerprint">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="button_generate">
<property name="text">
<string>Generate a secret key</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_node">
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Main node :</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="edit_address"/>
</item>
<item>
<widget class="QSpinBox" name="spinbox_port">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>8881</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QLabel" name="label_error">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>2</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="button_previous">
<property name="text">
<string>Previous</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="button_next">
<property name="text">
<string>Next</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>button_import</sender>
<signal>clicked()</signal>
<receiver>CreateWalletDialog</receiver>
<slot>open_import_key()</slot>
<hints>
<hint type="sourcelabel">
<x>333</x>
<y>54</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>86</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_generate</sender>
<signal>clicked()</signal>
<receiver>CreateWalletDialog</receiver>
<slot>open_generate_key()</slot>
<hints>
<hint type="sourcelabel">
<x>295</x>
<y>110</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>86</y>
</hint>
</hints>
</connection>
<connection>
<sender>edit_address</sender>
<signal>textChanged(QString)</signal>
<receiver>CreateWalletDialog</receiver>
<slot>check()</slot>
<hints>
<hint type="sourcelabel">
<x>200</x>
<y>83</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>134</y>
</hint>
</hints>
</connection>
<connection>
<sender>spinbox_port</sender>
<signal>valueChanged(int)</signal>
<receiver>CreateWalletDialog</receiver>
<slot>check()</slot>
<hints>
<hint type="sourcelabel">
<x>357</x>
<y>83</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>134</y>
</hint>
</hints>
</connection>
<connection>
<sender>edit_name</sender>
<signal>textChanged(QString)</signal>
<receiver>CreateWalletDialog</receiver>
<slot>check()</slot>
<hints>
<hint type="sourcelabel">
<x>238</x>
<y>91</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>116</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_next</sender>
<signal>clicked()</signal>
<receiver>CreateWalletDialog</receiver>
<slot>next()</slot>
<hints>
<hint type="sourcelabel">
<x>349</x>
<y>212</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>116</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_previous</sender>
<signal>clicked()</signal>
<receiver>CreateWalletDialog</receiver>
<slot>previous()</slot>
<hints>
<hint type="sourcelabel">
<x>49</x>
<y>212</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>116</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>open_import_key()</slot>
<slot>open_generate_key()</slot>
<slot>check()</slot>
<slot>next()</slot>
<slot>previous()</slot>
</slots>
</ui>
......@@ -22,9 +22,9 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<layout class="QHBoxLayout" name="layout_name">
<item>
<widget class="QLabel" name="label_3">
<widget class="QLabel" name="label_name">
<property name="text">
<string>Your name</string>
</property>
......@@ -46,9 +46,9 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<layout class="QHBoxLayout" name="layout_password">
<item>
<widget class="QLabel" name="label_4">
<widget class="QLabel" name="label_password">
<property name="text">
<string>Passphrase</string>
</property>
......@@ -64,9 +64,9 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<layout class="QHBoxLayout" name="layout_password_bis">
<item>
<widget class="QLabel" name="label_2">
<widget class="QLabel" name="label_password_bis">
<property name="text">
<string>Type it again</string>
</property>
......
......@@ -4,15 +4,13 @@ Created on 22 mai 2014
@author: inso
'''
import re
import logging
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QProgressDialog
from PyQt5.QtCore import QThread, pyqtSignal
from cutecoin.models.person import Person
from cutecoin.gen_resources.generateKeyDialog_uic import Ui_GenerateKeyDialog
class TaskGenKey(QThread):
taskFinished = pyqtSignal()
......@@ -20,7 +18,8 @@ class TaskGenKey(QThread):
self.key = self.account.gpg.gen_key(self.input_data)
self.taskFinished.emit()
class GenerateKeyDialog(QDialog, Ui_GenerateKeyDialog):
class GenerateAccountKeyDialog(QDialog, Ui_GenerateKeyDialog):
'''
classdocs
......@@ -30,9 +29,10 @@ class GenerateKeyDialog(QDialog, Ui_GenerateKeyDialog):
'''
Constructor
'''
super(GenerateKeyDialog, self).__init__()
super(GenerateAccountKeyDialog, self).__init__()
self.setupUi(self)
self.account = account
self.main_window = parent
self.button_box.button(QDialogButtonBox.Ok).setEnabled(False)
......@@ -40,14 +40,15 @@ class GenerateKeyDialog(QDialog, Ui_GenerateKeyDialog):
name = self.edit_name.text()
passphrase = self.edit_password.text()
input_data = self.account.gpg.gen_key_input(key_type="RSA", key_length=2048,
name_real=name, passphrase=passphrase)
name_real=name, passphrase=passphrase,
name_comment="Account generated by cutecoin")
self.progress_dialog = QProgressDialog(self)
self.progress_dialog.setLabelText("Generating key...")
self.progress_dialog.setMinimum(0)
self.progress_dialog.setMaximum(0)
self.progress_dialog.setCancelButton(None)
self.progress_dialog.setValue(-1) # As set in Designer
self.progress_dialog.setValue(-1)
self.progress_dialog.show()
self.gen_task = TaskGenKey()
self.gen_task.input_data = input_data
......@@ -66,7 +67,7 @@ class GenerateKeyDialog(QDialog, Ui_GenerateKeyDialog):
if k['fingerprint'] == key.fingerprint:
self.account.keyid = k['keyid']
print(self.account.keyid)
logging.debug("Key generated : " + self.account.keyid)
QMessageBox.information(self, "Key generation", "Key " +
key.fingerprint + " has been generated",
......
'''
Created on 22 mai 2014
@author: inso
'''
import re
import logging
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QProgressDialog
from PyQt5.QtCore import QThread, pyqtSignal
from cutecoin.gen_resources.generateKeyDialog_uic import Ui_GenerateKeyDialog
class TaskGenKey(QThread):
taskFinished = pyqtSignal()
def run(self):
self.key = self.account.gpg.gen_key(self.input_data)
self.taskFinished.emit()
class GenerateWalletKeyDialog(QDialog, Ui_GenerateKeyDialog):
'''
classdocs
'''
def __init__(self, account, keyname):
'''
Constructor
'''
super(GenerateWalletKeyDialog, self).__init__()
self.setupUi(self)
self.account = account
self.keyname = keyname
self.edit_name.setText("Wallet %s owned by %s" %
(self.keyname, account.name))
self.edit_name.setEnabled(False)
self.keyid = ''
self.fingerprint = ''
self.button_box.button(QDialogButtonBox.Ok).setEnabled(False)
def accept(self):
passphrase = self.edit_password.text()
input_data = self.account.gpg.gen_key_input(key_type="RSA",
key_length=2048,
name_real="Wallet %s owned by %s" %
(self.keyname, self.account.name),
passphrase=passphrase,
name_comment="Wallet generated by cutecoin")
self.progress_dialog = QProgressDialog(self)
self.progress_dialog.setLabelText("Generating key...")
self.progress_dialog.setMinimum(0)
self.progress_dialog.setMaximum(0)
self.progress_dialog.setCancelButton(None)
self.progress_dialog.setValue(-1)
self.progress_dialog.show()
self.gen_task = TaskGenKey()
self.gen_task.input_data = input_data
self.gen_task.account = self.account
self.gen_task.taskFinished.connect(self.gen_finished)
self.gen_task.run()
def gen_finished(self):
self.progress_dialog.close()
key = self.gen_task.key
secret_keys = self.account.gpg.list_keys(True)
for k in secret_keys:
if k['fingerprint'] == key.fingerprint:
self.keyid = k['keyid']
self.fingerprint = k['fingerprint']
logging.debug("Key generated : %s" % self.keyid)
QMessageBox.information(self, "Key generation", "Key " +
key.fingerprint + " has been generated",
QMessageBox.Ok)
self.accepted.emit()
self.close()
def check(self):
if len(self.edit_password.text()) < 8:
self.label_errors.setText("Please enter a password with more than 8 characters")
self.button_box.button(QDialogButtonBox.Ok).setEnabled(False)
return
elif self.edit_password.text() != self.edit_password_bis.text():
self.label_errors.setText("Passphrases do not match")
self.button_box.button(QDialogButtonBox.Ok).setEnabled(False)
return
self.label_errors.setText("")
self.button_box.button(QDialogButtonBox.Ok).setEnabled(True)
......@@ -4,7 +4,7 @@ Created on 6 mars 2014
@author: inso
'''
from cutecoin.gen_resources.accountConfigurationDialog_uic import Ui_AccountConfigurationDialog
from cutecoin.gui.generateKeyDialog import GenerateKeyDialog
from cutecoin.gui.generateAccountKeyDialog import GenerateAccountKeyDialog
from cutecoin.gui.processConfigureCommunity import ProcessConfigureCommunity
from cutecoin.models.account.communities.listModel import CommunitiesListModel
from cutecoin.tools.exceptions import KeyAlreadyUsed, Error
......@@ -151,8 +151,8 @@ class ProcessConfigureAccount(QDialog, Ui_AccountConfigurationDialog):
dialog.accepted.connect(self.action_edit_community)
dialog.exec_()
def open_generate_key(self):
dialog = GenerateKeyDialog(self.account, self)
def open_generate_account_key(self):
dialog = GenerateAccountKeyDialog(self.account, self)
dialog.exec_()
def open_import_key(self):
......
......@@ -5,7 +5,9 @@ Created on 8 mars 2014
'''
import ucoin
from cutecoin.gen_resources.communityConfigurationDialog_uic import Ui_CommunityConfigurationDialog
from PyQt5.QtWidgets import QDialog, QMenu, QMessageBox
from PyQt5.QtWidgets import QDialog, QMenu, QMessageBox, QWidget, QAction
from PyQt5.QtCore import QSignalMapper
from cutecoin.gui.processCreateWallet import ProcessCreateWallet
from cutecoin.models.node.treeModel import NodesTreeModel
from cutecoin.models.wallet.trustsTreeModel import TrustsTreeModel
from cutecoin.models.node import Node
......@@ -92,16 +94,25 @@ class StepPageSetWallets(Step):
def display_page(self):
self.config_dialog.tabs_wallets.clear()
signal_mapper = QSignalMapper(self.config_dialog)
for wallet in self.config_dialog.account.wallets:
wallet_tab = WalletTabWidget(self.config_dialog.account,
self.config_dialog.community)
self.config_dialog.tabs_wallets.addTab(wallet_tab, wallet.name)
tree_model = TrustsTreeModel(wallet,
self.config_dialog.community.name())
signal_mapper.setMapping(tree_model, wallet.name)
tree_model.dataChanged.connect(signal_mapper.map)
wallet_tab.trusts_tree_view.setModel(tree_model)
wallet_tab.spinbox_trusts.setValue(wallet.required_trusts)
wallet_tab.spinbox_trusts.valueChanged.connect(self.config_dialog.required_trusts_changed)
self.config_dialog.tabs_wallets.addTab(QWidget(), "+")
self.config_dialog.button_previous.setEnabled(True)
self.config_dialog.button_next.setText("Ok")
changed_slot = self.config_dialog.current_wallet_changed
self.config_dialog.tabs_wallets.currentChanged.connect(changed_slot)
def process_next(self):
pass
......@@ -122,6 +133,10 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
self.account = account
self.step = None
self.nodes = []
self.wallet_edit = {}
for w in self.account.wallets:
self.wallet_edit[w.name] = False
step_init = StepPageInit(self)
step_add_nodes = StepPageAddNodes(self)
......@@ -171,8 +186,21 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
self.tree_nodes.setModel(NodesTreeModel(self.community,
self.nodes))
def current_wallet_changed(self, index):
if index == (self.tabs_wallets.count() - 1):
wallet_parameters = ProcessCreateWallet(self.account,
self.community)
wallet_parameters.accepted.connect(self.add_wallet)
wallet_parameters.exec_()
def add_wallet(self):
self.wallet_edit[self.account.wallets[-1].name] = True
self.tabs_wallets.disconnect()
self.step.display_page()
def required_trusts_changed(self, value):
wallet = self.account.wallets[self.tabs_wallets.currentIndex()]
self.wallet_edit[self.account.wallets[-1].name] = True
wallet.required_trusts = value
def showContextMenu(self, point):
......@@ -184,6 +212,9 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
action.setEnabled(False)
menu.exec_(self.mapToGlobal(point))
def wallet_edited(self, name):
self.wallet_edit[name] = True
def accept(self):
result = self.account.send_pubkey(self.community)
if result:
......@@ -192,10 +223,11 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
#TODO: Push wht only if changed
for wallet in self.account.wallets:
result = wallet.push_wht(self.account.gpg)
if result:
QMessageBox.critical(self, "Wallet publishing error",
result)
if self.wallet_edit[wallet.name]:
result = wallet.push_wht(self.account.gpg)
if result:
QMessageBox.critical(self, "Wallet publishing error",
result)
self.accepted.emit()
self.close()
'''
Created on 22 mai 2014
@author: inso
'''
import re
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QErrorMessage, QFileDialog
from cutecoin.models.node import Node
from cutecoin.tools.exceptions import Error
from cutecoin.gen_resources.createWalletDialog_uic import Ui_CreateWalletDialog
from cutecoin.gui.generateWalletKeyDialog import GenerateWalletKeyDialog
class Step():
def __init__(self, config_dialog, previous_step=None, next_step=None):
self.previous_step = previous_step
self.next_step = next_step
self.config_dialog = config_dialog
class StepPageInit(Step):
'''
First step when adding a community
'''
def __init__(self, config_dialog):
super().__init__(config_dialog)
def is_valid(self):
name = self.config_dialog.edit_name.text()
if name == "":
return False
wallets = self.config_dialog.account.wallets
currency = self.config_dialog.community.currency
for w in wallets.community_wallets(currency):
if w.name == name:
return False
return True
def process_next(self):
self.config_dialog.keyname = self.config_dialog.edit_name.text()
def display_page(self):
self.config_dialog.button_previous.setEnabled(False)
self.config_dialog.button_next.setEnabled(False)
class StepPageKey(Step):
'''
The step where the user set its key
'''
def __init__(self, config_dialog):
super().__init__(config_dialog)
#TODO: Check page validity
def is_valid(self):
return self.config_dialog.keyid != ''
def process_next(self):
pass
def display_page(self):
self.config_dialog.button_next.setEnabled(False)
class StepPageNode(Step):
'''
The step where the user set default node
'''
def __init__(self, config_dialog):
super().__init__(config_dialog)
#TODO: Check page validity
def is_valid(self):
address = self.config_dialog.edit_address.text()
port = self.config_dialog.spinbox_port.value()
try:
peering = Node.create(address, port).peering()
except ValueError as e:
self.config_dialog.label_error.setText("Cannot access node : %s" + str(e))
return False
except ConnectionError as e:
self.config_dialog.label_error.setText("Cannot access node : %s" + str(e))
return False
if "currency" in peering:
if (peering['currency'] != self.config_dialog.community.currency):
self.config_dialog.label_error.setText("This node doesn't use currency %s"
% self.config_dialog.community.currency)
return False
else:
self.config_dialog.label_error.setText("Not a ucoin node")
return False
return True
def process_next(self):
pass
def display_page(self):
self.config_dialog.button_previous.setEnabled(False)
self.config_dialog.button_next.setEnabled(False)
class ProcessCreateWallet(QDialog, Ui_CreateWalletDialog):
'''
classdocs
'''
def __init__(self, account, community):
'''
Constructor
'''
super(ProcessCreateWallet, self).__init__()
self.setupUi(self)
self.keyid = ''
self.account = account
self.community = community
self.keygen_dialog = None
self.keyname = ""
self.step = StepPageInit(self)
step_key = StepPageKey(self)
step_node = StepPageNode(self)
self.step.next_step = step_key
step_key.next_step = step_node
self.step.display_page()
def accept(self):
address = self.edit_address.text()
port = self.spinbox_port.value()
self.account.wallets.add_wallet(self.account.gpg,
self.keyid,
self.community.currency,
Node.create(address, port),
name=self.edit_name.text())
self.accepted.emit()
self.close()
def open_generate_key(self):
self.keygen_dialog = GenerateWalletKeyDialog(self.account,
self.keyname)
self.keygen_dialog.accepted.connect(self.key_generated)
self.keygen_dialog.exec_()
def key_generated(self):
if self.keyid is not '':
self.account.gpg.delete_keys(self.keyid)
self.keyid = self.keygen_dialog.keyid
self.label_fingerprint.setText(self.keygen_dialog.fingerprint)
self.check()
def open_import_key(self):
keyfile = QFileDialog.getOpenFileName(self,
"Choose a secret key",
"",
"All key files (*.asc);; Any file (*)")
keyfile = keyfile[0]
key = open(keyfile).read()
result = self.account.gpg.import_keys(key)
if result.count == 0:
QErrorMessage(self).showMessage("Bad key file")
else:
QMessageBox.information(self, "Key import", "Key " +
result.fingerprints[0] + " has been imported",
QMessageBox.Ok)
if self.keyid is not '':
self.account.gpg.delete_keys(self.account.keyid)
secret_keys = self.account.gpg.list_keys(True)
for k in secret_keys:
if k['fingerprint'] == result.fingerprints[0]:
self.keyid = k['keyid']
self.label_fingerprint.setText("Key : " + result.fingerprints[0])
self.edit_secretkey_path.setText(keyfile)
self.check()
def next(self):
if self.step.next_step is not None:
if self.step.is_valid():
self.step.process_next()
self.step = self.step.next_step
next_index = self.stacked_pages.currentIndex() + 1
self.stacked_pages.setCurrentIndex(next_index)
self.step.display_page()
else:
self.accept()
def previous(self):
if self.step.previous_step is not None:
self.step = self.step.previous_step
previous_index = self.stacked_pages.currentIndex() - 1
self.stacked_pages.setCurrentIndex(previous_index)
self.step.display_page()
def check(self):
if self.step.is_valid():
self.button_next.setEnabled(True)
......@@ -46,12 +46,12 @@ class Wallets(object):
def __getitem__(self, key):
return self._wallets_list[key]
def add_wallet(self, gpg, keyid, community, node,
def add_wallet(self, gpg, keyid, currency, node,
required_trusts=1, name="Main Wallet"):
'''
Create a new wallet of a specific currency.
'''
wallet = Wallet.create(keyid, community, node,
wallet = Wallet.create(keyid, currency, node,
required_trusts, name)
# We try to add already present nodes to the wallet
present_nodes = wallet.get_nodes_in_peering(wallet.pull_wht(gpg))
......
......@@ -76,13 +76,10 @@ class Community(object):
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)
#signature = account.gpg.sign(ascii_key, keyid=account.keyid, detach=True)
try:
wallets.post(ucoin.pks.Add(),
{'keytext': ascii_key,
'keysign': signature})
{'keytext': ascii_key})
except ValueError as e:
return str(e)
......
......@@ -46,9 +46,11 @@ class Node(object):
return cls(server, port, trust, hoster)
def __eq__(self, other):
hash = ucoin.network.Peering(self.server, self.port).get()['fingerprint']
other_hash = ucoin.network.Peering(other.server, other.port).get()['fingerprint']
return (self.hash == other.hash)
hash = ucoin.network.Peering(server=self.server,
port=self.port).get()['fingerprint']
other_hash = ucoin.network.Peering(server=other.server,
port=other.port).get()['fingerprint']
return (hash == other_hash)
def get_text(self):
return self.server + ":" + str(self.port)
......
......@@ -58,15 +58,15 @@ class Wallet(object):
return cls(keyid, currency, nodes, required_trusts, name)
def __eq__(self, other):
return (self.community == other.community)
return (self.keyid == other.keyid)
#TODO: Relative and quantitative value
def value(self):
value = 0
for coin in self.coins:
value += coin.value(self)
return value
#TODO: Enhance this code. Loading the amendment each time we load a coin is bad
def refresh_coins(self, gpg):
self.coins = []
coins_list_request = ucoin.hdc.coins.List(self.fingerprint(gpg))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment