Files
basicswap/basicswap/ui/page_smsgaddresses.py
2024-11-15 18:53:54 +02:00

155 lines
5.8 KiB
Python

# -*- coding: utf-8 -*-
# Copyright (c) 2023 tecnovert
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
from .util import (
PAGE_LIMIT,
get_data_entry,
have_data_entry,
get_data_entry_or,
validateTextInput,
set_pagination_filters,
)
from basicswap.util import (
ensure,
)
from basicswap.basicswap_util import (
AddressTypes,
strAddressType,
)
def page_smsgaddresses(self, url_split, post_string):
swap_client = self.server.swap_client
swap_client.checkSystemStatus()
summary = swap_client.getSummary()
filters = {
"page_no": 1,
"limit": PAGE_LIMIT,
"sort_by": "created_at",
"sort_dir": "desc",
"addr_type": -1,
}
page_data = {}
messages = []
err_messages = []
smsgaddresses = []
listaddresses = True
form_data = self.checkForm(post_string, "smsgaddresses", err_messages)
if form_data:
edit_address_id = None
for key in form_data:
if key.startswith(b"editaddr_"):
edit_address_id = int(key.split(b"_")[1])
break
if edit_address_id is not None:
listaddresses = False
page_data["edit_address"] = edit_address_id
page_data["addr_data"] = swap_client.listAllSMSGAddresses(
{"addr_id": edit_address_id}
)[0]
elif have_data_entry(form_data, "saveaddr"):
edit_address_id = int(get_data_entry(form_data, "edit_address_id"))
edit_addr = get_data_entry(form_data, "edit_address")
active_ind = int(get_data_entry(form_data, "active_ind"))
ensure(active_ind in (0, 1), "Invalid sort by")
addressnote = get_data_entry_or(form_data, "addressnote", "")
if not validateTextInput(
addressnote, "Address note", err_messages, max_length=30
):
listaddresses = False
page_data["edit_address"] = edit_address_id
else:
swap_client.editSMSGAddress(
edit_addr, active_ind=active_ind, addressnote=addressnote
)
messages.append(f"Edited address {edit_addr}")
elif have_data_entry(form_data, "shownewaddr"):
listaddresses = False
page_data["new_address"] = True
elif have_data_entry(form_data, "showaddaddr"):
listaddresses = False
page_data["new_send_address"] = True
elif have_data_entry(form_data, "createnewaddr"):
addressnote = get_data_entry_or(form_data, "addressnote", "")
if not validateTextInput(
addressnote, "Address note", err_messages, max_length=30
):
listaddresses = False
page_data["new_address"] = True
else:
new_addr, pubkey = swap_client.newSMSGAddress(addressnote=addressnote)
messages.append(f"Created address {new_addr}, pubkey {pubkey}")
elif have_data_entry(form_data, "createnewsendaddr"):
pubkey_hex = get_data_entry(form_data, "addresspubkey")
addressnote = get_data_entry_or(form_data, "addressnote", "")
if not validateTextInput(
addressnote, "Address note", messages, max_length=30
) or not validateTextInput(pubkey_hex, "Pubkey", messages, max_length=66):
listaddresses = False
page_data["new_send_address"] = True
else:
new_addr = swap_client.addSMSGAddress(
pubkey_hex, addressnote=addressnote
)
messages.append(f"Added address {new_addr}")
if have_data_entry(form_data, "clearfilters"):
swap_client.clearFilters("page_smsgaddresses")
else:
if have_data_entry(form_data, "sort_by"):
sort_by = get_data_entry(form_data, "sort_by")
ensure(sort_by in ["created_at", "rate"], "Invalid sort by")
filters["sort_by"] = sort_by
if have_data_entry(form_data, "sort_dir"):
sort_dir = get_data_entry(form_data, "sort_dir")
ensure(sort_dir in ["asc", "desc"], "Invalid sort dir")
filters["sort_dir"] = sort_dir
if have_data_entry(form_data, "filter_addressnote"):
addressnote = get_data_entry(form_data, "filter_addressnote")
if validateTextInput(
addressnote, "Address note", err_messages, max_length=30
):
filters["addressnote"] = addressnote
if have_data_entry(form_data, "filter_addr_type"):
filters["addr_type"] = int(
get_data_entry(form_data, "filter_addr_type")
)
set_pagination_filters(form_data, filters)
if have_data_entry(form_data, "applyfilters"):
swap_client.setFilters("page_smsgaddresses", filters)
else:
saved_filters = swap_client.getFilters("page_smsgaddresses")
if saved_filters:
filters.update(saved_filters)
if listaddresses is True:
smsgaddresses = swap_client.listAllSMSGAddresses(filters)
page_data["addr_types"] = [(int(t), strAddressType(t)) for t in AddressTypes]
page_data["network_addr"] = swap_client.network_addr
for addr in smsgaddresses:
addr["type"] = strAddressType(addr["type"])
template = self.server.env.get_template("smsgaddresses.html")
return self.render_template(
template,
{
"messages": messages,
"err_messages": err_messages,
"filters": filters,
"data": page_data,
"smsgaddresses": smsgaddresses,
"page_data": page_data,
"summary": summary,
},
)