mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	review
This commit is contained in:
		| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user