Improve error messages.

This commit is contained in:
levlam 2022-12-05 00:00:08 +03:00
parent 1c0774b1a9
commit b005f42b2e
2 changed files with 16 additions and 14 deletions

View File

@ -118,8 +118,9 @@ void WebhookActor::on_resolved_ip_address(td::Result<td::IPAddress> r_ip_address
return on_error(r_ip_address.move_as_error()); return on_error(r_ip_address.move_as_error());
} }
auto new_ip_address = r_ip_address.move_as_ok(); auto new_ip_address = r_ip_address.move_as_ok();
if (!check_ip_address(new_ip_address)) { auto check_status = check_ip_address(new_ip_address);
return on_error(td::Status::Error(PSLICE() << "IP address " << new_ip_address.get_ip_str() << " is reserved")); if (check_status.is_error()) {
return on_error(std::move(check_status));
} }
if (!(ip_address_ == new_ip_address)) { if (!(ip_address_ == new_ip_address)) {
VLOG(webhook) << "IP address has changed: " << ip_address_ << " --> " << new_ip_address; VLOG(webhook) << "IP address has changed: " << ip_address_ << " --> " << new_ip_address;
@ -692,15 +693,14 @@ void WebhookActor::start_up() {
} else { } else {
CHECK(url_.protocol_ == td::HttpUrl::Protocol::Http); CHECK(url_.protocol_ == td::HttpUrl::Protocol::Http);
VLOG(webhook) << "Can't create connection: HTTP is forbidden"; VLOG(webhook) << "Can't create connection: HTTP is forbidden";
on_error(td::Status::Error("HTTPS url must be provided for webhook")); on_error(td::Status::Error("An HTTPS URL must be provided for webhook"));
} }
} }
if (fix_ip_address_ && !stop_flag_) { if (fix_ip_address_ && !stop_flag_) {
if (!ip_address_.is_valid()) { auto check_status = check_ip_address(ip_address_);
on_error(td::Status::Error("Invalid IP address specified")); if (check_status.is_error()) {
} else if (!check_ip_address(ip_address_)) { return on_error(std::move(check_status));
on_error(td::Status::Error(PSLICE() << "IP address " << ip_address_.get_ip_str() << " is reserved"));
} }
} }
@ -741,19 +741,21 @@ void WebhookActor::on_webhook_verified() {
send_closure(callback_, &Callback::webhook_verified, std::move(ip_address_str)); send_closure(callback_, &Callback::webhook_verified, std::move(ip_address_str));
} }
bool WebhookActor::check_ip_address(const td::IPAddress &addr) const { td::Status WebhookActor::check_ip_address(const td::IPAddress &addr) const {
if (!addr.is_valid()) { if (!addr.is_valid()) {
return false; return td::Status::Error("Invalid IP address specified");
} }
if (parameters_->local_mode_) { if (parameters_->local_mode_) {
// allow any valid IP address return td::Status::OK();
return true;
} }
if (!addr.is_ipv4()) { if (!addr.is_ipv4()) {
VLOG(webhook) << "Bad IP address (not IPv4): " << addr; VLOG(webhook) << "Bad IP address (not IPv4): " << addr;
return false; return td::Status::Error("IPv6-only addresses are not allowed");
} }
return !addr.is_reserved(); if (addr.is_reserved()) {
return td::Status::Error(PSLICE() << "IP address " << addr.get_ip_str() << " is reserved");
}
return td::Status::OK();
} }
void WebhookActor::on_error(td::Status status) { void WebhookActor::on_error(td::Status status) {

View File

@ -212,7 +212,7 @@ class WebhookActor final : public td::HttpOutboundConnection::Callback {
void start_up() final; void start_up() final;
bool check_ip_address(const td::IPAddress &addr) const; td::Status check_ip_address(const td::IPAddress &addr) const;
void on_error(td::Status status); void on_error(td::Status status);
void on_connection_error(td::Status error) final; void on_connection_error(td::Status error) final;