Skip to content

Commit 50b5d63

Browse files
roshiik9ert
andauthored
The alias function is used to create a unique_id out of a user input, e.g. for device and most importantly for wallet names. The naming of this function now reflect this. (#2439)
Signed-off-by: Simon Castano <[email protected]> Co-authored-by: k9ert <[email protected]>
1 parent 92f10e0 commit 50b5d63

File tree

11 files changed

+66
-40
lines changed

11 files changed

+66
-40
lines changed

src/cryptoadvance/specter/devices/bitcoin_core.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from embit import bip32, bip39, networks
88

99
from ..device import Device
10-
from ..helpers import alias
10+
from ..helpers import create_unique_id
1111
from ..key import Key
1212
from ..rpc import get_default_datadir
1313
from ..specter_error import SpecterError
@@ -115,9 +115,11 @@ def add_hot_wallet_keys(
115115
{
116116
"desc": AddChecksum(
117117
"{}({}{}/0/*)".format(
118-
"tr"
119-
if path.startswith("m/86h") and taproot_available
120-
else "wpkh",
118+
(
119+
"tr"
120+
if path.startswith("m/86h") and taproot_available
121+
else "wpkh"
122+
),
121123
xprv,
122124
path.rstrip("/").replace("m", ""),
123125
)
@@ -130,9 +132,11 @@ def add_hot_wallet_keys(
130132
{
131133
"desc": AddChecksum(
132134
"{}({}{}/1/*)".format(
133-
"tr"
134-
if path.startswith("m/86h") and taproot_available
135-
else "wpkh",
135+
(
136+
"tr"
137+
if path.startswith("m/86h") and taproot_available
138+
else "wpkh"
139+
),
136140
xprv,
137141
path.rstrip("/").replace("m", ""),
138142
)

src/cryptoadvance/specter/helpers.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,9 @@ def to_ascii20(name: str) -> str:
112112
return "".join([c for c in name if ord(c) < 127])[:20]
113113

114114

115-
# TODO: Rename this function to sth. like create_unique_id
116-
def alias(name):
115+
def create_unique_id(name):
117116
"""
118-
Create a filesystem-friendly alias from a string.
117+
Create a filesystem-friendly unique ID from a string.
119118
Leading and trailing whitespaces are removed.
120119
Replaces space(s) and hyphen(s) with one underscore.
121120
Keeps only alphanumeric chars and returns in lowercase.
@@ -128,12 +127,12 @@ def alias(name):
128127

129128
def fullpath(data_folder, name):
130129
"""Quick way to get a fullpath which usually"""
131-
return os.path.join(data_folder, f"{alias(name)}.json")
130+
return os.path.join(data_folder, f"{create_unique_id(name)}.json")
132131

133132

134133
def calc_fullpath(data_folder, name):
135134
"""Get a fullpath for a Businessobject with a name quickly"""
136-
return os.path.join(data_folder, f"{alias(name)}.json")
135+
return os.path.join(data_folder, f"{create_unique_id(name)}.json")
137136

138137

139138
def deep_update(d, u):

src/cryptoadvance/specter/managers/device_manager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from cryptoadvance.specter.devices.bitcoin_core import BitcoinCore, BitcoinCoreWatchOnly
88

9-
from ..helpers import alias, load_jsons
9+
from ..helpers import create_unique_id, load_jsons
1010
from ..rpc import get_default_datadir
1111

1212
from ..devices import __all__ as all_device_classes
@@ -59,11 +59,11 @@ def devices_names(self):
5959
return sorted(self.devices.keys())
6060

6161
def add_device(self, name, device_type, keys):
62-
device_alias = alias(name)
62+
device_alias = create_unique_id(name)
6363
fullpath = os.path.join(self.data_folder, "%s.json" % device_alias)
6464
i = 2
6565
while os.path.isfile(fullpath):
66-
device_alias = alias("%s %d" % (name, i))
66+
device_alias = create_unique_id("%s %d" % (name, i))
6767
fullpath = os.path.join(self.data_folder, "%s.json" % device_alias)
6868
i += 1
6969
# remove duplicated keys if any exist

src/cryptoadvance/specter/managers/node_manager.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from ..rpc import get_default_datadir, RPC_PORTS
88
from ..specter_error import SpecterError, SpecterInternalException
99
from ..persistence import PersistentObject, write_node, delete_file
10-
from ..helpers import alias, calc_fullpath, load_jsons
10+
from ..helpers import create_unique_id, calc_fullpath, load_jsons
1111
from ..node import Node, NonExistingNode
1212
from ..internal_node import InternalNode
1313
from ..services import callbacks
@@ -193,11 +193,11 @@ def add_external_node(
193193
This should only be used for an external node. Use add_internal_node for internal node
194194
and if you have defined your own node type, use save_node directly to save the node (and create it yourself)
195195
"""
196-
node_alias = alias(name)
196+
node_alias = create_unique_id(name)
197197
fullpath = os.path.join(self.data_folder, "%s.json" % node_alias)
198198
i = 2
199199
while os.path.isfile(fullpath):
200-
node_alias = alias("%s %d" % (name, i))
200+
node_alias = create_unique_id("%s %d" % (name, i))
201201
fullpath = os.path.join(self.data_folder, "%s.json" % node_alias)
202202
i += 1
203203

@@ -239,11 +239,11 @@ def add_internal_node(
239239
This should only be used for internal nodes. Use add__External_node for external nodes
240240
and if you have defined your own node-type, use save_node directly. to save the node (and create it yourself)
241241
"""
242-
node_alias = alias(name)
242+
node_alias = create_unique_id(name)
243243
fullpath = os.path.join(self.data_folder, "%s.json" % node_alias)
244244
i = 2
245245
while os.path.isfile(fullpath):
246-
node_alias = alias("%s %d" % (name, i))
246+
node_alias = create_unique_id("%s %d" % (name, i))
247247
fullpath = os.path.join(self.data_folder, "%s.json" % node_alias)
248248
i += 1
249249
if not datadir:

src/cryptoadvance/specter/managers/wallet_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from cryptoadvance.specter.rpc import BitcoinRPC
1212
from cryptoadvance.specter.key import Key
1313

14-
from ..helpers import add_dicts, alias, is_liquid, load_jsons
14+
from ..helpers import add_dicts, create_unique_id, is_liquid, load_jsons
1515
from ..liquid.wallet import LWallet
1616
from ..persistence import delete_folder
1717
from ..rpc import RpcError, get_default_datadir, BrokenCoreConnectionException
@@ -348,7 +348,7 @@ def create_wallet(
348348
except:
349349
walletsindir = []
350350
self._check_duplicate_keys(keys)
351-
wallet_alias = alias(name)
351+
wallet_alias = create_unique_id(name)
352352

353353
w = self.WalletClass.create(
354354
self.rpc,

src/cryptoadvance/specter/server_endpoints/auth.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from cryptoadvance.specter.specter import Specter
1212

13-
from ..helpers import alias, is_relative_url
13+
from ..helpers import create_unique_id, is_relative_url
1414
from ..server_endpoints import flash
1515
from ..services import ExtensionException
1616
from ..user import User, hash_password, verify_password
@@ -161,11 +161,11 @@ def register():
161161
)
162162
return redirect("register?otp={}".format(otp))
163163
if app.specter.otp_manager.validate_new_user_otp(otp):
164-
user_id = alias(username)
164+
user_id = create_unique_id(username)
165165
i = 1
166166
while app.specter.user_manager.get_user(user_id):
167167
i += 1
168-
user_id = "{}{}".format(alias(username), i)
168+
user_id = "{}{}".format(create_unique_id(username), i)
169169
if app.specter.user_manager.get_user_by_username(username):
170170
flash(
171171
_("Username is already taken, please choose another one"), "error"

src/cryptoadvance/specter/server_endpoints/setup.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from flask_babel import lazy_gettext as _
1515
from flask_login import login_required
1616

17-
from ..helpers import alias
17+
from ..helpers import create_unique_id
1818
from ..util.bitcoind_setup_tasks import (
1919
setup_bitcoind_directory_thread,
2020
setup_bitcoind_thread,
@@ -28,6 +28,7 @@
2828
# Setup endpoint blueprint
2929
setup_endpoint = Blueprint("setup_endpoint", __name__)
3030

31+
3132
######################### Setup pages #######################################
3233
@setup_endpoint.route("/start/", methods=["GET"])
3334
@login_required
@@ -169,7 +170,8 @@ def setup_bitcoind_datadir():
169170
else f"Specter {network.title()} {i}"
170171
)
171172
node_default_datadir = os.path.join(
172-
app.specter.node_manager.data_folder, f"{alias(node_name)}/.bitcoin-{network}"
173+
app.specter.node_manager.data_folder,
174+
f"{create_unique_id(node_name)}/.bitcoin-{network}",
173175
)
174176
user_selected_datadir = request.form.get(
175177
"bitcoin_core_datadir", node_default_datadir

src/cryptoadvance/specter/server_endpoints/wallets/wallets.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
from flask_login import login_required
1212

1313
from ...commands.psbt_creator import PsbtCreator
14-
from ...helpers import bcur2base64, get_devices_with_keys_by_type, get_txid, alias
14+
from ...helpers import (
15+
bcur2base64,
16+
get_devices_with_keys_by_type,
17+
get_txid,
18+
create_unique_id,
19+
)
1520
from ...key import Key
1621
from ...managers.wallet_manager import purposes
1722
from ...persistence import delete_file
@@ -246,7 +251,10 @@ def new_wallet(wallet_type):
246251
address_type = request.form["type"]
247252
sigs_total = int(request.form.get("sigs_total", 1))
248253
sigs_required = int(request.form.get("sigs_required", 1))
249-
if alias(wallet_name) in app.specter.wallet_manager.wallets_aliases:
254+
if (
255+
create_unique_id(wallet_name)
256+
in app.specter.wallet_manager.wallets_aliases
257+
):
250258
err = _("Wallet name already exists. Choose a different name!")
251259
if err:
252260
devices = [
@@ -383,6 +391,7 @@ def new_wallet(wallet_type):
383391

384392
################## Wallet pages #######################
385393

394+
386395
###### Wallet index page ######
387396
@wallets_endpoint.route("/wallet/<wallet_alias>/")
388397
@login_required
@@ -805,7 +814,10 @@ def settings(wallet_alias):
805814
flash(_("Wallet name cannot be empty"), "error")
806815
elif wallet_name == wallet.name:
807816
pass
808-
elif alias(wallet_name) in app.specter.wallet_manager.wallets_aliases:
817+
elif (
818+
create_unique_id(wallet_name)
819+
in app.specter.wallet_manager.wallets_aliases
820+
):
809821
flash(
810822
_("Wallet name already exists. Choose a different name!"), "error"
811823
)

tests/test_helpers.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import logging
2-
from cryptoadvance.specter.helpers import deep_update, load_jsons, is_ip_private, alias
2+
from cryptoadvance.specter.helpers import (
3+
deep_update,
4+
load_jsons,
5+
is_ip_private,
6+
create_unique_id,
7+
)
38

49
logger = logging.getLogger(__name__)
510

@@ -80,7 +85,7 @@ def test_is_ip_private(caplog):
8085
assert not is_ip_private(ip)
8186

8287

83-
def test_alias():
88+
def test_create_unique_id():
8489
the_same_unique_names = [
8590
"ghost wallet",
8691
"Ghost Wallet",
@@ -97,7 +102,9 @@ def test_alias():
97102
"Ghost Wallet?",
98103
"Ghost Wallet***",
99104
]
100-
assert all(alias(name) == "ghost_wallet" for name in the_same_unique_names)
105+
assert all(
106+
create_unique_id(name) == "ghost_wallet" for name in the_same_unique_names
107+
)
101108
not_the_same_unique_names = [
102109
"ghost wallet",
103110
"ghost wallet 2",
@@ -106,4 +113,6 @@ def test_alias():
106113
"ghostwallet123",
107114
"my_ghos_wallet",
108115
]
109-
assert not all(alias(name) == "ghost_wallet" for name in not_the_same_unique_names)
116+
assert not all(
117+
create_unique_id(name) == "ghost_wallet" for name in not_the_same_unique_names
118+
)

tests/test_specter.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
from decimal import Decimal
44

55
import pytest
6-
from cryptoadvance.specter.helpers import alias
6+
from cryptoadvance.specter.helpers import create_unique_id
77
from cryptoadvance.specter.managers.wallet_manager import WalletManager
88
from cryptoadvance.specter.specter import Specter
99
from cryptoadvance.specter.specter_error import SpecterError
1010
from cryptoadvance.specter.util.mnemonic import generate_mnemonic
1111

1212

13-
def test_alias():
14-
assert alias("wurst 1") == "wurst_1"
15-
assert alias("wurst_1") == "wurst_1"
16-
assert alias("Wurst$ 1") == "wurst_1"
13+
def test_create_unique_id():
14+
assert create_unique_id("wurst 1") == "wurst_1"
15+
assert create_unique_id("wurst_1") == "wurst_1"
16+
assert create_unique_id("Wurst$ 1") == "wurst_1"
1717

1818

1919
def test_specter(specter_regtest_configured, caplog):

0 commit comments

Comments
 (0)