mirror of
https://github.com/esphome/esphome.git
synced 2025-09-17 10:42:21 +01:00
[api] Exclude ConnectRequest/Response when password is disabled
This commit is contained in:
@@ -133,6 +133,7 @@ message ConnectRequest {
|
|||||||
option (id) = 3;
|
option (id) = 3;
|
||||||
option (source) = SOURCE_CLIENT;
|
option (source) = SOURCE_CLIENT;
|
||||||
option (no_delay) = true;
|
option (no_delay) = true;
|
||||||
|
option (ifdef) = "USE_API_PASSWORD";
|
||||||
|
|
||||||
// The password to log in with
|
// The password to log in with
|
||||||
string password = 1;
|
string password = 1;
|
||||||
@@ -144,6 +145,7 @@ message ConnectResponse {
|
|||||||
option (id) = 4;
|
option (id) = 4;
|
||||||
option (source) = SOURCE_SERVER;
|
option (source) = SOURCE_SERVER;
|
||||||
option (no_delay) = true;
|
option (no_delay) = true;
|
||||||
|
option (ifdef) = "USE_API_PASSWORD";
|
||||||
|
|
||||||
bool invalid_password = 1;
|
bool invalid_password = 1;
|
||||||
}
|
}
|
||||||
|
@@ -1385,20 +1385,17 @@ bool APIConnection::send_hello_response(const HelloRequest &msg) {
|
|||||||
|
|
||||||
return this->send_message(resp, HelloResponse::MESSAGE_TYPE);
|
return this->send_message(resp, HelloResponse::MESSAGE_TYPE);
|
||||||
}
|
}
|
||||||
bool APIConnection::send_connect_response(const ConnectRequest &msg) {
|
|
||||||
bool correct = true;
|
|
||||||
#ifdef USE_API_PASSWORD
|
#ifdef USE_API_PASSWORD
|
||||||
correct = this->parent_->check_password(msg.password);
|
bool APIConnection::send_connect_response(const ConnectRequest &msg) {
|
||||||
#endif
|
|
||||||
|
|
||||||
ConnectResponse resp;
|
ConnectResponse resp;
|
||||||
// bool invalid_password = 1;
|
// bool invalid_password = 1;
|
||||||
resp.invalid_password = !correct;
|
resp.invalid_password = !this->parent_->check_password(msg.password);
|
||||||
if (correct) {
|
if (!resp.invalid_password) {
|
||||||
this->complete_authentication_();
|
this->complete_authentication_();
|
||||||
}
|
}
|
||||||
return this->send_message(resp, ConnectResponse::MESSAGE_TYPE);
|
return this->send_message(resp, ConnectResponse::MESSAGE_TYPE);
|
||||||
}
|
}
|
||||||
|
#endif // USE_API_PASSWORD
|
||||||
|
|
||||||
bool APIConnection::send_ping_response(const PingRequest &msg) {
|
bool APIConnection::send_ping_response(const PingRequest &msg) {
|
||||||
PingResponse resp;
|
PingResponse resp;
|
||||||
|
@@ -197,7 +197,9 @@ class APIConnection final : public APIServerConnection {
|
|||||||
void on_get_time_response(const GetTimeResponse &value) override;
|
void on_get_time_response(const GetTimeResponse &value) override;
|
||||||
#endif
|
#endif
|
||||||
bool send_hello_response(const HelloRequest &msg) override;
|
bool send_hello_response(const HelloRequest &msg) override;
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
bool send_connect_response(const ConnectRequest &msg) override;
|
bool send_connect_response(const ConnectRequest &msg) override;
|
||||||
|
#endif
|
||||||
bool send_disconnect_response(const DisconnectRequest &msg) override;
|
bool send_disconnect_response(const DisconnectRequest &msg) override;
|
||||||
bool send_ping_response(const PingRequest &msg) override;
|
bool send_ping_response(const PingRequest &msg) override;
|
||||||
bool send_device_info_response(const DeviceInfoRequest &msg) override;
|
bool send_device_info_response(const DeviceInfoRequest &msg) override;
|
||||||
|
@@ -42,6 +42,7 @@ void HelloResponse::calculate_size(ProtoSize &size) const {
|
|||||||
size.add_length(1, this->server_info_ref_.size());
|
size.add_length(1, this->server_info_ref_.size());
|
||||||
size.add_length(1, this->name_ref_.size());
|
size.add_length(1, this->name_ref_.size());
|
||||||
}
|
}
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
bool ConnectRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
|
bool ConnectRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
|
||||||
switch (field_id) {
|
switch (field_id) {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -54,6 +55,7 @@ bool ConnectRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value
|
|||||||
}
|
}
|
||||||
void ConnectResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_bool(1, this->invalid_password); }
|
void ConnectResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_bool(1, this->invalid_password); }
|
||||||
void ConnectResponse::calculate_size(ProtoSize &size) const { size.add_bool(1, this->invalid_password); }
|
void ConnectResponse::calculate_size(ProtoSize &size) const { size.add_bool(1, this->invalid_password); }
|
||||||
|
#endif
|
||||||
#ifdef USE_AREAS
|
#ifdef USE_AREAS
|
||||||
void AreaInfo::encode(ProtoWriteBuffer buffer) const {
|
void AreaInfo::encode(ProtoWriteBuffer buffer) const {
|
||||||
buffer.encode_uint32(1, this->area_id);
|
buffer.encode_uint32(1, this->area_id);
|
||||||
|
@@ -360,6 +360,7 @@ class HelloResponse final : public ProtoMessage {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
};
|
};
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
class ConnectRequest final : public ProtoDecodableMessage {
|
class ConnectRequest final : public ProtoDecodableMessage {
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t MESSAGE_TYPE = 3;
|
static constexpr uint8_t MESSAGE_TYPE = 3;
|
||||||
@@ -391,6 +392,7 @@ class ConnectResponse final : public ProtoMessage {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
class DisconnectRequest final : public ProtoMessage {
|
class DisconnectRequest final : public ProtoMessage {
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t MESSAGE_TYPE = 5;
|
static constexpr uint8_t MESSAGE_TYPE = 5;
|
||||||
|
@@ -669,8 +669,10 @@ void HelloResponse::dump_to(std::string &out) const {
|
|||||||
dump_field(out, "server_info", this->server_info_ref_);
|
dump_field(out, "server_info", this->server_info_ref_);
|
||||||
dump_field(out, "name", this->name_ref_);
|
dump_field(out, "name", this->name_ref_);
|
||||||
}
|
}
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
void ConnectRequest::dump_to(std::string &out) const { dump_field(out, "password", this->password); }
|
void ConnectRequest::dump_to(std::string &out) const { dump_field(out, "password", this->password); }
|
||||||
void ConnectResponse::dump_to(std::string &out) const { dump_field(out, "invalid_password", this->invalid_password); }
|
void ConnectResponse::dump_to(std::string &out) const { dump_field(out, "invalid_password", this->invalid_password); }
|
||||||
|
#endif
|
||||||
void DisconnectRequest::dump_to(std::string &out) const { out.append("DisconnectRequest {}"); }
|
void DisconnectRequest::dump_to(std::string &out) const { out.append("DisconnectRequest {}"); }
|
||||||
void DisconnectResponse::dump_to(std::string &out) const { out.append("DisconnectResponse {}"); }
|
void DisconnectResponse::dump_to(std::string &out) const { out.append("DisconnectResponse {}"); }
|
||||||
void PingRequest::dump_to(std::string &out) const { out.append("PingRequest {}"); }
|
void PingRequest::dump_to(std::string &out) const { out.append("PingRequest {}"); }
|
||||||
|
@@ -24,6 +24,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type,
|
|||||||
this->on_hello_request(msg);
|
this->on_hello_request(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
case ConnectRequest::MESSAGE_TYPE: {
|
case ConnectRequest::MESSAGE_TYPE: {
|
||||||
ConnectRequest msg;
|
ConnectRequest msg;
|
||||||
msg.decode(msg_data, msg_size);
|
msg.decode(msg_data, msg_size);
|
||||||
@@ -33,6 +34,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type,
|
|||||||
this->on_connect_request(msg);
|
this->on_connect_request(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
case DisconnectRequest::MESSAGE_TYPE: {
|
case DisconnectRequest::MESSAGE_TYPE: {
|
||||||
DisconnectRequest msg;
|
DisconnectRequest msg;
|
||||||
// Empty message: no decode needed
|
// Empty message: no decode needed
|
||||||
@@ -597,11 +599,13 @@ void APIServerConnection::on_hello_request(const HelloRequest &msg) {
|
|||||||
this->on_fatal_error();
|
this->on_fatal_error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
void APIServerConnection::on_connect_request(const ConnectRequest &msg) {
|
void APIServerConnection::on_connect_request(const ConnectRequest &msg) {
|
||||||
if (!this->send_connect_response(msg)) {
|
if (!this->send_connect_response(msg)) {
|
||||||
this->on_fatal_error();
|
this->on_fatal_error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
void APIServerConnection::on_disconnect_request(const DisconnectRequest &msg) {
|
void APIServerConnection::on_disconnect_request(const DisconnectRequest &msg) {
|
||||||
if (!this->send_disconnect_response(msg)) {
|
if (!this->send_disconnect_response(msg)) {
|
||||||
this->on_fatal_error();
|
this->on_fatal_error();
|
||||||
|
@@ -26,7 +26,9 @@ class APIServerConnectionBase : public ProtoService {
|
|||||||
|
|
||||||
virtual void on_hello_request(const HelloRequest &value){};
|
virtual void on_hello_request(const HelloRequest &value){};
|
||||||
|
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
virtual void on_connect_request(const ConnectRequest &value){};
|
virtual void on_connect_request(const ConnectRequest &value){};
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void on_disconnect_request(const DisconnectRequest &value){};
|
virtual void on_disconnect_request(const DisconnectRequest &value){};
|
||||||
virtual void on_disconnect_response(const DisconnectResponse &value){};
|
virtual void on_disconnect_response(const DisconnectResponse &value){};
|
||||||
@@ -213,7 +215,9 @@ class APIServerConnectionBase : public ProtoService {
|
|||||||
class APIServerConnection : public APIServerConnectionBase {
|
class APIServerConnection : public APIServerConnectionBase {
|
||||||
public:
|
public:
|
||||||
virtual bool send_hello_response(const HelloRequest &msg) = 0;
|
virtual bool send_hello_response(const HelloRequest &msg) = 0;
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
virtual bool send_connect_response(const ConnectRequest &msg) = 0;
|
virtual bool send_connect_response(const ConnectRequest &msg) = 0;
|
||||||
|
#endif
|
||||||
virtual bool send_disconnect_response(const DisconnectRequest &msg) = 0;
|
virtual bool send_disconnect_response(const DisconnectRequest &msg) = 0;
|
||||||
virtual bool send_ping_response(const PingRequest &msg) = 0;
|
virtual bool send_ping_response(const PingRequest &msg) = 0;
|
||||||
virtual bool send_device_info_response(const DeviceInfoRequest &msg) = 0;
|
virtual bool send_device_info_response(const DeviceInfoRequest &msg) = 0;
|
||||||
@@ -334,7 +338,9 @@ class APIServerConnection : public APIServerConnectionBase {
|
|||||||
#endif
|
#endif
|
||||||
protected:
|
protected:
|
||||||
void on_hello_request(const HelloRequest &msg) override;
|
void on_hello_request(const HelloRequest &msg) override;
|
||||||
|
#ifdef USE_API_PASSWORD
|
||||||
void on_connect_request(const ConnectRequest &msg) override;
|
void on_connect_request(const ConnectRequest &msg) override;
|
||||||
|
#endif
|
||||||
void on_disconnect_request(const DisconnectRequest &msg) override;
|
void on_disconnect_request(const DisconnectRequest &msg) override;
|
||||||
void on_ping_request(const PingRequest &msg) override;
|
void on_ping_request(const PingRequest &msg) override;
|
||||||
void on_device_info_request(const DeviceInfoRequest &msg) override;
|
void on_device_info_request(const DeviceInfoRequest &msg) override;
|
||||||
|
Reference in New Issue
Block a user