Skip to content

Commit

Permalink
Add validation text for FTN address
Browse files Browse the repository at this point in the history
  • Loading branch information
wwiv committed Mar 18, 2021
1 parent 48f3171 commit 5482459
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 44 deletions.
31 changes: 0 additions & 31 deletions binkp/remote.cpp
Expand Up @@ -88,19 +88,6 @@ ftn_addresses_from_address_list(const std::string& address_list,
return valid_addresses;
}

// Returns the single network name from the address list (only used when we
// are in answering mode, where a single address is presented) or the empty
// string if no address is present.
std::string domain_from_single_address(const std::string& address_list) {
if (const auto v = SplitString(address_list, " "); !v.empty()) {
const auto& s = v.front();
if (const auto index = s.find_last_of('@'); index != std::string::npos) {
return s.substr(index + 1);
}
}
return {};
}

uint16_t wwivnet_node_number_from_ftn_address(const std::string& address) {
std::string s = address;
LOG(INFO) << "wwivnet_node_number_from_ftn_address: '" << s << "'";
Expand Down Expand Up @@ -161,24 +148,6 @@ Remote::Remote(BinkConfig* config, bool remote_is_caller, const std::string& exp

void Remote::set_address_list(const std::string& a) {
address_list_ = ToStringLowerCase(a);

if (remote_is_caller_) {
//if (const auto name = domain_from_single_address(address_list_); !name.empty()) {
// domain_ = name;
//}

//// This is a pure FTN address or a stub wwivnet ftn address.
//const auto addr = ftn_address_from_address_list(address_list_, domain_);
//if (network().type == network_type_t::wwivnet) {
// // only valid for WWIVnet BinkP connections
// if (domain_.empty()) {
// domain_ = "wwivnet";
// }
// wwivnet_node_ = wwivnet_node_number_from_ftn_address(addr);
// ftn_address_ = fmt::format("20000:20000/{}@{}", wwivnet_node_, domain_);
// ftn_addresses_.emplace(ftn_address_);
//}
}
}

std::string Remote::network_name() const {
Expand Down
4 changes: 0 additions & 4 deletions binkp/remote.h
Expand Up @@ -70,10 +70,6 @@ uint16_t wwivnet_node_number_from_ftn_address(const std::string& address);
std::string ftn_address_from_address_list(const std::string& address_list, const std::string& domain);
std::set<sdk::fido::FidoAddress> ftn_addresses_from_address_list(const std::string& address_list, const std::set<sdk::fido::FidoAddress>& known_addresses);

// Returns just the network name (such as "wwivnet") from a FTN address like
// (such as "20000:20000/1@wwivnet")
std::string domain_from_single_address(const std::string& address_list);

} // namespace wwiv::net

#endif
5 changes: 0 additions & 5 deletions binkp_test/binkp_test.cpp
Expand Up @@ -120,11 +120,6 @@ TEST(NodeFromAddressTest, MultipleAddresses_SameNetwork) {
EXPECT_EQ("1:369/23@coolnet", ftn_address_from_address_list(address, "coolnet"));
}

TEST(DomainFromAddressTest, SingleAddress) {
const string address = "1:369/23@fidonet";
EXPECT_EQ("fidonet", domain_from_single_address(address));
}

// string expected_password_for(Callout* callout, int node)
TEST(ExpectedPasswordTest, Basic) {
const net_call_out_rec n{ "20000:20000/1234", 1234, 1, unused_options_sendback, 2, 3, 4, "pass", 5, 6 };
Expand Down
36 changes: 36 additions & 0 deletions localui/input.cpp
Expand Up @@ -113,6 +113,42 @@ void ACSEditItem::DefaultDisplay(CursesWindow* window) const {
this->DefaultDisplayString(window, data_);
}

EditlineResult FidoAddressStringEditItem::Run(CursesWindow* window) {
window->GotoXY(this->x_, this->y_);
DefaultDisplay(window);
window->GotoXY(this->x_, this->y_);
std::string last_addr;
const edline_validation_fn fn = [&](const std::string& raw) -> void {
const auto addr = StringTrim(raw);
if (addr == last_addr) {
// Don't keep re-evaluating the same thing.
return;
}
last_addr = addr;

if (const auto o = wwiv::sdk::fido::try_parse_fidoaddr(last_addr)) {
if (!o->domain().empty()) {
curses_out->footer()->ShowContextHelp(this->help_text());
} else {
curses_out->footer()->ShowContextHelp("Domain is missing. Address should be of the form:'Z:N/O@D'");
}
return;
}
curses_out->footer()->ShowContextHelp("Address is NOT valid. Address should be of the form:'Z:N/O@D'");
};
// Run the validation once on entry
if (!this->data_.empty()) {
fn(this->data_);
}
return editline(window, &this->data_, this->width_, edit_line_mode_, "", fn);
}

void FidoAddressStringEditItem::DefaultDisplay(CursesWindow* window) const {
window->GotoXY(this->x_, this->y_);
this->DefaultDisplayString(window, data_);
}


EditlineResult CustomEditItem::Run(CursesWindow* window) {
window->GotoXY(x_, y_);
auto s = to_field_();
Expand Down
22 changes: 22 additions & 0 deletions localui/input.h
Expand Up @@ -362,6 +362,28 @@ class ACSEditItem : public EditItem<std::string&> {
EditLineMode edit_line_mode_;
};


class FidoAddressStringEditItem : public EditItem<std::string&> {
public:
FidoAddressStringEditItem(int maxsize, std::string& data)
: EditItem<std::string&>(maxsize, data), edit_line_mode_(EditLineMode::LOWER) {}
~FidoAddressStringEditItem() override = default;
FidoAddressStringEditItem() = delete;
FidoAddressStringEditItem(FidoAddressStringEditItem const&) = delete;
FidoAddressStringEditItem(FidoAddressStringEditItem&&) = delete;
FidoAddressStringEditItem& operator=(FidoAddressStringEditItem const&) = delete;
FidoAddressStringEditItem& operator=(FidoAddressStringEditItem&&) = delete;

EditlineResult Run(CursesWindow* window) override;

protected:
void DefaultDisplay(CursesWindow* window) const override;

private:
EditLineMode edit_line_mode_;
};


template <typename T, int MAXLEN = std::numeric_limits<T>::digits10>
class NumberEditItem final : public EditItem<T*> {
public:
Expand Down
9 changes: 5 additions & 4 deletions wwivconfig/networks.cpp
Expand Up @@ -161,7 +161,7 @@ class FidoNetworkConfigSubDialog : public SubDialog<net_networks_rec> {
auto y = 1;

items.add(new Label("FTN Address:"),
new StringEditItem<std::string&>(MAX_STRING_LEN, n->fido_address, EditLineMode::ALL),
new FidoAddressStringEditItem(MAX_STRING_LEN, n->fido_address),
"The FTN address for this system (example 21:9/123@fsxnet).", 1, y);
++y;
items.add(new Label("Nodelist Base:"),
Expand Down Expand Up @@ -316,7 +316,7 @@ static void edit_fido_node_config(const FidoAddress& a, fido_node_config_t& n) {

items.add_aligned_width_column(1);
items.relayout_items_and_labels();
items.Run(StrCat("Address: ", a.as_string()));
items.Run(StrCat("Address: ", a.as_string(true, true)));
}

// Base item of an editable value, this class does not use templates.
Expand Down Expand Up @@ -354,8 +354,9 @@ class FidoPacketConfigSubDialog : public SubDialog<net_networks_rec> {
if (!dialog_yn(window, StrCat("Delete '", items[result.selected].text(), "' ?"))) {
break;
}
FidoAddress a(items[result.selected].text());
callout.erase(a);
if (const auto o = try_parse_fidoaddr(items[result.selected].text())) {
callout.erase(o.value());
}
} break;
case 'I': {
const string prompt = "Enter Address (Z:N/O) : ";
Expand Down

0 comments on commit 5482459

Please sign in to comment.