mirror of
https://github.com/esphome/esphome.git
synced 2025-08-05 18:07:47 +00:00
review
This commit is contained in:
parent
4dbe19a56e
commit
bb153d42dc
@ -1418,6 +1418,24 @@ bool APIConnection::try_send_log_message(int level, const char *tag, const char
|
|||||||
return this->send_buffer(buffer, SubscribeLogsResponse::MESSAGE_TYPE);
|
return this->send_buffer(buffer, SubscribeLogsResponse::MESSAGE_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void APIConnection::complete_authentication_() {
|
||||||
|
// Early return if already authenticated
|
||||||
|
if (this->flags_.connection_state == static_cast<uint8_t>(ConnectionState::AUTHENTICATED)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->flags_.connection_state = static_cast<uint8_t>(ConnectionState::AUTHENTICATED);
|
||||||
|
ESP_LOGD(TAG, "%s connected (no password)", this->get_client_combined_info().c_str());
|
||||||
|
#ifdef USE_API_CLIENT_CONNECTED_TRIGGER
|
||||||
|
this->parent_->get_client_connected_trigger()->trigger(this->client_info_, this->client_peername_);
|
||||||
|
#endif
|
||||||
|
#ifdef USE_HOMEASSISTANT_TIME
|
||||||
|
if (homeassistant::global_homeassistant_time != nullptr) {
|
||||||
|
this->send_time_request();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
HelloResponse APIConnection::hello(const HelloRequest &msg) {
|
HelloResponse APIConnection::hello(const HelloRequest &msg) {
|
||||||
this->client_info_ = msg.client_info;
|
this->client_info_ = msg.client_info;
|
||||||
this->client_peername_ = this->helper_->getpeername();
|
this->client_peername_ = this->helper_->getpeername();
|
||||||
@ -1433,26 +1451,17 @@ HelloResponse APIConnection::hello(const HelloRequest &msg) {
|
|||||||
resp.server_info = App.get_name() + " (esphome v" ESPHOME_VERSION ")";
|
resp.server_info = App.get_name() + " (esphome v" ESPHOME_VERSION ")";
|
||||||
resp.name = App.get_name();
|
resp.name = App.get_name();
|
||||||
|
|
||||||
bool needs_auth = false;
|
|
||||||
#ifdef USE_API_PASSWORD
|
#ifdef USE_API_PASSWORD
|
||||||
needs_auth = this->parent_->uses_password();
|
if (!this->parent_->uses_password()) {
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!needs_auth) {
|
|
||||||
// Auto-authenticate if no password is required
|
// Auto-authenticate if no password is required
|
||||||
this->flags_.connection_state = static_cast<uint8_t>(ConnectionState::AUTHENTICATED);
|
this->complete_authentication_();
|
||||||
ESP_LOGD(TAG, "%s connected (no password)", this->get_client_combined_info().c_str());
|
|
||||||
#ifdef USE_API_CLIENT_CONNECTED_TRIGGER
|
|
||||||
this->parent_->get_client_connected_trigger()->trigger(this->client_info_, this->client_peername_);
|
|
||||||
#endif
|
|
||||||
#ifdef USE_HOMEASSISTANT_TIME
|
|
||||||
if (homeassistant::global_homeassistant_time != nullptr) {
|
|
||||||
this->send_time_request();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
this->flags_.connection_state = static_cast<uint8_t>(ConnectionState::CONNECTED);
|
this->flags_.connection_state = static_cast<uint8_t>(ConnectionState::CONNECTED);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// No password support - always auto-authenticate
|
||||||
|
this->complete_authentication_();
|
||||||
|
#endif
|
||||||
|
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
@ -1467,22 +1476,7 @@ ConnectResponse APIConnection::connect(const ConnectRequest &msg) {
|
|||||||
resp.invalid_password = !correct;
|
resp.invalid_password = !correct;
|
||||||
if (correct) {
|
if (correct) {
|
||||||
ESP_LOGD(TAG, "%s connected", this->get_client_combined_info().c_str());
|
ESP_LOGD(TAG, "%s connected", this->get_client_combined_info().c_str());
|
||||||
|
this->complete_authentication_();
|
||||||
// Check if we're already authenticated (e.g., from auto-auth during hello)
|
|
||||||
bool was_authenticated = this->flags_.connection_state == static_cast<uint8_t>(ConnectionState::AUTHENTICATED);
|
|
||||||
this->flags_.connection_state = static_cast<uint8_t>(ConnectionState::AUTHENTICATED);
|
|
||||||
|
|
||||||
// Only trigger events if we weren't already authenticated
|
|
||||||
if (!was_authenticated) {
|
|
||||||
#ifdef USE_API_CLIENT_CONNECTED_TRIGGER
|
|
||||||
this->parent_->get_client_connected_trigger()->trigger(this->client_info_, this->client_peername_);
|
|
||||||
#endif
|
|
||||||
#ifdef USE_HOMEASSISTANT_TIME
|
|
||||||
if (homeassistant::global_homeassistant_time != nullptr) {
|
|
||||||
this->send_time_request();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
@ -271,6 +271,9 @@ class APIConnection : public APIServerConnection {
|
|||||||
ProtoWriteBuffer allocate_batch_message_buffer(uint16_t size);
|
ProtoWriteBuffer allocate_batch_message_buffer(uint16_t size);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// Helper function to handle authentication completion
|
||||||
|
void complete_authentication_();
|
||||||
|
|
||||||
// Helper function to fill common entity info fields
|
// Helper function to fill common entity info fields
|
||||||
static void fill_entity_info_base(esphome::EntityBase *entity, InfoResponseProtoMessage &response) {
|
static void fill_entity_info_base(esphome::EntityBase *entity, InfoResponseProtoMessage &response) {
|
||||||
// Set common fields that are shared by all entity types
|
// Set common fields that are shared by all entity types
|
||||||
|
Loading…
x
Reference in New Issue
Block a user