@@ -383,13 +383,26 @@ pub async fn management(
383383 ManagementDataVersion :: V1 ( v) => ( v. firmware_version . clone ( ) , v. port ) ,
384384 ManagementDataVersion :: V2 ( v) => ( v. firmware_version . clone ( ) , v. port ) ,
385385 } ;
386+
387+ let user_agent = req. headers ( ) . get ( "User-Agent" ) ;
388+ let device_type = user_agent
389+ . and_then ( |h| h. to_str ( ) . ok ( ) )
390+ . and_then ( |ua| {
391+ if ua == "ESP32 HTTP Client/1.0" {
392+ None
393+ } else {
394+ Some ( ua. to_string ( ) )
395+ }
396+ } ) ;
397+
386398 let mut conn = get_connection ( & state) ?;
387399 web_block_unpacked ( move || {
388400 match diesel:: update ( chargers:: chargers)
389401 . filter ( chargers:: id. eq ( charger_id) )
390402 . set ( (
391403 chargers:: firmware_version. eq ( fw_version) ,
392404 chargers:: webinterface_port. eq ( port as i32 ) ,
405+ chargers:: device_type. eq ( device_type) ,
393406 ) )
394407 . execute ( & mut conn)
395408 {
@@ -455,6 +468,7 @@ mod tests {
455468 let app = test:: init_service ( app) . await ;
456469
457470 let user_id = get_test_uuid ( & mail) . unwrap ( ) ;
471+ let charger_uuid_clone = charger. uuid . clone ( ) ;
458472 let data = ManagementDataVersion :: V2 ( ManagementDataVersion2 {
459473 id : charger. uuid ,
460474 password : charger. password ,
@@ -475,13 +489,26 @@ mod tests {
475489 let req = test:: TestRequest :: put ( )
476490 . uri ( "/management" )
477491 . append_header ( ( "X-Forwarded-For" , "123.123.123.3" ) )
492+ . append_header ( ( "User-Agent" , "Tinkerforge-WARP2_Charger/2.8.0+6811d0b1" ) )
478493 . set_json ( body)
479494 . to_request ( ) ;
480495 let resp: ManagementResponseSchema = test:: call_and_read_body_json ( & app, req) . await ;
481496
482497 println ! ( "{resp:?}" ) ;
483498 assert_eq ! ( [ 1 ] , * resp. configured_users) ;
484499 assert_eq ! ( vec![ user_id. to_string( ) ] , resp. configured_users_uuids) ;
500+
501+ // Verify device_type stored correctly
502+ use db_connector:: models:: chargers:: Charger as DbCharger ;
503+ use db_connector:: schema:: chargers:: dsl:: * ;
504+ let pool = db_connector:: test_connection_pool ( ) ;
505+ let mut conn = pool. get ( ) . unwrap ( ) ;
506+ let db_charger: DbCharger = chargers
507+ . filter ( id. eq ( uuid:: Uuid :: from_str ( & charger_uuid_clone) . unwrap ( ) ) )
508+ . select ( DbCharger :: as_select ( ) )
509+ . get_result ( & mut conn)
510+ . unwrap ( ) ;
511+ assert_eq ! ( db_charger. device_type. as_deref( ) , Some ( "Tinkerforge-WARP2_Charger/2.8.0+6811d0b1" ) ) ;
485512 }
486513
487514 #[ actix_web:: test]
0 commit comments