Skip to content

Commit 45fa504

Browse files
committed
backend: add device type upon management connection.
fix #219
1 parent f237a05 commit 45fa504

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

backend/src/routes/management.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)